stockholm/krebs/5pkgs/simple/cabal-read.nix

40 lines
1.3 KiB
Nix

{ 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)
'';
};
}