From 1654dc831cf62f170f4344ee3ce054e5bf68dd9e Mon Sep 17 00:00:00 2001 From: Nicolas Benes Date: Sat, 1 Oct 2022 21:00:15 +0200 Subject: [PATCH] tzdata: enable cross-compilation for Windows * Additional make flags are needed since some functions do not exist or have different names or parameters on Windows. * When compiling for Windows, GCC implicitly adds a `.exe` suffix to the output file name. A patch is needed for the `install` target to locate and install the correct files. * The tzdata Makefile contains `zic` and `ZIC` variables. The former refers to the path of the program to execute, while the latter invokes the former with additional arguments (it is defined as `ZIC=$(zic) $(ZFLAGS)`, `ZFLAGS` is normally empty). Previously, `ZIC` was overridden, potentially loosing `ZFLAGS` arguments. This commit changes it to override `zic` instead. * The `zic` program is built and installed as part of the package and also executed during the build to translate time-related files. When cross-compiling it means that two executables need to be compiled: one to get installed and run on the host platform, and another to run on the build platform. Instead of renaming files and building a temporary executable for the build platform, this commit references the build platform's `tzdata.bin` package and runs its `zic` program. --- ...xe-extension-for-MS-Windows-binaries.patch | 15 ++++++++++++ pkgs/data/misc/tzdata/default.nix | 23 +++++++++---------- 2 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 pkgs/data/misc/tzdata/0001-Add-exe-extension-for-MS-Windows-binaries.patch diff --git a/pkgs/data/misc/tzdata/0001-Add-exe-extension-for-MS-Windows-binaries.patch b/pkgs/data/misc/tzdata/0001-Add-exe-extension-for-MS-Windows-binaries.patch new file mode 100644 index 000000000000..d44481056c43 --- /dev/null +++ b/pkgs/data/misc/tzdata/0001-Add-exe-extension-for-MS-Windows-binaries.patch @@ -0,0 +1,15 @@ +diff --git a/Makefile b/Makefile +index a9a989e..4da737b 100644 +--- a/Makefile ++++ b/Makefile +@@ -579,8 +579,8 @@ install: all $(DATA) $(REDO) $(MANS) + -t '$(DESTDIR)$(TZDEFAULT)' + cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.' + cp tzselect '$(DESTDIR)$(BINDIR)/.' +- cp zdump '$(DESTDIR)$(ZDUMPDIR)/.' +- cp zic '$(DESTDIR)$(ZICDIR)/.' ++ cp zdump.exe '$(DESTDIR)$(ZDUMPDIR)/.' ++ cp zic.exe '$(DESTDIR)$(ZICDIR)/.' + cp libtz.a '$(DESTDIR)$(LIBDIR)/.' + $(RANLIB) '$(DESTDIR)$(LIBDIR)/libtz.a' + cp -f newctime.3 newtzset.3 '$(DESTDIR)$(MANDIR)/man3/.' diff --git a/pkgs/data/misc/tzdata/default.nix b/pkgs/data/misc/tzdata/default.nix index 41004243a557..847a7a05dae1 100644 --- a/pkgs/data/misc/tzdata/default.nix +++ b/pkgs/data/misc/tzdata/default.nix @@ -17,6 +17,10 @@ stdenv.mkDerivation rec { sourceRoot = "."; + patches = lib.optionals stdenv.hostPlatform.isWindows [ + ./0001-Add-exe-extension-for-MS-Windows-binaries.patch + ]; + outputs = [ "out" "bin" "man" "dev" ]; propagatedBuildOutputs = []; @@ -34,22 +38,17 @@ stdenv.mkDerivation rec { "CFLAGS+=-DZIC_BLOAT_DEFAULT=\\\"fat\\\"" "cc=${stdenv.cc.targetPrefix}cc" "AR=${stdenv.cc.targetPrefix}ar" + ] ++ lib.optionals stdenv.hostPlatform.isWindows [ + "CFLAGS+=-DHAVE_DIRECT_H" + "CFLAGS+=-DHAVE_SYMLINK=0" + "CFLAGS+=-DRESERVE_STD_EXT_IDS" ]; - depsBuildBuild = [ buildPackages.stdenv.cc ]; - doCheck = false; # needs more tools - installFlags = [ "ZIC=./zic-native" ]; - - preInstall = '' - mv zic.o zic.o.orig - mv zic zic.orig - make $makeFlags cc=${stdenv.cc.nativePrefix}cc AR=${stdenv.cc.nativePrefix}ar zic - mv zic zic-native - mv zic.o.orig zic.o - mv zic.orig zic - ''; + installFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ + "zic=${buildPackages.tzdata.bin}/bin/zic" + ]; postInstall = ''