diff --git a/lib/systems/default.nix b/lib/systems/default.nix index 5eacc9eb23e..8f5ef44ae72 100644 --- a/lib/systems/default.nix +++ b/lib/systems/default.nix @@ -46,6 +46,25 @@ rec { # Misc boolean options useAndroidPrebuilt = false; useiOSPrebuilt = false; + + # Output from uname + uname = { + # uname -s + system = { + "linux" = "Linux"; + "windows" = "Windows"; + "darwin" = "Darwin"; + "netbsd" = "NetBSD"; + "freebsd" = "FreeBSD"; + "openbsd" = "OpenBSD"; + }.${final.parsed.kernel.name} or null; + + # uname -p + processor = final.parsed.cpu.name; + + # uname -r + release = null; + }; } // mapAttrs (n: v: v final.parsed) inspect.predicates // args; in assert final.useAndroidPrebuilt -> final.isAndroid; diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix index a00165db171..58677c0bdd9 100644 --- a/lib/systems/doubles.nix +++ b/lib/systems/doubles.nix @@ -15,6 +15,8 @@ let "x86_64-cygwin" "x86_64-darwin" "x86_64-freebsd" "x86_64-linux" "x86_64-netbsd" "x86_64-openbsd" "x86_64-solaris" + + "x86_64-windows" "i686-windows" ]; allParsed = map parse.mkSystemFromString all; @@ -37,12 +39,13 @@ in rec { darwin = filterDoubles predicates.isDarwin; freebsd = filterDoubles predicates.isFreeBSD; # Should be better, but MinGW is unclear. - gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }); + gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; }); illumos = filterDoubles predicates.isSunOS; linux = filterDoubles predicates.isLinux; netbsd = filterDoubles predicates.isNetBSD; openbsd = filterDoubles predicates.isOpenBSD; unix = filterDoubles predicates.isUnix; + windows = filterDoubles predicates.isWindows; mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "powerpc64le-linux"]; } diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix index 91604280e4e..5e129365821 100644 --- a/lib/tests/systems.nix +++ b/lib/tests/systems.nix @@ -12,20 +12,21 @@ let expected = lib.sort lib.lessThan y; }; in with lib.systems.doubles; lib.runTests { - all = assertTrue (mseteq all (linux ++ darwin ++ cygwin ++ freebsd ++ openbsd ++ netbsd ++ illumos)); + testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ windows); - arm = assertTrue (mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" ]); - i686 = assertTrue (mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" ]); - mips = assertTrue (mseteq mips [ "mipsel-linux" ]); - x86_64 = assertTrue (mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" ]); + testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv7l-linux" ]; + testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" ]; + testmips = mseteq mips [ "mipsel-linux" ]; + testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" ]; - cygwin = assertTrue (mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ]); - darwin = assertTrue (mseteq darwin [ "x86_64-darwin" ]); - freebsd = assertTrue (mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ]); - gnu = assertTrue (mseteq gnu (linux /* ++ kfreebsd ++ ... */)); - illumos = assertTrue (mseteq illumos [ "x86_64-solaris" ]); - linux = assertTrue (mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mipsel-linux" ]); - netbsd = assertTrue (mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ]); - openbsd = assertTrue (mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ]); - unix = assertTrue (mseteq unix (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos)); + testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ]; + testdarwin = mseteq darwin [ "x86_64-darwin" ]; + testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ]; + testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */); + testillumos = mseteq illumos [ "x86_64-solaris" ]; + testlinux = mseteq linux [ "i686-linux" "x86_64-linux" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "aarch64-linux" "mipsel-linux" ]; + testnetbsd = mseteq netbsd [ "i686-netbsd" "x86_64-netbsd" ]; + testopenbsd = mseteq openbsd [ "i686-openbsd" "x86_64-openbsd" ]; + testwindows = mseteq windows [ "i686-cygwin" "x86_64-cygwin" "i686-windows" "x86_64-windows" ]; + testunix = mseteq unix (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ cygwin); } diff --git a/pkgs/development/libraries/boost/generic.nix b/pkgs/development/libraries/boost/generic.nix index 1ab0718e796..c79b874ecb6 100644 --- a/pkgs/development/libraries/boost/generic.nix +++ b/pkgs/development/libraries/boost/generic.nix @@ -101,21 +101,17 @@ stdenv.mkDerivation { inherit src; - patchFlags = optionalString (stdenv.hostPlatform.libc == "msvcrt") "-p0"; + patchFlags = ""; + patches = patches - ++ optional stdenv.isDarwin ./darwin-no-system-python.patch - ++ optional (stdenv.hostPlatform.libc == "msvcrt") (fetchurl { - url = "https://svn.boost.org/trac/boost/raw-attachment/tickaet/7262/" - + "boost-mingw.patch"; - sha256 = "0s32kwll66k50w6r5np1y5g907b7lcpsjhfgr7rsw7q5syhzddyj"; - }); + ++ optional stdenv.isDarwin ./darwin-no-system-python.patch; meta = { homepage = http://boost.org/; description = "Collection of C++ libraries"; license = stdenv.lib.licenses.boost; - platforms = (if versionOlder version "1.59" then remove "aarch64-linux" else id) platforms.unix; + platforms = (if versionOlder version "1.59" then remove "aarch64-linux" else id) (platforms.unix ++ platforms.windows); maintainers = with maintainers; [ peti wkennington ]; }; @@ -139,7 +135,8 @@ stdenv.mkDerivation { enableParallelBuilding = true; - nativeBuildInputs = [ which buildPackages.stdenv.cc ]; + nativeBuildInputs = [ which ]; + depsBuildBuild = [ buildPackages.stdenv.cc ]; buildInputs = [ expat zlib bzip2 libiconv ] ++ optional (stdenv.hostPlatform == stdenv.buildPlatform) icu ++ optional stdenv.isDarwin fixDarwinDylibNames diff --git a/pkgs/development/libraries/c-ares/default.nix b/pkgs/development/libraries/c-ares/default.nix index 1835356e627..099d02c8263 100644 --- a/pkgs/development/libraries/c-ares/default.nix +++ b/pkgs/development/libraries/c-ares/default.nix @@ -9,6 +9,8 @@ stdenv.mkDerivation rec { sha256 = "0vnwmbvymw677k780kpb6sb8i3szdp89rzy8mz1fwg1657yw3ls5"; }; + configureFlags = if stdenv.hostPlatform.isWindows then [ "--disable-shared" "--enable-static" ] else null; + # ares_android.h header is missing # see issue https://github.com/c-ares/c-ares/issues/216 postPatch = if stdenv.hostPlatform.isAndroid then '' diff --git a/pkgs/development/libraries/msgpack/generic.nix b/pkgs/development/libraries/msgpack/generic.nix index 306becf0c18..de277329961 100644 --- a/pkgs/development/libraries/msgpack/generic.nix +++ b/pkgs/development/libraries/msgpack/generic.nix @@ -15,8 +15,6 @@ stdenv.mkDerivation rec { cmakeFlags = [] ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "-DMSGPACK_BUILD_EXAMPLES=OFF" - ++ stdenv.lib.optional (stdenv.hostPlatform.libc == "msvcrt") - "-DCMAKE_SYSTEM_NAME=Windows" ; meta = with stdenv.lib; { diff --git a/pkgs/development/libraries/nghttp2/default.nix b/pkgs/development/libraries/nghttp2/default.nix index 68bffd4032d..471684ea7dd 100644 --- a/pkgs/development/libraries/nghttp2/default.nix +++ b/pkgs/development/libraries/nghttp2/default.nix @@ -6,6 +6,7 @@ , enableAsioLib ? false, boost ? null , enableGetAssets ? false, libxml2 ? null , enableJemalloc ? false, jemalloc ? null +, enableApp ? !stdenv.hostPlatform.isWindows }: assert enableHpack -> jansson != null; @@ -35,8 +36,12 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; - configureFlags = [ "--with-spdylay=no" "--disable-examples" "--disable-python-bindings" "--enable-app" ] - ++ optional enableAsioLib "--enable-asio-lib --with-boost-libdir=${boost}/lib"; + configureFlags = [ + "--with-spdylay=no" + "--disable-examples" + "--disable-python-bindings" + (stdenv.lib.enableFeature enableApp "app") + ] ++ optional enableAsioLib "--enable-asio-lib --with-boost-libdir=${boost}/lib"; #doCheck = true; # requires CUnit ; currently failing at test_util_localtime_date in util_test.cc diff --git a/pkgs/development/libraries/nlohmann_json/default.nix b/pkgs/development/libraries/nlohmann_json/default.nix index ffb735e725a..25d4386cec2 100644 --- a/pkgs/development/libraries/nlohmann_json/default.nix +++ b/pkgs/development/libraries/nlohmann_json/default.nix @@ -18,8 +18,6 @@ stdenv.mkDerivation rec { cmakeFlags = [ "-DBuildTests=${if doCheck then "ON" else "OFF"}" - ] ++ stdenv.lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [ - "-DCMAKE_SYSTEM_NAME=Windows" ]; doCheck = stdenv.hostPlatform == stdenv.buildPlatform; diff --git a/pkgs/development/libraries/sqlite/default.nix b/pkgs/development/libraries/sqlite/default.nix index 166ea39493b..92574091558 100644 --- a/pkgs/development/libraries/sqlite/default.nix +++ b/pkgs/development/libraries/sqlite/default.nix @@ -79,6 +79,6 @@ stdenv.mkDerivation rec { homepage = http://www.sqlite.org/; license = licenses.publicDomain; maintainers = with maintainers; [ eelco np ]; - platforms = platforms.unix; + platforms = platforms.unix ++ platforms.windows; }; } diff --git a/pkgs/development/libraries/zlib/default.nix b/pkgs/development/libraries/zlib/default.nix index d348f877f72..fe1c275aeda 100644 --- a/pkgs/development/libraries/zlib/default.nix +++ b/pkgs/development/libraries/zlib/default.nix @@ -82,4 +82,6 @@ stdenv.mkDerivation (rec { preConfigure = '' export CHOST=${stdenv.hostPlatform.config} ''; +} // stdenv.lib.optionalAttrs (stdenv.hostPlatform.libc == "msvcrt") { + configurePhase = ":"; }) diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix index 2db40fc43e3..e06faed30a1 100644 --- a/pkgs/stdenv/generic/make-derivation.nix +++ b/pkgs/stdenv/generic/make-derivation.nix @@ -41,6 +41,7 @@ rec { # Configure Phase , configureFlags ? [] + , cmakeFlags ? [] , # Target is not included by default because most programs don't care. # Including it then would cause needless mass rebuilds. # @@ -225,6 +226,17 @@ rec { inherit doCheck doInstallCheck; inherit outputs; + } // lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform) { + cmakeFlags = + (/**/ if lib.isString cmakeFlags then [cmakeFlags] + else if cmakeFlags == null then [] + else cmakeFlags) + ++ lib.optional (stdenv.hostPlatform.uname.system != null) "-DCMAKE_SYSTEM_NAME=${stdenv.hostPlatform.uname.system}" + ++ lib.optional (stdenv.hostPlatform.uname.processor != null) "-DCMAKE_SYSTEM_PROCESSOR=${stdenv.hostPlatform.uname.processor}" + ++ lib.optional (stdenv.hostPlatform.uname.release != null) "-DCMAKE_SYSTEM_VERSION=${stdenv.hostPlatform.release}" + ++ lib.optional (stdenv.buildPlatform.uname.system != null) "-DCMAKE_HOST_SYSTEM_NAME=${stdenv.buildPlatform.uname.system}" + ++ lib.optional (stdenv.buildPlatform.uname.processor != null) "-DCMAKE_HOST_SYSTEM_PROCESSOR=${stdenv.buildPlatform.uname.processor}" + ++ lib.optional (stdenv.buildPlatform.uname.release != null) "-DCMAKE_HOST_SYSTEM_VERSION=${stdenv.buildPlatform.uname.release}"; } // lib.optionalAttrs (attrs.enableParallelBuilding or false) { enableParallelChecking = attrs.enableParallelChecking or true; } // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != []) { diff --git a/pkgs/tools/compression/brotli/default.nix b/pkgs/tools/compression/brotli/default.nix index 754c0e58156..7047eeeefa6 100644 --- a/pkgs/tools/compression/brotli/default.nix +++ b/pkgs/tools/compression/brotli/default.nix @@ -15,8 +15,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake ]; - cmakeFlags = stdenv.lib.optional - (stdenv.hostPlatform.libc == "msvcrt") "-DCMAKE_SYSTEM_NAME=Windows"; + cmakeFlags = []; outputs = [ "out" "dev" "lib" ]; @@ -59,4 +58,3 @@ stdenv.mkDerivation rec { platforms = platforms.all; }; } - diff --git a/pkgs/tools/networking/curl/7_59.nix b/pkgs/tools/networking/curl/7_59.nix index 0482bcf5262..508b357e3fd 100644 --- a/pkgs/tools/networking/curl/7_59.nix +++ b/pkgs/tools/networking/curl/7_59.nix @@ -77,7 +77,11 @@ stdenv.mkDerivation rec { ++ stdenv.lib.optional gssSupport "--with-gssapi=${kerberos.dev}" # For the 'urandom', maybe it should be a cross-system option ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) - "--with-random=/dev/urandom"; + "--with-random=/dev/urandom" + ++ stdenv.lib.optionals stdenv.hostPlatform.isWindows [ + "--disable-shared" + "--enable-static" + ]; CXX = "${stdenv.cc.targetPrefix}c++"; CXXCPP = "${stdenv.cc.targetPrefix}c++ -E"; diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix index dda97d34d86..4af8ff75e21 100644 --- a/pkgs/tools/networking/curl/default.nix +++ b/pkgs/tools/networking/curl/default.nix @@ -81,7 +81,11 @@ stdenv.mkDerivation rec { ++ stdenv.lib.optional gssSupport "--with-gssapi=${kerberos.dev}" # For the 'urandom', maybe it should be a cross-system option ++ stdenv.lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) - "--with-random=/dev/urandom"; + "--with-random=/dev/urandom" + ++ stdenv.lib.optionals stdenv.hostPlatform.isWindows [ + "--disable-shared" + "--enable-static" + ]; CXX = "${stdenv.cc.targetPrefix}c++"; CXXCPP = "${stdenv.cc.targetPrefix}c++ -E"; diff --git a/pkgs/tools/text/html-tidy/default.nix b/pkgs/tools/text/html-tidy/default.nix index 51ce4baa0be..1974c0aa4f3 100644 --- a/pkgs/tools/text/html-tidy/default.nix +++ b/pkgs/tools/text/html-tidy/default.nix @@ -13,8 +13,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake libxslt/*manpage*/ ]; - cmakeFlags = stdenv.lib.optional - (stdenv.hostPlatform.libc or null == "msvcrt") "-DCMAKE_SYSTEM_NAME=Windows"; + cmakeFlags = []; # ATM bin/tidy is statically linked, as upstream provides no other option yet. # https://github.com/htacg/tidy-html5/issues/326#issuecomment-160322107 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 45026dc889e..2e6d0e750ad 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2077,7 +2077,7 @@ with pkgs; zlibSupport = true; sslSupport = zlibSupport; scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin; - gssSupport = true; + gssSupport = !stdenv.hostPlatform.isWindows; }; curl = callPackage ../tools/networking/curl rec { @@ -2086,7 +2086,7 @@ with pkgs; zlibSupport = true; sslSupport = zlibSupport; scpSupport = zlibSupport && !stdenv.isSunOS && !stdenv.isCygwin; - gssSupport = true; + gssSupport = !stdenv.hostPlatform.isWindows; }; curl_unix_socket = callPackage ../tools/networking/curl-unix-socket rec { };