From 5d4bada51d272bb5bfb57e4ac8f026e48c68ca2c Mon Sep 17 00:00:00 2001 From: Nicolas Mattia Date: Thu, 31 Jan 2019 18:59:25 +0100 Subject: [PATCH] Use ghc-options in HPack --- snack-lib/hpack.nix | 5 ++++- tests/ghc-options/Main.hs | 5 +++++ tests/ghc-options/golden | 1 + tests/ghc-options/package.nix | 5 +++++ tests/ghc-options/package.yaml | 9 +++++++++ tests/ghc-options/test | 20 ++++++++++++++++++++ 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/ghc-options/Main.hs create mode 100644 tests/ghc-options/golden create mode 100644 tests/ghc-options/package.nix create mode 100644 tests/ghc-options/package.yaml create mode 100755 tests/ghc-options/test diff --git a/snack-lib/hpack.nix b/snack-lib/hpack.nix index 8c4993b..a05e434 100644 --- a/snack-lib/hpack.nix +++ b/snack-lib/hpack.nix @@ -34,6 +34,7 @@ in mkDeps = obj: dropVersionBounds (optAttr obj "dependencies" []); topDeps = mkDeps package; topExtensions = optAttr package "default-extensions" []; + topGhcOpts = optAttr package "ghc-options" []; packageLib = withAttr package "library" null (component: { src = let @@ -48,6 +49,7 @@ in builtins.toPath "${builtins.toString base}/${source-dirs}"; dependencies = topDeps ++ mkDeps component; extensions = topExtensions ++ (optAttr component "extensions" []); + ghcOpts = topGhcOpts ++ (optAttr component "ghc-options" []); } ); @@ -76,7 +78,8 @@ in builtins.toPath "${builtins.toString base}/${source-dirs}"; dependencies = topDeps ++ dropVersionBounds depOrPack.wrong; extensions = topExtensions ++ (optAttr component "extensions" []); - packages = map (_: packageLib) depOrPack.right; + ghcOpts = topGhcOpts ++ (optAttr component "ghc-options" []); + packages = map (_: packageLib) depOrPack.right; }; in { library = packageLib; diff --git a/tests/ghc-options/Main.hs b/tests/ghc-options/Main.hs new file mode 100644 index 0000000..429ce83 --- /dev/null +++ b/tests/ghc-options/Main.hs @@ -0,0 +1,5 @@ +module Main where + +import Data.Text + +main = putStrLn $ unpack "hello" diff --git a/tests/ghc-options/golden b/tests/ghc-options/golden new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/tests/ghc-options/golden @@ -0,0 +1 @@ +hello diff --git a/tests/ghc-options/package.nix b/tests/ghc-options/package.nix new file mode 100644 index 0000000..f37840b --- /dev/null +++ b/tests/ghc-options/package.nix @@ -0,0 +1,5 @@ +{ main = "Main"; + src = ./.; + dependencies = [ "text" ]; + ghcOpts = ["-XOverloadedStrings"]; +} diff --git a/tests/ghc-options/package.yaml b/tests/ghc-options/package.yaml new file mode 100644 index 0000000..d28cc24 --- /dev/null +++ b/tests/ghc-options/package.yaml @@ -0,0 +1,9 @@ +name: snack-extensions-test + +ghc-options: + - -XOverloadedStrings +dependencies: + - text +executable: + main: Main.hs + source-dirs: . diff --git a/tests/ghc-options/test b/tests/ghc-options/test new file mode 100755 index 0000000..1829392 --- /dev/null +++ b/tests/ghc-options/test @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# vim: ft=sh sw=2 et + +set -euo pipefail + +test() { + $SNACK build + $SNACK run | diff golden - + + TMP_FILE=$(mktemp) + + capture_io "$TMP_FILE" main | $SNACK ghci + + diff golden $TMP_FILE + rm $TMP_FILE +} + +SNACK="snack --package-file ./package.nix" test +SNACK="snack --package-file ./package.nix -l ../../snack-lib" test +SNACK="snack --package-file ./package.yaml" test