55# #
66
77
8- VERSION = 0.43
8+ # Fetch the version number from its source, in flexdll.opam
9+ VERSION = \
10+ $(eval VERSION := $$(shell sed -ne 's/^version: * "\(.* \) "/\1/p' flexdll.opam) )$(VERSION )
11+
912all : flexlink.exe support
1013
1114OCAML_CONFIG_FILE =$(shell cygpath -ad "$(shell ocamlopt -where 2>/dev/null) /Makefile.config" 2>/dev/null)
1215include $(OCAML_CONFIG_FILE )
1316OCAMLOPT =ocamlopt
1417EMPTY =
1518SPACE =$(EMPTY ) $(EMPTY )
19+ COMMA =,
1620OCAML_VERSION: =$(firstword $(subst ~, ,$(subst +, ,$(shell $(OCAMLOPT ) -version 2>/dev/null) ) ) )
1721ifeq ($(OCAML_VERSION ) ,)
1822OCAML_VERSION: =0
@@ -31,7 +35,7 @@ MIN64CC = $(MINGW64_PREFIX)gcc
3135CYGWIN64_PREFIX = x86_64-pc-cygwin-
3236CYG64CC = $(CYGWIN64_PREFIX ) gcc
3337
34- version.ml : Makefile
38+ version.ml : Makefile flexdll.opam
3539 echo " let version = \" $( VERSION) \" " > version.ml
3640 echo " let mingw_prefix = \" $( MINGW_PREFIX) \" " >> version.ml
3741 echo " let mingw64_prefix = \" $( MINGW64_PREFIX) \" " >> version.ml
@@ -160,11 +164,32 @@ flexlink.exe: $(OBJS) $(RES)
160164 rm -f $@
161165 $(RES_PREFIX ) $(OCAMLOPT ) -o $@ $(LINKFLAGS ) $(OBJS )
162166
163- version.res : version.rc
164- $(RES_PREFIX ) rc $<
165-
166- version_res.o : version.rc
167- $(TOOLPREF ) windres -i $< -o $@
167+ # VERSION at present is x.y, but there would be no reason not to have x.y.z in
168+ # future. Windows versions have four components. $(FLEXDLL_FULL_VERSION) adds
169+ # additional .0s to the right of $(VERSION) such that $(FLEXDLL_FULL_VERSION)
170+ # has four version components.
171+ # Thus if VERSION=0.43, then FLEXDLL_FULL_VERSION=0.43.0.0
172+ # $(FLEXDLL_VS_VERSION_INFO) is the same value, but using a ',' to separate the
173+ # items rather than a '.', as this is the format used in a VS_VERSION_INFO block
174+ # in Resource Compiler format.
175+ FLEXDLL_FULL_VERSION = \
176+ $(subst $(SPACE ) ,.,$(wordlist 1, 4, $(subst .,$(SPACE ) ,$(VERSION ) ) 0 0 0) )
177+ FLEXDLL_VS_VERSION_INFO = $(subst .,$(COMMA ) ,$(FLEXDLL_FULL_VERSION ) )
178+
179+ RC_FLAGS = \
180+ /d FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO ) \
181+ /d FLEXDLL_FULL_VERSION="$(FLEXDLL_FULL_VERSION ) "
182+
183+ # cf. https://sourceware.org/bugzilla/show_bug.cgi?id=27843
184+ WINDRES_FLAGS = \
185+ -D FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO ) \
186+ -D FLEXDLL_FULL_VERSION=\\\"$(FLEXDLL_FULL_VERSION ) \\\"
187+
188+ version.res : version.rc flexdll.opam
189+ $(RES_PREFIX ) rc /nologo $(RC_FLAGS ) $<
190+
191+ version_res.o : version.rc flexdll.opam
192+ $(TOOLPREF ) windres $(WINDRES_FLAGS ) -i $< -o $@
168193
169194flexdll_msvc.obj : flexdll.c flexdll.h
170195 $(MSVC_PREFIX ) $(MSVCC ) /DMSVC -c /Fo" $@ " $<
@@ -239,7 +264,7 @@ package_src:
239264 rm -Rf flexdll-$(VERSION )
240265 mkdir flexdll-$(VERSION )
241266 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 ) /
267+ 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 ) /
243268 cp -aR test/Makefile test/* .c flexdll-$(VERSION ) /test/
244269 tar czf $(PACKAGE ) flexdll-$(VERSION )
245270 rm -Rf flexdll-$(VERSION )
0 commit comments