55# #
66
77
8- VERSION = 0.43
8+ VERSION = \
9+ $(eval VERSION := $$(shell sed -ne 's/^version: * "\(.* \) "/\1/p' flexdll.opam) )$(VERSION )
10+
911all : flexlink.exe support
1012
1113OCAML_CONFIG_FILE =$(shell cygpath -ad "$(shell ocamlopt -where 2>/dev/null) /Makefile.config" 2>/dev/null)
1214include $(OCAML_CONFIG_FILE )
1315OCAMLOPT =ocamlopt
1416EMPTY =
1517SPACE =$(EMPTY ) $(EMPTY )
18+ COMMA =,
1619OCAML_VERSION: =$(firstword $(subst ~, ,$(subst +, ,$(shell $(OCAMLOPT ) -version 2>/dev/null) ) ) )
1720ifeq ($(OCAML_VERSION ) ,)
1821OCAML_VERSION: =0
@@ -31,7 +34,7 @@ MIN64CC = $(MINGW64_PREFIX)gcc
3134CYGWIN64_PREFIX = x86_64-pc-cygwin-
3235CYG64CC = $(CYGWIN64_PREFIX ) gcc
3336
34- version.ml : Makefile
37+ version.ml : Makefile flexdll.opam
3538 echo " let version = \" $( VERSION) \" " > version.ml
3639 echo " let mingw_prefix = \" $( MINGW_PREFIX) \" " >> version.ml
3740 echo " let mingw64_prefix = \" $( MINGW64_PREFIX) \" " >> version.ml
@@ -160,11 +163,32 @@ flexlink.exe: $(OBJS) $(RES)
160163 rm -f $@
161164 $(RES_PREFIX ) $(OCAMLOPT ) -o $@ $(LINKFLAGS ) $(OBJS )
162165
163- version.res : version.rc
164- $(RES_PREFIX ) rc $<
165-
166- version_res.o : version.rc
167- $(TOOLPREF ) windres -i $< -o $@
166+ # VERSION at present is x.y, but there would be no reason not to have x.y.z in
167+ # future. Windows versions have four components. $(FLEXDLL_FULL_VERSION) adds
168+ # additional .0s to the right of $(VERSION) such that $(FLEXDLL_FULL_VERSION)
169+ # has four version components.
170+ # Thus if VERSION=0.43, then FLEXDLL_FULL_VERSION=0.43.0.0
171+ # $(FLEXDLL_VS_VERSION_INFO) is the same value, but using a ',' to separate the
172+ # items rather than a '.', as this is the format used in a VS_VERSION_INFO block
173+ # in Resource Compiler format.
174+ FLEXDLL_FULL_VERSION = \
175+ $(subst $(SPACE ) ,.,$(wordlist 1, 4, $(subst .,$(SPACE ) ,$(VERSION ) ) 0 0 0) )
176+ FLEXDLL_VS_VERSION_INFO = $(subst .,$(COMMA ) ,$(FLEXDLL_FULL_VERSION ) )
177+
178+ RC_FLAGS = \
179+ /d FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO ) \
180+ /d FLEXDLL_FULL_VERSION="$(FLEXDLL_FULL_VERSION ) "
181+
182+ # cf. https://sourceware.org/bugzilla/show_bug.cgi?id=27843
183+ WINDRES_FLAGS = \
184+ -D FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO ) \
185+ -D FLEXDLL_FULL_VERSION=\\\"$(FLEXDLL_FULL_VERSION ) \\\"
186+
187+ version.res : version.rc flexdll.opam
188+ $(RES_PREFIX ) rc /nologo $(RC_FLAGS ) $<
189+
190+ version_res.o : version.rc flexdll.opam
191+ $(TOOLPREF ) windres $(WINDRES_FLAGS ) -i $< -o $@
168192
169193flexdll_msvc.obj : flexdll.c flexdll.h
170194 $(MSVC_PREFIX ) $(MSVCC ) /DMSVC -c /Fo" $@ " $<
@@ -239,7 +263,7 @@ package_src:
239263 rm -Rf flexdll-$(VERSION )
240264 mkdir flexdll-$(VERSION )
241265 mkdir flexdll-$(VERSION ) /test
242- cp -a $(filter-out version.ml,$(OBJS:Compat.ml=Compat.ml.in ) ) Makefile msvs-detect $(COMMON_FILES ) version.rc flexdll.install flexdll-$(VERSION ) /
266+ cp -a $(filter-out version.ml,$(OBJS:Compat.ml=Compat.ml.in ) ) Makefile msvs-detect $(COMMON_FILES ) version.rc flexdll.install flexdll.opam flexdll -$(VERSION ) /
243267 cp -aR test/Makefile test/* .c flexdll-$(VERSION ) /test/
244268 tar czf $(PACKAGE ) flexdll-$(VERSION )
245269 rm -Rf flexdll-$(VERSION )
0 commit comments