From 5969494fb15550e78c5748c58ea4e5086fea92ae Mon Sep 17 00:00:00 2001 From: David Allsopp Date: Fri, 11 Nov 2022 11:33:12 +0000 Subject: [PATCH 1/3] Add an opam .install for FlexDLL 0.35-0.41 This file can be referenced from the opam packages for these pre-releases to be used in addition to the tarball. --- flexdll.install | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 flexdll.install diff --git a/flexdll.install b/flexdll.install new file mode 100644 index 0000000..99c1949 --- /dev/null +++ b/flexdll.install @@ -0,0 +1,20 @@ +share: [ + "Makefile" + "cmdline.ml" + "coff.ml" + "?Compat401.ml" + "Compat402.ml" + "Compat403.ml" + "?Compat405.ml" + "?Compat406.ml" + "?Compat407.ml" + "create_dll.ml" + "default.manifest" + "default_amd64.manifest" + "?findwinsdk" + "flexdll.c" + "flexdll.h" + "flexdll_initer.c" + "reloc.ml" + "version.rc" +] From 62f20c339e285e4ae1fc83faa99f638bedf4c4ab Mon Sep 17 00:00:00 2001 From: David Allsopp Date: Fri, 11 Nov 2022 11:33:12 +0000 Subject: [PATCH 2/3] Package the sources as flexdll The flexdll package is intended for use when building OCaml in "bootstrapped" flexdll mode and installs the required source files to the share folder in an opam switch. The .install can be used with both FlexDLL 0.42 and FlexDLL 0.43 --- Makefile | 2 +- flexdll.install | 8 +------- flexdll.opam | 11 +++++++++++ 3 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 flexdll.opam diff --git a/Makefile b/Makefile index 8978c50..537e2c2 100644 --- a/Makefile +++ b/Makefile @@ -239,7 +239,7 @@ package_src: rm -Rf flexdll-$(VERSION) mkdir flexdll-$(VERSION) mkdir flexdll-$(VERSION)/test - cp -a $(filter-out version.ml,$(OBJS:Compat.ml=Compat.ml.in)) Makefile msvs-detect $(COMMON_FILES) version.rc flexdll-$(VERSION)/ + cp -a $(filter-out version.ml,$(OBJS:Compat.ml=Compat.ml.in)) Makefile msvs-detect $(COMMON_FILES) version.rc flexdll.install flexdll-$(VERSION)/ cp -aR test/Makefile test/*.c flexdll-$(VERSION)/test/ tar czf $(PACKAGE) flexdll-$(VERSION) rm -Rf flexdll-$(VERSION) diff --git a/flexdll.install b/flexdll.install index 99c1949..525bced 100644 --- a/flexdll.install +++ b/flexdll.install @@ -2,16 +2,10 @@ share: [ "Makefile" "cmdline.ml" "coff.ml" - "?Compat401.ml" - "Compat402.ml" - "Compat403.ml" - "?Compat405.ml" - "?Compat406.ml" - "?Compat407.ml" + "Compat.ml.in" "create_dll.ml" "default.manifest" "default_amd64.manifest" - "?findwinsdk" "flexdll.c" "flexdll.h" "flexdll_initer.c" diff --git a/flexdll.opam b/flexdll.opam new file mode 100644 index 0000000..edce50c --- /dev/null +++ b/flexdll.opam @@ -0,0 +1,11 @@ +opam-version: "2.0" +version: "0.43" +authors: "Alain Frisch" +maintainer: "David Allsopp " +bug-reports: "https://github.com/ocaml/flexdll/issues" +dev-repo: "git+https://github.com/ocaml/flexdll.git" +homepage: "https://github.com/ocaml/flexdll#readme" +license: "Zlib" +synopsis: "FlexDLL Sources" +description: "Source package for FlexDLL. Installs the required files for +bootstrapping FlexDLL as part of an OCaml build." From c5d59b5fc0812da927b8c12b2211c1acd3026309 Mon Sep 17 00:00:00 2001 From: David Allsopp Date: Fri, 11 Nov 2022 11:33:12 +0000 Subject: [PATCH 3/3] Store the version number in one place The VERSION macro in Makefile is now the single source of the version of FlexDLL. This is used when compiling version.rc. version.rc is corrected to adopt Windows version format, so the current release is rendered as 0.43.0.0 instead of 0.0.0.43. flexdll.opam is now the primary source for the version number for the package, and both version.ml and version.rc are compiled using the number taken from there. --- Makefile | 41 +++++++++++++++++++++++++++++++++-------- appveyor_build.sh | 2 +- flexdll.install | 1 + version.rc | 8 ++++---- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 537e2c2..d00f15e 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,10 @@ ## -VERSION = 0.43 +# Fetch the version number from its source, in flexdll.opam +VERSION = \ + $(eval VERSION := $$(shell sed -ne 's/^version: *"\(.*\)"/\1/p' flexdll.opam))$(VERSION) + all: flexlink.exe support OCAML_CONFIG_FILE=$(shell cygpath -ad "$(shell ocamlopt -where 2>/dev/null)/Makefile.config" 2>/dev/null) @@ -13,6 +16,7 @@ include $(OCAML_CONFIG_FILE) OCAMLOPT=ocamlopt EMPTY= SPACE=$(EMPTY) $(EMPTY) +COMMA=, OCAML_VERSION:=$(firstword $(subst ~, ,$(subst +, ,$(shell $(OCAMLOPT) -version 2>/dev/null)))) ifeq ($(OCAML_VERSION),) OCAML_VERSION:=0 @@ -31,7 +35,7 @@ MIN64CC = $(MINGW64_PREFIX)gcc CYGWIN64_PREFIX = x86_64-pc-cygwin- CYG64CC = $(CYGWIN64_PREFIX)gcc -version.ml: Makefile +version.ml: Makefile flexdll.opam echo "let version = \"$(VERSION)\"" > version.ml echo "let mingw_prefix = \"$(MINGW_PREFIX)\"" >> version.ml echo "let mingw64_prefix = \"$(MINGW64_PREFIX)\"" >> version.ml @@ -160,11 +164,32 @@ flexlink.exe: $(OBJS) $(RES) rm -f $@ $(RES_PREFIX) $(OCAMLOPT) -o $@ $(LINKFLAGS) $(OBJS) -version.res: version.rc - $(RES_PREFIX) rc $< - -version_res.o: version.rc - $(TOOLPREF)windres -i $< -o $@ +# VERSION at present is x.y, but there would be no reason not to have x.y.z in +# future. Windows versions have four components. $(FLEXDLL_FULL_VERSION) adds +# additional .0s to the right of $(VERSION) such that $(FLEXDLL_FULL_VERSION) +# has four version components. +# Thus if VERSION=0.43, then FLEXDLL_FULL_VERSION=0.43.0.0 +# $(FLEXDLL_VS_VERSION_INFO) is the same value, but using a ',' to separate the +# items rather than a '.', as this is the format used in a VS_VERSION_INFO block +# in Resource Compiler format. +FLEXDLL_FULL_VERSION = \ + $(subst $(SPACE),.,$(wordlist 1, 4, $(subst .,$(SPACE),$(VERSION)) 0 0 0)) +FLEXDLL_VS_VERSION_INFO = $(subst .,$(COMMA),$(FLEXDLL_FULL_VERSION)) + +RC_FLAGS = \ + /d FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO) \ + /d FLEXDLL_FULL_VERSION="$(FLEXDLL_FULL_VERSION)" + +# cf. https://sourceware.org/bugzilla/show_bug.cgi?id=27843 +WINDRES_FLAGS = \ + -D FLEXDLL_VS_VERSION_INFO=$(FLEXDLL_VS_VERSION_INFO) \ + -D FLEXDLL_FULL_VERSION=\\\"$(FLEXDLL_FULL_VERSION)\\\" + +version.res: version.rc flexdll.opam + $(RES_PREFIX) rc /nologo $(RC_FLAGS) $< + +version_res.o: version.rc flexdll.opam + $(TOOLPREF)windres $(WINDRES_FLAGS) -i $< -o $@ flexdll_msvc.obj: flexdll.c flexdll.h $(MSVC_PREFIX) $(MSVCC) /DMSVC -c /Fo"$@" $< @@ -239,7 +264,7 @@ package_src: rm -Rf flexdll-$(VERSION) mkdir flexdll-$(VERSION) mkdir flexdll-$(VERSION)/test - cp -a $(filter-out version.ml,$(OBJS:Compat.ml=Compat.ml.in)) Makefile msvs-detect $(COMMON_FILES) version.rc flexdll.install flexdll-$(VERSION)/ + 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)/ cp -aR test/Makefile test/*.c flexdll-$(VERSION)/test/ tar czf $(PACKAGE) flexdll-$(VERSION) rm -Rf flexdll-$(VERSION) diff --git a/appveyor_build.sh b/appveyor_build.sh index 27a82a6..003ae31 100755 --- a/appveyor_build.sh +++ b/appveyor_build.sh @@ -211,7 +211,7 @@ if [ "$ARTEFACTS" = 'yes' ] ; then make package_bin installer SUFFIX="$(git describe)" - VERSION="$(sed -ne 's/^VERSION *= *//p' Makefile)" + VERSION="$(sed -ne 's/^version: *"\(.*\)"/\1/p' flexdll.opam)" if [ "$SUFFIX" != "$VERSION" ] ; then mv "flexdll-bin-$VERSION.zip" "flexdll-bin-$SUFFIX.zip" mv "flexdll-$VERSION-setup.exe" "flexdll-$SUFFIX-setup.exe" diff --git a/flexdll.install b/flexdll.install index 525bced..2b3f67d 100644 --- a/flexdll.install +++ b/flexdll.install @@ -8,6 +8,7 @@ share: [ "default_amd64.manifest" "flexdll.c" "flexdll.h" + "flexdll.opam" "flexdll_initer.c" "reloc.ml" "version.rc" diff --git a/version.rc b/version.rc index 097305d..9a9c7fd 100644 --- a/version.rc +++ b/version.rc @@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,0,0,43 - PRODUCTVERSION 0,0,0,43 + FILEVERSION FLEXDLL_VS_VERSION_INFO + PRODUCTVERSION FLEXDLL_VS_VERSION_INFO FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L @@ -21,8 +21,8 @@ BEGIN BEGIN BLOCK "040904b0" BEGIN - VALUE "FileVersion", "0.0.0.43" - VALUE "ProductVersion", "0.0.0.43" + VALUE "FileVersion", FLEXDLL_FULL_VERSION + VALUE "ProductVersion", FLEXDLL_FULL_VERSION VALUE "ProductName", "FlexDLL" VALUE "FileDescription", "FlexDLL Linker" VALUE "LegalCopyright", "Institut National de Recherche en Informatique et en Automatique"