diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/zlib')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/zlib/default.nix | 135 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/libraries/zlib/disable-cygwin-widechar.patch | 13 |
2 files changed, 148 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/zlib/default.nix b/nixpkgs/pkgs/development/libraries/zlib/default.nix new file mode 100644 index 000000000000..b780fcda3930 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/zlib/default.nix @@ -0,0 +1,135 @@ +{ stdenv +, fetchurl +, shared ? !stdenv.hostPlatform.isStatic +, static ? true +# If true, a separate .static ouput is created and the .a is moved there. +# In this case `pkg-config` auto detection does not currently work if the +# .static output is given as `buildInputs` to another package (#66461), because +# the `.pc` file lists only the main output's lib dir. +# If false, and if `{ static = true; }`, the .a stays in the main output. +, splitStaticOutput ? shared && static +}: + +# Without either the build will actually still succeed because the build +# system makes an arbitrary choice, but we shouldn't be so indecisive. +assert shared || static; + +# Note: this package is used for bootstrapping fetchurl, and thus +# cannot use fetchpatch! All mutable patches (generated by GitHub or +# cgit) that are needed here should be included directly in Nixpkgs as +# files. + +assert splitStaticOutput -> static; + +stdenv.mkDerivation (rec { + name = "zlib-${version}"; + version = "1.2.11"; + + src = fetchurl { + urls = + [ "https://www.zlib.net/fossils/${name}.tar.gz" # stable archive path + "mirror://sourceforge/libpng/zlib/${version}/${name}.tar.gz" + ]; + sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1"; + }; + + patches = stdenv.lib.optional stdenv.hostPlatform.isCygwin ./disable-cygwin-widechar.patch; + + postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isDarwin '' + substituteInPlace configure \ + --replace '/usr/bin/libtool' 'ar' \ + --replace 'AR="libtool"' 'AR="ar"' \ + --replace 'ARFLAGS="-o"' 'ARFLAGS="-r"' + ''; + + outputs = [ "out" "dev" ] + ++ stdenv.lib.optional splitStaticOutput "static"; + setOutputFlags = false; + outputDoc = "dev"; # single tiny man3 page + + # For zlib's ./configure (as of verion 1.2.11), the order + # of --static/--shared flags matters! + # `--shared --static` builds only static libs, while + # `--static --shared` builds both. + # So we use the latter order to be able to build both. + # Also, giving just `--shared` builds both, + # giving just `--static` builds only static, + # and giving nothing builds both. + # So we have 3 possible ways to build both: + # `--static --shared`, `--shared` and giving nothing. + # Of these, we choose `--shared`, only because that's + # what we did in the past and we can avoid mass rebuilds this way. + # As a result, we pass `--static` only when we want just static. + configureFlags = stdenv.lib.optional (static && !shared) "--static" + ++ stdenv.lib.optional shared "--shared"; + + # Note we don't need to set `dontDisableStatic`, because static-disabling + # works by grepping for `enable-static` in the `./configure` script + # (see `pkgs/stdenv/generic/setup.sh`), and zlib's handwritten one does + # not have such. + # It wouldn't hurt setting `dontDisableStatic = static && !splitStaticOutput` + # here (in case zlib ever switches to autoconf in the future), + # but we don't do it simply to avoid mass rebuilds. + + postInstall = stdenv.lib.optionalString splitStaticOutput '' + moveToOutput lib/libz.a "$static" + '' + # jww (2015-01-06): Sometimes this library install as a .so, even on + # Darwin; others time it installs as a .dylib. I haven't yet figured out + # what causes this difference. + + stdenv.lib.optionalString stdenv.hostPlatform.isDarwin '' + for file in $out/lib/*.so* $out/lib/*.dylib* ; do + ${stdenv.cc.bintools.targetPrefix}install_name_tool -id "$file" $file + done + '' + # Non-typical naming confuses libtool which then refuses to use zlib's DLL + # in some cases, e.g. when compiling libpng. + + stdenv.lib.optionalString (stdenv.hostPlatform.libc == "msvcrt") '' + ln -s zlib1.dll $out/bin/libz.dll + ''; + + # As zlib takes part in the stdenv building, we don't want references + # to the bootstrap-tools libgcc (as uses to happen on arm/mips) + NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (!stdenv.hostPlatform.isDarwin) "-static-libgcc"; + + # We don't strip on static cross-compilation because of reports that native + # stripping corrupted the target library; see commit 12e960f5 for the report. + dontStrip = stdenv.hostPlatform != stdenv.buildPlatform && static; + configurePlatforms = []; + + installFlags = stdenv.lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [ + "BINARY_PATH=$(out)/bin" + "INCLUDE_PATH=$(dev)/include" + "LIBRARY_PATH=$(out)/lib" + ]; + + enableParallelBuilding = true; + doCheck = true; + + makeFlags = [ + "PREFIX=${stdenv.cc.targetPrefix}" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [ + "-f" "win32/Makefile.gcc" + ] ++ stdenv.lib.optionals shared [ + # Note that as of writing (zlib 1.2.11), this flag only has an effect + # for Windows as it is specific to `win32/Makefile.gcc`. + "SHARED_MODE=1" + ]; + + passthru = { + inherit version; + }; + + meta = with stdenv.lib; { + homepage = "https://zlib.net"; + description = "Lossless data-compression library"; + license = licenses.zlib; + platforms = platforms.all; + }; +} // stdenv.lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform) { + preConfigure = '' + export CHOST=${stdenv.hostPlatform.config} + ''; +} // stdenv.lib.optionalAttrs (stdenv.hostPlatform.libc == "msvcrt") { + dontConfigure = true; +}) diff --git a/nixpkgs/pkgs/development/libraries/zlib/disable-cygwin-widechar.patch b/nixpkgs/pkgs/development/libraries/zlib/disable-cygwin-widechar.patch new file mode 100644 index 000000000000..3de4978c3066 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/zlib/disable-cygwin-widechar.patch @@ -0,0 +1,13 @@ +diff --git a/gzguts.h b/gzguts.h +index 990a4d2..6378d46 100644 +--- a/gzguts.h ++++ b/gzguts.h +@@ -39,7 +39,7 @@ + # include <io.h> + #endif + +-#if defined(_WIN32) || defined(__CYGWIN__) ++#if defined(_WIN32) + # define WIDECHAR + #endif + |