@@ -11,34 +11,47 @@ import Distribution.Nixpkgs.Haskell.Stack
1111import Distribution.System as System
1212import qualified Distribution.Text as Text
1313import Options.Applicative as Opts
14−import Stack.Config
1514import Stack.Types
15+import System.Environment
16+import System.FilePath
1617
1718
1819data Options = Options
19− { _optOutFile :: !FilePath
20+ { _optAllCabalHashesRepo :: !FilePath
21+ , _optLtsHaskellRepo :: !FilePath
22+ , _optOutStackagePackages :: !FilePath
23+ , _optOutStackageConfig :: !FilePath
24+ , _optOutDerivation :: !FilePath
2025 , _optHackageDb :: !(Maybe HackageDb)
2126 , _optNixpkgsRepository :: !FilePath
22− , _optAllCabalHashesPath :: !FilePath
23− , _optLtsHaskellPath :: !FilePath
24− , _optStackageOutPackages :: !FilePath
25− , _optStackageOutConfig :: !FilePath
2627 , _optCompilerId :: !CompilerId
2728 , _optPlatform :: !Platform
28− , _optStackYaml :: !FilePath
29+ , _optStackYamlArg :: !FilePath
2930 } deriving (Show)
3031
3132makeLenses ''Options
3233
34+envStackYaml :: IO (Maybe FilePath)
35+envStackYaml = lookupEnv "STACK_YAML"
36+
37+optStackYaml :: Getter Options FilePath
38+optStackYaml = optStackYamlArg . to stackYamlFile
39+ where
40+ stackYamlFile p = case splitFileName p of
41+ (dir, "") -> dir </> "stack.yaml"
42+ (dir, ".") -> dir </> "stack.yaml"
43+ (_ , "..") -> p </> "stack.yaml"
44+ _ -> p
45+
3346options :: Parser Options
3447options = Options
35− <$> outFile
48+ <$> allCabalHashesRepo
49+ <*> ltsHaskellRepo
50+ <*> outStackagePackages
51+ <*> outStackageConfig
52+ <*> outDerivation
3653 <*> optional hackageDb
3754 <*> nixpkgsRepository
38− <*> allCabalHashesPath
39− <*> ltsHaskellPath
40− <*> stackageOutPackages
41− <*> stackageOutConfig
4255 <*> compilerId
4356 <*> platform
4457 <*> stackYamlArg
@@ -50,14 +63,6 @@ pinfo = info
5063 ( fullDesc
5164 <> header "stack2nix converts Stack files into build instructions for Nix." )
5265
53−outFile :: Parser FilePath
54−outFile = option str
55− ( long "nix-out-file"
56− <> metavar "NIX_OUT_FILE"
57− <> help "path to output derivation"
58− <> value "default.nix"
59− <> showDefaultWith id )
60−
6166nixpkgsRepository :: Parser FilePath
6267nixpkgsRepository = option str
6368 ( long "nixpkgs"
@@ -66,51 +71,48 @@ nixpkgsRepository = option str
6671 <> value "<nixpkgs>"
6772 <> showDefaultWith id )
6873
69−stackageBuildPlan :: Parser FilePath
70−stackageBuildPlan = option str
71− ( long "stackage-build-plan"
72− <> metavar "STACKAGE_BUILD_PLAN"
73− <> help "stackage build plan (YAML)" )
74−
75−allCabalHashesPath :: Parser FilePath
76−allCabalHashesPath = option str
74+allCabalHashesRepo :: Parser FilePath
75+allCabalHashesRepo = option str
7776 ( long "all-cabal-hashes"
78− <> metavar "ALL_CABAL_HASHES"
77+ <> metavar "REPO_DIR"
7978 <> help "path to commercialhaskell/all-cabal-hashes repository" )
8079
81−ltsHaskellPath :: Parser FilePath
82−ltsHaskellPath = option str
80+ltsHaskellRepo :: Parser FilePath
81+ltsHaskellRepo = option str
8382 ( long "lts-haskell"
84− <> metavar "LTS_HASKELL_DIR"
83+ <> metavar "REPO_DIR"
8584 <> help "path to fpco/lts-haskell repository" )
8685
87−stackResolver :: Parser StackResolver
88−stackResolver = StackResolver <$>
89− option text
90− ( long "resolver"
91− <> metavar "RESOLVER"
92− <> help "override stack resolver" )
93−
94−stackageOutPackages :: Parser FilePath
95−stackageOutPackages = option str
96− ( long "nix-stackage-packages"
97− <> metavar "STACKAGE_PACKAGES"
98− <> help "name of the output file for the package set"
86+outStackagePackages :: Parser FilePath
87+outStackagePackages = option str
88+ ( long "out-packages"
89+ <> metavar "NIX_FILE"
90+ <> help "output file of the stackage packages set"
9991 <> value "packages.nix"
10092 <> showDefaultWith id)
10193
102−stackageOutConfig :: Parser FilePath
103−stackageOutConfig = option str
104− ( long "nix-stackage-config"
105− <> metavar "STACKAGE_CONFIG"
106− <> help "name of the output file for the package set configuration"
94+outStackageConfig :: Parser FilePath
95+outStackageConfig = option str
96+ ( long "out-config"
97+ <> metavar "NIX_FILE"
98+ <> help "output file of the stackage packages compiler config"
10799 <> value "configuration-packages.nix"
108100 <> showDefaultWith id)
109101
102+outDerivation :: Parser FilePath
103+outDerivation = option str
104+ ( long "out-derivation"
105+ <> metavar "NIX_FILE"
106+ <> help "path to output derivation"
107+ <> value "default.nix"
108+ <> showDefaultWith id )
109+
110110stackYamlArg :: Parser FilePath
111111stackYamlArg = Opts.argument str
112112 ( metavar "STACK_YAML"
113− <> value "stack.yaml" )
113+ <> help "path to stack.yaml file or directory" )
114+
115+-- inherited from cabal2nix
114116
115117hackageDb :: Parser HackageDb
116118hackageDb = HackageDb <$>
@@ -140,6 +142,8 @@ platform = option (readP Text.parse)
140142 <> value buildPlatform
141143 <> showDefaultWith Text.display )
142144
145+-- utils
146+
143147text :: ReadM Text
144148text = T.pack <$> str
145149