diff --git a/test/default.nix b/test/default.nix index 0b0b5faf..506dbadc 100644 --- a/test/default.nix +++ b/test/default.nix @@ -18,6 +18,7 @@ let in { cabal-simple = callPackage ./cabal-simple { inherit haskell; }; cabal-22 = callPackage ./cabal-22 { inherit haskell; }; + with-packages = callPackage ./with-packages { inherit haskell; }; # Run unit tests with: nix-instantiate --eval --strict -A unit # An empty list means success. diff --git a/test/with-packages/Point.hs b/test/with-packages/Point.hs new file mode 100644 index 00000000..25b583c1 --- /dev/null +++ b/test/with-packages/Point.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE TemplateHaskell #-} +module Main where + +import Control.Lens + +data Point = Point { _x :: Double, _y :: Double } +makeLenses ''Point + +main :: IO () +main = print (point^.x + point^.y) + where + point = Point { _x = 40.0, _y = 2.0 } diff --git a/test/with-packages/Setup.hs b/test/with-packages/Setup.hs new file mode 100644 index 00000000..9a994af6 --- /dev/null +++ b/test/with-packages/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/test/with-packages/TestWithPackages.hs b/test/with-packages/TestWithPackages.hs new file mode 100644 index 00000000..f8852cd8 --- /dev/null +++ b/test/with-packages/TestWithPackages.hs @@ -0,0 +1,6 @@ +-- | Haddock test stuff +module TestWithPackages (hello) where + +-- | Standard hello text. +hello :: String +hello = "Hello, world!" diff --git a/test/with-packages/default.nix b/test/with-packages/default.nix new file mode 100644 index 00000000..b24fb1f5 --- /dev/null +++ b/test/with-packages/default.nix @@ -0,0 +1,68 @@ +{ pkgs +, haskell +, stdenv +}: + +with stdenv.lib; + +let + pkgSet = haskell.mkPkgSet { + inherit pkgs; + # generated with: + # cabal new-build + # plan-to-nix dist-newstyle/cache/plan.json > plan.nix + # cabal-to-nix test-with-packages.cabal > test-with-packages.nix + pkg-def = import ./plan.nix; + pkg-def-overlays = [ + { test-with-packages = ./test-with-packages.nix; } + ]; + modules = [ + # overrides to fix the build + { + packages.transformers-compat.components.library.doExactConfig = true; + } + ]; + }; + + 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 ]; + }); + +in + stdenv.mkDerivation { + name = "with-packages-test"; + + buildCommand = let + package = packages.test-with-packages; + inherit (package.components) library; + in '' + ######################################################################## + # test with-packages + + printf "checking that the 'all' component works... " >& 2 + echo ${package.components.all} + # echo >& 2 + + printf "checking that the package env has the dependencies... " >& 2 + ${package.components.all.env}/bin/runghc ${./Point.hs} + echo >& 2 + + printf "checking that components.library.env has the dependencies... " >& 2 + ${library.env}/bin/runghc ${./Point.hs} + # echo >& 2 + + touch $out + ''; + + meta.platforms = platforms.all; +} // { + # Used for debugging with nix repl + inherit packages pkgSet; + + # Used for testing externally with nix-shell (../tests.sh). + # This just adds cabal-install to the existing shells. + test-shell = addCabalInstall packages.test-with-packages.components.all; +} diff --git a/test/with-packages/plan.nix b/test/with-packages/plan.nix new file mode 100644 index 00000000..49823506 --- /dev/null +++ b/test/with-packages/plan.nix @@ -0,0 +1,99 @@ +hackage: + { + packages = { + "void".revision = hackage."void"."0.7.2".revisions.default; + "semigroupoids".revision = hackage."semigroupoids"."5.2.2".revisions.default; + "free".revision = hackage."free"."5.0.2".revisions.default; + "exceptions".revision = hackage."exceptions"."0.10.0".revisions.default; + "binary".revision = hackage."binary"."0.8.5.1".revisions.default; + "ghc-prim".revision = hackage."ghc-prim"."0.5.2.0".revisions.default; + "bifunctors".revision = hackage."bifunctors"."5.5.3".revisions.default; + "stm".revision = hackage."stm"."2.4.5.1".revisions.default; + "mtl".revision = hackage."mtl"."2.2.2".revisions.default; + "rts".revision = hackage."rts"."1.0".revisions.default; + "adjunctions".revision = hackage."adjunctions"."4.4".revisions.default; + "invariant".revision = hackage."invariant"."0.5.1".revisions.default; + "distributive".revision = hackage."distributive"."0.5.3".revisions.default; + "parallel".revision = hackage."parallel"."3.2.2.0".revisions.default; + "deepseq".revision = hackage."deepseq"."1.4.3.0".revisions.default; + "semigroups".revision = hackage."semigroups"."0.18.5".revisions.default; + "transformers-compat".revision = hackage."transformers-compat"."0.6.2".revisions.default; + "template-haskell".revision = hackage."template-haskell"."2.13.0.0".revisions.default; + "vector".revision = hackage."vector"."0.12.0.1".revisions.default; + "call-stack".revision = hackage."call-stack"."0.1.0".revisions.default; + "primitive".revision = hackage."primitive"."0.6.3.0".revisions.default; + "profunctors".revision = hackage."profunctors"."5.2.2".revisions.default; + "tagged".revision = hackage."tagged"."0.8.5".revisions.default; + "lens".revision = hackage."lens"."4.16.1".revisions.default; + "containers".revision = hackage."containers"."0.5.11.0".revisions.default; + "reflection".revision = hackage."reflection"."2.1.4".revisions.default; + "bytestring".revision = hackage."bytestring"."0.10.8.2".revisions.default; + "StateVar".revision = hackage."StateVar"."1.1.1.1".revisions.default; + "contravariant".revision = hackage."contravariant"."1.4.1".revisions.default; + "text".revision = hackage."text"."1.2.3.1".revisions.default; + "unordered-containers".revision = hackage."unordered-containers"."0.2.9.0".revisions.default; + "base".revision = hackage."base"."4.11.1.0".revisions.default; + "comonad".revision = hackage."comonad"."5.0.4".revisions.default; + "transformers".revision = hackage."transformers"."0.5.5.0".revisions.default; + "hashable".revision = hackage."hashable"."1.2.7.0".revisions.default; + "transformers-base".revision = hackage."transformers-base"."0.4.5.2".revisions.default; + "filepath".revision = hackage."filepath"."1.4.2".revisions.default; + "kan-extensions".revision = hackage."kan-extensions"."5.2".revisions.default; + "pretty".revision = hackage."pretty"."1.1.3.6".revisions.default; + "ghc-boot-th".revision = hackage."ghc-boot-th"."8.4.4".revisions.default; + "base-orphans".revision = hackage."base-orphans"."0.7".revisions.default; + "th-abstraction".revision = hackage."th-abstraction"."0.2.8.0".revisions.default; + "array".revision = hackage."array"."0.5.2.0".revisions.default; + "integer-gmp".revision = hackage."integer-gmp"."1.0.2.0".revisions.default; + }; + compiler = { + version = "8.4.4"; + nix-name = "ghc844"; + packages = { + "void" = "0.7.2"; + "semigroupoids" = "5.2.2"; + "free" = "5.0.2"; + "exceptions" = "0.10.0"; + "binary" = "0.8.5.1"; + "ghc-prim" = "0.5.2.0"; + "bifunctors" = "5.5.3"; + "stm" = "2.4.5.1"; + "mtl" = "2.2.2"; + "rts" = "1.0"; + "adjunctions" = "4.4"; + "invariant" = "0.5.1"; + "distributive" = "0.5.3"; + "parallel" = "3.2.2.0"; + "deepseq" = "1.4.3.0"; + "semigroups" = "0.18.5"; + "transformers-compat" = "0.6.2"; + "template-haskell" = "2.13.0.0"; + "vector" = "0.12.0.1"; + "call-stack" = "0.1.0"; + "primitive" = "0.6.3.0"; + "profunctors" = "5.2.2"; + "tagged" = "0.8.5"; + "lens" = "4.16.1"; + "containers" = "0.5.11.0"; + "reflection" = "2.1.4"; + "bytestring" = "0.10.8.2"; + "StateVar" = "1.1.1.1"; + "contravariant" = "1.4.1"; + "text" = "1.2.3.1"; + "unordered-containers" = "0.2.9.0"; + "base" = "4.11.1.0"; + "comonad" = "5.0.4"; + "transformers" = "0.5.5.0"; + "hashable" = "1.2.7.0"; + "transformers-base" = "0.4.5.2"; + "filepath" = "1.4.2"; + "kan-extensions" = "5.2"; + "pretty" = "1.1.3.6"; + "ghc-boot-th" = "8.4.4"; + "base-orphans" = "0.7"; + "th-abstraction" = "0.2.8.0"; + "array" = "0.5.2.0"; + "integer-gmp" = "1.0.2.0"; + }; + }; + } diff --git a/test/with-packages/test-with-packages.cabal b/test/with-packages/test-with-packages.cabal new file mode 100644 index 00000000..b2b41635 --- /dev/null +++ b/test/with-packages/test-with-packages.cabal @@ -0,0 +1,15 @@ +cabal-version: 2.2 +name: test-with-packages +version: 0.1.0.0 +license: NONE +author: Rodney Lorrimar +maintainer: rodney.lorrimar@iohk.io + +library + exposed-modules: TestWithPackages + -- other-modules: + -- other-extensions: + build-depends: base ^>=4.11.1.0 + , lens + -- hs-source-dirs: + default-language: Haskell2010 diff --git a/test/with-packages/test-with-packages.nix b/test/with-packages/test-with-packages.nix new file mode 100644 index 00000000..9b2a9695 --- /dev/null +++ b/test/with-packages/test-with-packages.nix @@ -0,0 +1,36 @@ +{ system +, compiler +, flags +, pkgs +, hsPkgs +, pkgconfPkgs +, ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { + name = "test-with-packages"; + version = "0.1.0.0"; + }; + license = "NONE"; + copyright = ""; + maintainer = "rodney.lorrimar@iohk.io"; + author = "Rodney Lorrimar"; + homepage = ""; + url = ""; + synopsis = ""; + description = ""; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs.base) + (hsPkgs.lens) + ]; + }; + }; + } // rec { + src = pkgs.lib.mkDefault ./.; + }