about summary refs log tree commit diff
path: root/pkgs/development/haskell-modules
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2017-12-28 19:23:41 +0100
committerPeter Simons <simons@cryp.to>2017-12-28 19:23:41 +0100
commit65138e8a411244c81aefa21be280323d30010b96 (patch)
treeb1ea0c9c83afdd16ce2d050fb15daf7c0356839d /pkgs/development/haskell-modules
parentbabbcd3c0aaea0c2e5c64b6b77f760a3c48760e4 (diff)
downloadnixlib-65138e8a411244c81aefa21be280323d30010b96.tar
nixlib-65138e8a411244c81aefa21be280323d30010b96.tar.gz
nixlib-65138e8a411244c81aefa21be280323d30010b96.tar.bz2
nixlib-65138e8a411244c81aefa21be280323d30010b96.tar.lz
nixlib-65138e8a411244c81aefa21be280323d30010b96.tar.xz
nixlib-65138e8a411244c81aefa21be280323d30010b96.tar.zst
nixlib-65138e8a411244c81aefa21be280323d30010b96.zip
Revert "hslib: Function to extract the haskell build inputs of a package."
This reverts commit d545ef3fa11198f12e525b641aeb33887694f97f. Please don't
commit substantial changes to the generic Haskell builder without giving me a
chance to review them.
Diffstat (limited to 'pkgs/development/haskell-modules')
-rw-r--r--pkgs/development/haskell-modules/generic-builder.nix45
-rw-r--r--pkgs/development/haskell-modules/lib.nix80
-rw-r--r--pkgs/development/haskell-modules/make-package-set.nix2
3 files changed, 33 insertions, 94 deletions
diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix
index 16d5c7ba7c57..3182b4846c0f 100644
--- a/pkgs/development/haskell-modules/generic-builder.nix
+++ b/pkgs/development/haskell-modules/generic-builder.nix
@@ -1,27 +1,31 @@
 { stdenv, fetchurl, ghc, pkgconfig, glibcLocales, coreutils, gnugrep, gnused
-, jailbreak-cabal, hscolour, cpphs, nodejs, lib, removeReferencesTo, haskellLib
+, jailbreak-cabal, hscolour, cpphs, nodejs, lib, removeReferencesTo
 }:
-let inherit (haskellLib.ghcInfo ghc) isCross isGhcjs nativeGhc; in
+let isCross = (ghc.cross or null) != null; in
 
 { pname
-, dontStrip ? isGhcjs
+, dontStrip ? (ghc.isGhcjs or false)
 , version, revision ? null
 , sha256 ? null
 , src ? fetchurl { url = "mirror://hackage/${pname}-${version}.tar.gz"; inherit sha256; }
+, buildDepends ? [], setupHaskellDepends ? [], libraryHaskellDepends ? [], executableHaskellDepends ? []
 , buildTarget ? ""
-, buildTools ? [], libraryToolDepends ? [], executableToolDepends ? []
+, buildTools ? [], libraryToolDepends ? [], executableToolDepends ? [], testToolDepends ? [], benchmarkToolDepends ? []
 , configureFlags ? []
 , description ? ""
+, doCheck ? !isCross && (stdenv.lib.versionOlder "7.4" ghc.version)
+, doBenchmark ? false
 , doHoogle ? true
 , editedCabalFile ? null
 , enableLibraryProfiling ? false
 , enableExecutableProfiling ? false
 # TODO enable shared libs for cross-compiling
-, enableSharedExecutables ? !isCross && ((isGhcjs || stdenv.lib.versionOlder "7.7" ghc.version))
-, enableSharedLibraries ? !isCross && ((isGhcjs || stdenv.lib.versionOlder "7.7" ghc.version))
+, enableSharedExecutables ? !isCross && (((ghc.isGhcjs or false) || stdenv.lib.versionOlder "7.7" ghc.version))
+, enableSharedLibraries ? !isCross && (((ghc.isGhcjs or false) || stdenv.lib.versionOlder "7.7" ghc.version))
 , enableSplitObjs ? null # OBSOLETE, use enableDeadCodeElimination
 , enableDeadCodeElimination ? (!stdenv.isDarwin)  # TODO: use -dead_strip  for darwin
 , enableStaticLibraries ? true
+, extraLibraries ? [], librarySystemDepends ? [], executableSystemDepends ? []
 , homepage ? "http://hackage.haskell.org/package/${pname}"
 , platforms ? ghc.meta.platforms
 , hydraPlatforms ? platforms
@@ -33,6 +37,9 @@ let inherit (haskellLib.ghcInfo ghc) isCross isGhcjs nativeGhc; in
 , doCoverage ? false
 , doHaddock ? !(ghc.isHaLVM or false)
 , passthru ? {}
+, pkgconfigDepends ? [], libraryPkgconfigDepends ? [], executablePkgconfigDepends ? [], testPkgconfigDepends ? [], benchmarkPkgconfigDepends ? []
+, testDepends ? [], testHaskellDepends ? [], testSystemDepends ? []
+, benchmarkDepends ? [], benchmarkHaskellDepends ? [], benchmarkSystemDepends ? []
 , testTarget ? ""
 , broken ? false
 , preCompileBuildDriver ? "", postCompileBuildDriver ? ""
@@ -49,7 +56,6 @@ let inherit (haskellLib.ghcInfo ghc) isCross isGhcjs nativeGhc; in
 , hardeningDisable ? lib.optional (ghc.isHaLVM or false) "all"
 , enableSeparateDataOutput ? false
 , enableSeparateDocOutput ? doHaddock
-, ... # For other arguments, see the 'mkDerivation helpers' section of lib.nix
 } @ args:
 
 assert editedCabalFile != null -> revision != null;
@@ -57,17 +63,18 @@ assert editedCabalFile != null -> revision != null;
 assert enableSplitObjs == null;
 
 let
-  inherit (haskellLib.controlPhases ghc args) doCheck doBenchmark;
 
   inherit (stdenv.lib) optional optionals optionalString versionOlder versionAtLeast
                        concatStringsSep enableFeature optionalAttrs toUpper
                        filter makeLibraryPath;
 
+  isGhcjs = ghc.isGhcjs or false;
   isHaLVM = ghc.isHaLVM or false;
   packageDbFlag = if isGhcjs || isHaLVM || versionOlder "7.6" ghc.version
                   then "package-db"
                   else "package-conf";
 
+  nativeGhc = if isCross || isGhcjs then ghc.bootPkgs.ghc else ghc;
   nativePackageDbFlag = if versionOlder "7.6" nativeGhc.version
                         then "package-db"
                         else "package-conf";
@@ -139,11 +146,25 @@ let
     (optionalString (versionOlder "7.10" ghc.version && !isHaLVM) "-threaded")
   ];
 
-  inherit (haskellLib.extractBuildInputs ghc (args // { inherit doCheck doBenchmark; }))
-    allPkgconfigDepends propagatedBuildInputs otherBuildInputs haskellBuildInputs systemBuildInputs;
+  isHaskellPkg = x: (x ? pname) && (x ? version) && (x ? env);
+  isSystemPkg = x: !isHaskellPkg x;
+
+  allPkgconfigDepends = pkgconfigDepends ++ libraryPkgconfigDepends ++ executablePkgconfigDepends ++
+                        optionals doCheck testPkgconfigDepends ++ optionals doBenchmark benchmarkPkgconfigDepends;
 
   nativeBuildInputs = optional (allPkgconfigDepends != []) pkgconfig ++
                       buildTools ++ libraryToolDepends ++ executableToolDepends ++ [ removeReferencesTo ];
+  propagatedBuildInputs = buildDepends ++ libraryHaskellDepends ++ executableHaskellDepends;
+  otherBuildInputs = setupHaskellDepends ++ extraLibraries ++ librarySystemDepends ++ executableSystemDepends ++
+                     optionals (allPkgconfigDepends != []) allPkgconfigDepends ++
+                     optionals doCheck (testDepends ++ testHaskellDepends ++ testSystemDepends ++ testToolDepends) ++
+                     # ghcjs's hsc2hs calls out to the native hsc2hs
+                     optional isGhcjs nativeGhc ++
+                     optionals doBenchmark (benchmarkDepends ++ benchmarkHaskellDepends ++ benchmarkSystemDepends ++ benchmarkToolDepends);
+  allBuildInputs = propagatedBuildInputs ++ otherBuildInputs;
+
+  haskellBuildInputs = stdenv.lib.filter isHaskellPkg allBuildInputs;
+  systemBuildInputs = stdenv.lib.filter isSystemPkg allBuildInputs;
 
   ghcEnv = ghc.withPackages (p: haskellBuildInputs);
 
@@ -327,9 +348,7 @@ stdenv.mkDerivation ({
 
   passthru = passthru // {
 
-    inherit pname version ghc;
-
-    isHaskellPkg = true;
+    inherit pname version;
 
     isHaskellLibrary = hasActiveLibrary;
 
diff --git a/pkgs/development/haskell-modules/lib.nix b/pkgs/development/haskell-modules/lib.nix
index 74ad46b6564d..96520dce2b2d 100644
--- a/pkgs/development/haskell-modules/lib.nix
+++ b/pkgs/development/haskell-modules/lib.nix
@@ -147,84 +147,4 @@ rec {
   overrideSrc = drv: { src, version ? drv.version }:
     overrideCabal drv (_: { inherit src version; editedCabalFile = null; });
 
-  # Extract the haskell build inputs of a haskell package.
-  # This is useful to build environments for developing on that
-  # package.
-  getHaskellBuildInputs = p:
-    (p.override { mkDerivation = extractBuildInputs p.ghc;
-                }).haskellBuildInputs;
-
-  ghcInfo = ghc:
-    rec { isCross = (ghc.cross or null) != null;
-          isGhcjs = ghc.isGhcjs or false;
-          nativeGhc = if isCross || isGhcjs
-                        then ghc.bootPkgs.ghc
-                        else ghc;
-        };
-
-  ### mkDerivation helpers
-  # These allow external users of a haskell package to extract
-  # information about how it is built in the same way that the
-  # generic haskell builder does, by reusing the same functions.
-  # Each function here has the same interface as mkDerivation and thus
-  # can be called for a given package simply by overriding the
-  # mkDerivation argument it used. See getHaskellBuildInputs above for
-  # an example of this.
-
-  # Some information about which phases should be run.
-  controlPhases = ghc: let inherit (ghcInfo ghc) isCross; in
-                  { doCheck ? !isCross && (lib.versionOlder "7.4" ghc.version)
-                  , doBenchmark ? false
-                  , ...
-                  }: { inherit doCheck doBenchmark; };
-
-  # Divide the build inputs of the package into useful sets.
-  extractBuildInputs = ghc:
-    { setupHaskellDepends ? [], extraLibraries ? []
-    , librarySystemDepends ? [], executableSystemDepends ? []
-    , pkgconfigDepends ? [], libraryPkgconfigDepends ? []
-    , executablePkgconfigDepends ? [], testPkgconfigDepends ? []
-    , benchmarkPkgconfigDepends ? [], testDepends ? []
-    , testHaskellDepends ? [], testSystemDepends ? []
-    , testToolDepends ? [], benchmarkDepends ? []
-    , benchmarkHaskellDepends ? [], benchmarkSystemDepends ? []
-    , benchmarkToolDepends ? [], buildDepends ? []
-    , libraryHaskellDepends ? [], executableHaskellDepends ? []
-    , ...
-    }@args:
-    let inherit (ghcInfo ghc) isGhcjs nativeGhc;
-        inherit (controlPhases ghc args) doCheck doBenchmark;
-        isHaskellPkg = x: x.isHaskellPkg or false;
-        allPkgconfigDepends =
-          pkgconfigDepends ++ libraryPkgconfigDepends ++
-          executablePkgconfigDepends ++
-          lib.optionals doCheck testPkgconfigDepends ++
-          lib.optionals doBenchmark benchmarkPkgconfigDepends;
-        otherBuildInputs =
-          setupHaskellDepends ++ extraLibraries ++
-          librarySystemDepends ++ executableSystemDepends ++
-          allPkgconfigDepends ++
-          lib.optionals doCheck ( testDepends ++ testHaskellDepends ++
-                                  testSystemDepends ++ testToolDepends
-                                ) ++
-          # ghcjs's hsc2hs calls out to the native hsc2hs
-          lib.optional isGhcjs nativeGhc ++
-          lib.optionals doBenchmark ( benchmarkDepends ++
-                                      benchmarkHaskellDepends ++
-                                      benchmarkSystemDepends ++
-                                      benchmarkToolDepends
-                                    );
-        propagatedBuildInputs =
-          buildDepends ++ libraryHaskellDepends ++
-          executableHaskellDepends;
-        allBuildInputs = propagatedBuildInputs ++ otherBuildInputs;
-        isHaskellPartition =
-          lib.partition isHaskellPkg allBuildInputs;
-    in
-      { haskellBuildInputs = isHaskellPartition.right;
-        systemBuildInputs = isHaskellPartition.wrong;
-        inherit propagatedBuildInputs otherBuildInputs
-          allPkgconfigDepends;
-      };
-
 }
diff --git a/pkgs/development/haskell-modules/make-package-set.nix b/pkgs/development/haskell-modules/make-package-set.nix
index dda16d22c9ba..7ac0ef509f41 100644
--- a/pkgs/development/haskell-modules/make-package-set.nix
+++ b/pkgs/development/haskell-modules/make-package-set.nix
@@ -33,7 +33,7 @@ let
   inherit (haskellLib) overrideCabal;
 
   mkDerivationImpl = pkgs.callPackage ./generic-builder.nix {
-    inherit stdenv haskellLib;
+    inherit stdenv;
     inherit (pkgs) fetchurl pkgconfig glibcLocales coreutils gnugrep gnused;
     nodejs = pkgs.nodejs-slim;
     jailbreak-cabal = if (self.ghc.cross or null) != null