diff options
author | Shea Levy <shea@shealevy.com> | 2018-02-24 08:02:06 -0500 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2018-02-24 08:02:06 -0500 |
commit | 7142440d75f8a55daf830ccf7628d4f739d124c5 (patch) | |
tree | 34e53b2541b23dec0adb40c432dc27e7b46e643b /pkgs/development | |
parent | 39ccb6ac87f5cd1608e1aba665dd2199eed64e08 (diff) | |
download | nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar.gz nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar.bz2 nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar.lz nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar.xz nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.tar.zst nixlib-7142440d75f8a55daf830ccf7628d4f739d124c5.zip |
icu: Fix cross-building.
The icu4c cross-build process requires access to a full buildRoot of a native build, so we add a variant of the build that just does the buildPhase and copies the buildRoot to $out for access by the cross compile.
Diffstat (limited to 'pkgs/development')
-rw-r--r-- | pkgs/development/libraries/icu/base.nix | 125 |
1 files changed, 77 insertions, 48 deletions
diff --git a/pkgs/development/libraries/icu/base.nix b/pkgs/development/libraries/icu/base.nix index 2c8392c8bac8..87551ee6ee03 100644 --- a/pkgs/development/libraries/icu/base.nix +++ b/pkgs/development/libraries/icu/base.nix @@ -1,66 +1,95 @@ { version, sha256, patches ? [], patchFlags ? "" }: -{ stdenv, fetchurl, fetchpatch, fixDarwinDylibNames }: +{ stdenv, fetchurl, fetchpatch, fixDarwinDylibNames + # Cross-compiled icu4c requires a build-root of a native compile +, buildRootOnly ? false, nativeBuildRoot, buildPlatform, hostPlatform +}: let pname = "icu4c"; -in -stdenv.mkDerivation { - name = pname + "-" + version; - src = fetchurl { - url = "http://download.icu-project.org/files/${pname}/${version}/${pname}-" - + (stdenv.lib.replaceChars ["."] ["_"] version) + "-src.tgz"; - inherit sha256; - }; + baseAttrs = { + src = fetchurl { + url = "http://download.icu-project.org/files/${pname}/${version}/${pname}-" + + (stdenv.lib.replaceChars ["."] ["_"] version) + "-src.tgz"; + inherit sha256; + }; + + postUnpack = '' + sourceRoot=''${sourceRoot}/source + echo Source root reset to ''${sourceRoot} + ''; + + # https://sourceware.org/glibc/wiki/Release/2.26#Removal_of_.27xlocale.h.27 + postPatch = if (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl") + then "substituteInPlace i18n/digitlst.cpp --replace '<xlocale.h>' '<locale.h>'" + else null; # won't find locale_t on darwin + + inherit patchFlags patches; - outputs = [ "out" "dev" ]; - outputBin = "dev"; + preConfigure = '' + sed -i -e "s|/bin/sh|${stdenv.shell}|" configure - # FIXME: This fixes dylib references in the dylibs themselves, but - # not in the programs in $out/bin. - buildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; + # $(includedir) is different from $(prefix)/include due to multiple outputs + sed -i -e 's|^\(CPPFLAGS = .*\) -I\$(prefix)/include|\1 -I$(includedir)|' config/Makefile.inc.in + '' + stdenv.lib.optionalString stdenv.isArm '' + # From https://archlinuxarm.org/packages/armv7h/icu/files/icudata-stdlibs.patch + sed -e 's/LDFLAGSICUDT=-nodefaultlibs -nostdlib/LDFLAGSICUDT=/' -i config/mh-linux + ''; - postUnpack = '' - sourceRoot=''${sourceRoot}/source - echo Source root reset to ''${sourceRoot} - ''; + configureFlags = "--disable-debug" + + stdenv.lib.optionalString (stdenv.isFreeBSD || stdenv.isDarwin) " --enable-rpath" + + stdenv.lib.optionalString (buildPlatform != hostPlatform) " --with-cross-build=${nativeBuildRoot}"; - # https://sourceware.org/glibc/wiki/Release/2.26#Removal_of_.27xlocale.h.27 - postPatch = if (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl") - then "substituteInPlace i18n/digitlst.cpp --replace '<xlocale.h>' '<locale.h>'" - else null; # won't find locale_t on darwin + enableParallelBuilding = true; - inherit patchFlags patches; + meta = with stdenv.lib; { + description = "Unicode and globalization support library"; + homepage = http://site.icu-project.org/; + maintainers = with maintainers; [ raskin ]; + platforms = platforms.all; + }; + }; + + realAttrs = baseAttrs // { + name = pname + "-" + version; - preConfigure = '' - sed -i -e "s|/bin/sh|${stdenv.shell}|" configure + outputs = [ "out" "dev" ]; + outputBin = "dev"; - # $(includedir) is different from $(prefix)/include due to multiple outputs - sed -i -e 's|^\(CPPFLAGS = .*\) -I\$(prefix)/include|\1 -I$(includedir)|' config/Makefile.inc.in - '' + stdenv.lib.optionalString stdenv.isArm '' - # From https://archlinuxarm.org/packages/armv7h/icu/files/icudata-stdlibs.patch - sed -e 's/LDFLAGSICUDT=-nodefaultlibs -nostdlib/LDFLAGSICUDT=/' -i config/mh-linux - ''; + # FIXME: This fixes dylib references in the dylibs themselves, but + # not in the programs in $out/bin. + buildInputs = stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; - configureFlags = "--disable-debug" + - stdenv.lib.optionalString (stdenv.isFreeBSD || stdenv.isDarwin) " --enable-rpath"; + # remove dependency on bootstrap-tools in early stdenv build + postInstall = stdenv.lib.optionalString stdenv.isDarwin '' + sed -i 's/INSTALL_CMD=.*install/INSTALL_CMD=install/' $out/lib/icu/${version}/pkgdata.inc + '' + '' + substituteInPlace "$dev/bin/icu-config" \ + --replace \''${pkglibdir}/Makefile.inc "$dev/lib/icu/Makefile.inc" + ''; - # remove dependency on bootstrap-tools in early stdenv build - postInstall = stdenv.lib.optionalString stdenv.isDarwin '' - sed -i 's/INSTALL_CMD=.*install/INSTALL_CMD=install/' $out/lib/icu/${version}/pkgdata.inc - '' + '' - substituteInPlace "$dev/bin/icu-config" \ - --replace \''${pkglibdir}/Makefile.inc "$dev/lib/icu/Makefile.inc" - ''; + postFixup = ''moveToOutput lib/icu "$dev" ''; + }; - postFixup = ''moveToOutput lib/icu "$dev" ''; + buildRootOnlyAttrs = baseAttrs // { + name = pname + "-build-root-" + version; - enableParallelBuilding = true; + preConfigure = baseAttrs.preConfigure + '' + mkdir build + cd build + configureScript=../configure + ''; - meta = with stdenv.lib; { - description = "Unicode and globalization support library"; - homepage = http://site.icu-project.org/; - maintainers = with maintainers; [ raskin ]; - platforms = platforms.all; + postBuild = '' + cd .. + mv build $out + echo "Doing build-root only, exiting now" >&2 + exit 0 + ''; }; -} + + attrs = if buildRootOnly + then buildRootOnlyAttrs + else realAttrs; +in +stdenv.mkDerivation attrs |