diff options
author | tv <tv@krebsco.de> | 2024-06-05 14:04:22 +0200 |
---|---|---|
committer | tv <tv@krebsco.de> | 2024-06-05 14:04:22 +0200 |
commit | 2ab1cf2c1941442418454ec57629a28e0c70b172 (patch) | |
tree | acb6a6a8fcf57806f859770275174fa64945c875 | |
parent | d6c3807d20b448c3c41d440c7d1391d4cacd4b10 (diff) |
cabal-read: import from stockholm
-rw-r--r-- | pkgs/simple/cabal-read.nix | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/pkgs/simple/cabal-read.nix b/pkgs/simple/cabal-read.nix new file mode 100644 index 0000000..03b42ef --- /dev/null +++ b/pkgs/simple/cabal-read.nix @@ -0,0 +1,39 @@ +{ writeHaskellPackage }: + +# Because `sed -n 's/.*\<ghc-options:\s\+\(.*\)/\1/p'` is too simple. +writeHaskellPackage "cabal-read" { + executables.ghc-options = { + extra-depends = ["Cabal"]; + text = /* haskell */ '' + {-# LANGUAGE CPP #-} + 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 + #if MIN_VERSION_Cabal(3,0,0) + . perCompilerFlavorToList + #endif + . options . buildInfo . condTreeData $ exe + + Nothing -> + error ("executable " <> name <> " not found in " <> path) + ''; + }; +} |