diff options
author | Niklas Hambüchen <mail@nh2.me> | 2021-07-04 22:07:57 +0000 |
---|---|---|
committer | Niklas Hambüchen <mail@nh2.me> | 2021-07-10 02:49:42 +0200 |
commit | f4e62a996f82f2e52c988097c828ff227d93f1be (patch) | |
tree | 4c28a18b16eea538628e1c827fbe7b3d5102a3bb /pkgs/development/compilers | |
parent | 8adcd395041665bad739f777e7b6284186a4c507 (diff) | |
download | nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar.gz nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar.bz2 nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar.lz nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar.xz nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.tar.zst nixpkgs-f4e62a996f82f2e52c988097c828ff227d93f1be.zip |
pkgsMusl.haskell.compiler.ghc{8104,884,901,HEAD}: Disable sphinx for musl
Adds new package options: * enableDocs * enableHaddockProgram to control whether to build Sphinx docs, and GHC haddocks and the haddock program. Unfortunately currently the building of the `haddock `program and generating GHC docs are mixed into one option, see: https://gitlab.haskell.org/ghc/ghc/-/issues/20077 Making Sphinx docs disableable, and disabling them by default for Musl and cross builds, makes it much easier to provide these builds without having to support Sphinx's enormous dependency tree for those ways of building.
Diffstat (limited to 'pkgs/development/compilers')
-rw-r--r-- | pkgs/development/compilers/ghc/8.10.4.nix | 40 | ||||
-rw-r--r-- | pkgs/development/compilers/ghc/8.8.4.nix | 40 | ||||
-rw-r--r-- | pkgs/development/compilers/ghc/9.0.1.nix | 40 | ||||
-rw-r--r-- | pkgs/development/compilers/ghc/head.nix | 40 |
4 files changed, 144 insertions, 16 deletions
diff --git a/pkgs/development/compilers/ghc/8.10.4.nix b/pkgs/development/compilers/ghc/8.10.4.nix index 8062062f42b..10ca2f6662c 100644 --- a/pkgs/development/compilers/ghc/8.10.4.nix +++ b/pkgs/development/compilers/ghc/8.10.4.nix @@ -38,6 +38,20 @@ ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (if useLLVM then "perf-cross" else "perf-cross-ncg") +, # Whether to build sphinx documentation. + enableDocs ? ( + # Docs disabled for musl and cross because it's a large task to keep + # all `sphinx` dependencies building in those environments. + # `sphinx` pulls in among others: + # Ruby, Python, Perl, Rust, OpenGL, Xorg, gtk, LLVM. + (stdenv.targetPlatform == stdenv.hostPlatform) + && !stdenv.hostPlatform.isMusl + ) + +, enableHaddockProgram ? + # Disabled for cross; see note [HADDOCK_DOCS]. + (stdenv.targetPlatform == stdenv.hostPlatform) + , # Whether to disable the large address space allocator # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 @@ -45,6 +59,10 @@ assert !enableIntegerSimple -> gmp != null; +# Cross cannot currently build the `haddock` program for silly reasons, +# see note [HADDOCK_DOCS]. +assert (stdenv.targetPlatform != stdenv.hostPlatform) -> !enableHaddockProgram; + let inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -60,14 +78,26 @@ let ifneq \"\$(BuildFlavour)\" \"\" include mk/flavours/\$(BuildFlavour).mk endif + BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"} + BUILD_SPHINX_PDF = NO + '' + + # Note [HADDOCK_DOCS]: + # Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock` + # program is built (which we generally always want to have a complete GHC install) + # and whether it is run on the GHC sources to generate hyperlinked source code + # (which is impossible for cross-compilation); see: + # https://gitlab.haskell.org/ghc/ghc/-/issues/20077 + # This implies that currently a cross-compiled GHC will never have a `haddock` + # program, so it can never generate haddocks for any packages. + # If this is solved in the future, we'd like to unconditionally + # build the haddock program (removing the `enableHaddockProgram` option). + '' + HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"} DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"} INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"} '' + lib.optionalString (targetPlatform != hostPlatform) '' Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"} CrossCompilePrefix = ${targetPrefix} - HADDOCK_DOCS = NO - BUILD_SPHINX_HTML = NO - BUILD_SPHINX_PDF = NO '' + lib.optionalString (!enableProfiledLibs) '' GhcLibWays = "v dyn" '' + lib.optionalString enableRelocatedStaticLibs '' @@ -217,8 +247,10 @@ stdenv.mkDerivation (rec { dontAddExtraLibs = true; nativeBuildInputs = [ - perl autoconf automake m4 python3 sphinx + perl autoconf automake m4 python3 ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour + ] ++ lib.optionals enableDocs [ + sphinx ]; # For building runtime libs diff --git a/pkgs/development/compilers/ghc/8.8.4.nix b/pkgs/development/compilers/ghc/8.8.4.nix index 1f643d53be4..23826614716 100644 --- a/pkgs/development/compilers/ghc/8.8.4.nix +++ b/pkgs/development/compilers/ghc/8.8.4.nix @@ -38,6 +38,20 @@ ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (if useLLVM then "perf-cross" else "perf-cross-ncg") +, # Whether to build sphinx documentation. + enableDocs ? ( + # Docs disabled for musl and cross because it's a large task to keep + # all `sphinx` dependencies building in those environments. + # `sphinx` pullls in among others: + # Ruby, Python, Perl, Rust, OpenGL, Xorg, gtk, LLVM. + (stdenv.targetPlatform == stdenv.hostPlatform) + && !stdenv.hostPlatform.isMusl + ) + +, enableHaddockProgram ? + # Disabled for cross; see note [HADDOCK_DOCS]. + (stdenv.targetPlatform == stdenv.hostPlatform) + , # Whether to disable the large address space allocator # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 @@ -45,6 +59,10 @@ assert !enableIntegerSimple -> gmp != null; +# Cross cannot currently build the `haddock` program for silly reasons, +# see note [HADDOCK_DOCS]. +assert (stdenv.targetPlatform != stdenv.hostPlatform) -> !enableHaddockProgram; + let inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -60,6 +78,21 @@ let ifneq \"\$(BuildFlavour)\" \"\" include mk/flavours/\$(BuildFlavour).mk endif + BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"} + BUILD_SPHINX_PDF = NO + '' + + # Note [HADDOCK_DOCS]: + # Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock` + # program is built (which we generally always want to have a complete GHC install) + # and whether it is run on the GHC sources to generate hyperlinked source code + # (which is impossible for cross-compilation); see: + # https://gitlab.haskell.org/ghc/ghc/-/issues/20077 + # This implies that currently a cross-compiled GHC will never have a `haddock` + # program, so it can never generate haddocks for any packages. + # If this is solved in the future, we'd like to unconditionally + # build the haddock program (removing the `enableHaddockProgram` option). + '' + HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"} DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"} INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"} '' @@ -72,9 +105,6 @@ let + lib.optionalString (targetPlatform != hostPlatform) '' Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"} CrossCompilePrefix = ${targetPrefix} - HADDOCK_DOCS = NO - BUILD_SPHINX_HTML = NO - BUILD_SPHINX_PDF = NO '' + lib.optionalString dontStrip '' STRIP_CMD = : '' + lib.optionalString (!enableProfiledLibs) '' @@ -227,8 +257,10 @@ stdenv.mkDerivation (rec { dontAddExtraLibs = true; nativeBuildInputs = [ - perl autoconf automake m4 python3 sphinx + perl autoconf automake m4 python3 ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour + ] ++ lib.optionals enableDocs [ + sphinx ]; # For building runtime libs diff --git a/pkgs/development/compilers/ghc/9.0.1.nix b/pkgs/development/compilers/ghc/9.0.1.nix index f461fa6d440..d2ae51c66de 100644 --- a/pkgs/development/compilers/ghc/9.0.1.nix +++ b/pkgs/development/compilers/ghc/9.0.1.nix @@ -39,6 +39,20 @@ ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (if useLLVM then "perf-cross" else "perf-cross-ncg") +, # Whether to build sphinx documentation. + enableDocs ? ( + # Docs disabled for musl and cross because it's a large task to keep + # all `sphinx` dependencies building in those environments. + # `sphinx` pullls in among others: + # Ruby, Python, Perl, Rust, OpenGL, Xorg, gtk, LLVM. + (stdenv.targetPlatform == stdenv.hostPlatform) + && !stdenv.hostPlatform.isMusl + ) + +, enableHaddockProgram ? + # Disabled for cross; see note [HADDOCK_DOCS]. + (stdenv.targetPlatform == stdenv.hostPlatform) + , # Whether to disable the large address space allocator # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 @@ -46,6 +60,10 @@ assert !enableIntegerSimple -> gmp != null; +# Cross cannot currently build the `haddock` program for silly reasons, +# see note [HADDOCK_DOCS]. +assert (stdenv.targetPlatform != stdenv.hostPlatform) -> !enableHaddockProgram; + let inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -61,14 +79,26 @@ let ifneq \"\$(BuildFlavour)\" \"\" include mk/flavours/\$(BuildFlavour).mk endif + BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"} + BUILD_SPHINX_PDF = NO + '' + + # Note [HADDOCK_DOCS]: + # Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock` + # program is built (which we generally always want to have a complete GHC install) + # and whether it is run on the GHC sources to generate hyperlinked source code + # (which is impossible for cross-compilation); see: + # https://gitlab.haskell.org/ghc/ghc/-/issues/20077 + # This implies that currently a cross-compiled GHC will never have a `haddock` + # program, so it can never generate haddocks for any packages. + # If this is solved in the future, we'd like to unconditionally + # build the haddock program (removing the `enableHaddockProgram` option). + '' + HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"} DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"} INTEGER_LIBRARY = ${if enableIntegerSimple then "integer-simple" else "integer-gmp"} '' + lib.optionalString (targetPlatform != hostPlatform) '' Stage1Only = ${if targetPlatform.system == hostPlatform.system then "NO" else "YES"} CrossCompilePrefix = ${targetPrefix} - HADDOCK_DOCS = NO - BUILD_SPHINX_HTML = NO - BUILD_SPHINX_PDF = NO '' + lib.optionalString (!enableProfiledLibs) '' GhcLibWays = "v dyn" '' + lib.optionalString enableRelocatedStaticLibs '' @@ -204,8 +234,10 @@ stdenv.mkDerivation (rec { dontAddExtraLibs = true; nativeBuildInputs = [ - perl autoconf automake m4 python3 sphinx + perl autoconf automake m4 python3 ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour + ] ++ lib.optionals enableDocs [ + sphinx ]; # For building runtime libs diff --git a/pkgs/development/compilers/ghc/head.nix b/pkgs/development/compilers/ghc/head.nix index 18df8c538d7..2ea14b78cc4 100644 --- a/pkgs/development/compilers/ghc/head.nix +++ b/pkgs/development/compilers/ghc/head.nix @@ -46,6 +46,20 @@ ghcFlavour ? lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (if useLLVM then "perf-cross" else "perf-cross-ncg") +, # Whether to build sphinx documentation. + enableDocs ? ( + # Docs disabled for musl and cross because it's a large task to keep + # all `sphinx` dependencies building in those environments. + # `sphinx` pullls in among others: + # Ruby, Python, Perl, Rust, OpenGL, Xorg, gtk, LLVM. + (stdenv.targetPlatform == stdenv.hostPlatform) + && !stdenv.hostPlatform.isMusl + ) + +, enableHaddockProgram ? + # Disabled for cross; see note [HADDOCK_DOCS]. + (stdenv.targetPlatform == stdenv.hostPlatform) + , # Whether to disable the large address space allocator # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 @@ -53,6 +67,10 @@ assert !enableNativeBignum -> gmp != null; +# Cross cannot currently build the `haddock` program for silly reasons, +# see note [HADDOCK_DOCS]. +assert (stdenv.targetPlatform != stdenv.hostPlatform) -> !enableHaddockProgram; + let inherit (stdenv) buildPlatform hostPlatform targetPlatform; @@ -68,14 +86,26 @@ let ifneq \"\$(BuildFlavour)\" \"\" include mk/flavours/\$(BuildFlavour).mk endif + BUILD_SPHINX_HTML = ${if enableDocs then "YES" else "NO"} + BUILD_SPHINX_PDF = NO + '' + + # Note [HADDOCK_DOCS]: + # Unfortunately currently `HADDOCK_DOCS` controls both whether the `haddock` + # program is built (which we generally always want to have a complete GHC install) + # and whether it is run on the GHC sources to generate hyperlinked source code + # (which is impossible for cross-compilation); see: + # https://gitlab.haskell.org/ghc/ghc/-/issues/20077 + # This implies that currently a cross-compiled GHC will never have a `haddock` + # program, so it can never generate haddocks for any packages. + # If this is solved in the future, we'd like to unconditionally + # build the haddock program (removing the `enableHaddockProgram` option). + '' + HADDOCK_DOCS = ${if enableHaddockProgram then "YES" else "NO"} DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"} BIGNUM_BACKEND = ${if enableNativeBignum then "native" else "gmp"} '' + lib.optionalString (targetPlatform != hostPlatform) '' Stage1Only = ${if (targetPlatform.system == hostPlatform.system && !targetPlatform.isiOS) then "NO" else "YES"} CrossCompilePrefix = ${targetPrefix} - HADDOCK_DOCS = NO - BUILD_SPHINX_HTML = NO - BUILD_SPHINX_PDF = NO '' + lib.optionalString dontStrip '' STRIP_CMD = : '' + lib.optionalString (!enableProfiledLibs) '' @@ -221,8 +251,10 @@ stdenv.mkDerivation (rec { dontAddExtraLibs = true; nativeBuildInputs = [ - perl autoconf autoreconfHook automake m4 python3 sphinx + perl autoconf autoreconfHook automake m4 python3 ghc bootPkgs.alex bootPkgs.happy bootPkgs.hscolour + ] ++ lib.optionals enableDocs [ + sphinx ]; # For building runtime libs |