diff --git a/test/cabal-simple/cabal-simple.cabal b/test/cabal-simple/cabal-simple.cabal index 49a9aa55..83bc2e26 100644 --- a/test/cabal-simple/cabal-simple.cabal +++ b/test/cabal-simple/cabal-simple.cabal @@ -30,6 +30,7 @@ executable cabal-simple -- other-modules: -- other-extensions: build-depends: base >=4.11 && <4.12 + , cabal-simple , extra , optparse-applicative -- hs-source-dirs: diff --git a/test/cabal-simple/cabal-simple.nix b/test/cabal-simple/cabal-simple.nix index 220111fc..b1121f08 100644 --- a/test/cabal-simple/cabal-simple.nix +++ b/test/cabal-simple/cabal-simple.nix @@ -36,6 +36,7 @@ "cabal-simple" = { depends = [ (hsPkgs.base) + (hsPkgs.cabal-simple) (hsPkgs.extra) (hsPkgs.optparse-applicative) ]; diff --git a/test/cabal-simple/default.nix b/test/cabal-simple/default.nix index 99fcb8c1..d3890514 100644 --- a/test/cabal-simple/default.nix +++ b/test/cabal-simple/default.nix @@ -2,11 +2,16 @@ { pkgs , haskell , stdenv +, util }: with stdenv.lib; let + ## steps to generate local files + # 1. cabal-to-nix cabal-simple.cabal > cabal-simple.nix + # 2. cabal new-build + # 3. plan-to-nix ./dist-newstyle/cache/plan.json > plan.nix pkgSet = haskell.mkPkgSet { inherit pkgs; pkg-def = import ./plan.nix; @@ -49,9 +54,14 @@ in ''; meta.platforms = platforms.all; -} // { inherit (packages) cabal-simple; inherit pkgSet; } -## steps to generate local files -# 1. cabal-to-nix cabal-simple.cabal > cabal-simple.nix -# 2. cabal new-build -# 3. plan-to-nix ./dist-newstyle/cache/plan.json > plan.nix + passthru = { + inherit (packages) cabal-simple; + inherit pkgSet; + + # Used for testing externally with nix-shell (../tests.sh). + # This just adds cabal-install to the existing shells. + test-shell = util.addCabalInstall packages.cabal-simple.components.all; + + }; +} diff --git a/test/default.nix b/test/default.nix index 1015e047..6fdfb7b0 100644 --- a/test/default.nix +++ b/test/default.nix @@ -15,10 +15,12 @@ let haskellLib = let hl = import ../lib { inherit lib; haskellLib = hl; }; in hl; + util = callPackage ./util.nix {}; + in { - cabal-simple = callPackage ./cabal-simple { inherit haskell; }; + cabal-simple = callPackage ./cabal-simple { inherit haskell util; }; cabal-22 = callPackage ./cabal-22 { inherit haskell; }; - with-packages = callPackage ./with-packages { inherit haskell; }; + with-packages = callPackage ./with-packages { inherit haskell util; }; # Run unit tests with: nix-instantiate --eval --strict -A unit # An empty list means success. diff --git a/test/tests.sh b/test/tests.sh index 44a99b64..aea1d83c 100755 --- a/test/tests.sh +++ b/test/tests.sh @@ -43,4 +43,11 @@ nix-shell $NIX_BUILD_ARGS \ --run 'echo CABAL_CONFIG=$CABAL_CONFIG && echo GHC_ENVIRONMENT=$GHC_ENVIRONMENT && cd with-packages && rm -rf dist-newstyle .ghc-environment* && cabal new-build' echo >& 2 +printf "*** Checking that a nix-shell works for a multi-target project...\n" >& 2 +nix-shell $NIX_BUILD_ARGS \ + --pure ./default.nix \ + -A cabal-simple.test-shell \ + --run 'cd cabal-simple && rm -rf dist-newstyle .ghc-environment* && cabal new-build' +echo >& 2 + printf "\n*** Finished successfully\n" >& 2 diff --git a/test/util.nix b/test/util.nix new file mode 100644 index 00000000..baa294dc --- /dev/null +++ b/test/util.nix @@ -0,0 +1,8 @@ +{ cabal-install }: + +{ + # Add cabal as a buildInput for a haskell derivation. Useful for nix-shell. + addCabalInstall = drv: drv.overrideAttrs (oldAttrs: { + buildInputs = (oldAttrs.buildInputs or []) ++ [ cabal-install ]; + }); +} diff --git a/test/with-packages/default.nix b/test/with-packages/default.nix index 4f62d27c..2353dc04 100644 --- a/test/with-packages/default.nix +++ b/test/with-packages/default.nix @@ -1,9 +1,11 @@ { pkgs , haskell , stdenv +, util }: with stdenv.lib; +with util; let pkgSet = haskell.mkPkgSet { @@ -34,22 +36,32 @@ let packages = pkgSet.config.hsPkgs; - # Add cabal as a buildInput for a haskell derivation. Useful for nix-shell. - addCabalInstall = drv: drv.overrideAttrs (oldAttrs: { - buildInputs = (oldAttrs.buildInputs or []) ++ [ pkgs.cabal-install ]; - }); + package = packages.test-with-packages; + inherit (package.components) library; + + pkgId = p: "${p.identifier.name}-${p.identifier.version}"; + showDepends = component: concatMapStringsSep " " pkgId component.depends; in stdenv.mkDerivation { name = "with-packages-test"; + libraryDepends = showDepends pkgSet.config.packages.test-with-packages.components.library; + allDepends = showDepends pkgSet.config.packages.test-with-packages.components.all; - buildCommand = let - package = packages.test-with-packages; - inherit (package.components) library; - in '' + buildCommand = '' ######################################################################## # test with-packages + printf "checking merging of the 'all' component depends ... " >& 2 + if [ -n "$libraryDepends" -a "$libraryDepends" = "$allDepends" ]; then + echo "PASS" >& 2 + else + echo "FAIL" >& 2 + echo "libraryDepends = $libraryDepends" + echo "allDepends = $allDepends" + exit 1 + fi + printf "checking that the 'all' component works... " >& 2 echo ${package.components.all} >& 2 @@ -62,7 +74,7 @@ in printf "checking that components.library.env has the dependencies... " >& 2 ${library.env}/bin/runghc ${./Point.hs} - # echo >& 2 + echo >& 2 touch $out '';