diff options
author | lassulus <lassulus@lassul.us> | 2018-12-04 08:08:43 +0100 |
---|---|---|
committer | lassulus <lassulus@lassul.us> | 2018-12-04 08:08:43 +0100 |
commit | d30118879d052adb9ea59cdc1d0695b5e69664e9 (patch) | |
tree | 9c3afb51a24bc26239b8b076037d79960762b17b /krebs/5pkgs/simple/cabal-read.nix | |
parent | 205e74c138d809fa1bbb8cbbc983e3344217f3be (diff) | |
parent | e8e0a68029516b3577aef5aabf818589009f334d (diff) |
Merge remote-tracking branch 'ni/master'
Diffstat (limited to 'krebs/5pkgs/simple/cabal-read.nix')
-rw-r--r-- | krebs/5pkgs/simple/cabal-read.nix | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/krebs/5pkgs/simple/cabal-read.nix b/krebs/5pkgs/simple/cabal-read.nix new file mode 100644 index 000000000..f8fc71e05 --- /dev/null +++ b/krebs/5pkgs/simple/cabal-read.nix @@ -0,0 +1,35 @@ +{ writeHaskellPackage }: + +# Because `sed -n 's/.*\<ghc-options:\s\+\(.*\)/\1/p'` is too simple. +writeHaskellPackage "cabal-read" { + executables.ghc-options = { + extra-depends = ["Cabal"]; + text = /* haskell */ '' + module Main (main) where + import Data.List + import Data.Maybe + import Distribution.Compiler + import Distribution.PackageDescription.Parsec + import Distribution.Types.BuildInfo + import Distribution.Types.CondTree + import Distribution.Types.Executable + import Distribution.Types.GenericPackageDescription + import Distribution.Types.UnqualComponentName + import Distribution.Verbosity + import System.Environment + main :: IO () + main = do + [path, name] <- getArgs + + desc <- readGenericPackageDescription normal path + + case lookup (mkUnqualComponentName name) (condExecutables desc) of + Just exe -> + putStrLn . intercalate " " . fromMaybe [] . lookup GHC + . options . buildInfo . condTreeData $ exe + + Nothing -> + error ("executable " <> name <> " not found in " <> path) + ''; + }; +} |