horizon-gen-nix 0.5 → 0.6
raw patch · 6 files changed
+38/−18 lines, 6 filesdep ~horizon-spec
Dependency ranges changed: horizon-spec
Files
- ChangeLog.md +5/−0
- horizon-gen-nix.cabal +2/−2
- src/Horizon/Gen/Nix.hs +17/−6
- src/Horizon/Gen/Nix/Cabal2Nix/Options.hs +5/−4
- src/Horizon/Gen/Nix/Writers.hs +7/−6
- test/Spec.hs +2/−0
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for horizon-gen-nix +## 0.6++* Support horizon-spec 0.6+* Compiler flag now correctly preprocesses cabal files.+ ## v0.5 * Support horizon-spec 0.5
horizon-gen-nix.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: horizon-gen-nix-version: 0.5+version: 0.6 synopsis: Generate nix expressions from horizon-spec definitions description: Generate nix expressions from horizon-spec definitions category: Package Management, Nix@@ -49,7 +49,7 @@ , directory , distribution-nixpkgs , either- , horizon-spec >=0.4 && <0.6+ , horizon-spec >=0.6 && <0.7 , language-nix , lens , optparse-applicative
src/Horizon/Gen/Nix.hs view
@@ -6,7 +6,9 @@ , makeOverlay ) where +import qualified Data.Text as T (unpack) import Dhall (auto, inputFile)+import Distribution.Parsec (eitherParsec) import Horizon.Gen.Nix.Options (HorizonOptions (MkHorizonOptions), fromInputFile, horizonGenNixOptsInfo, optInputFile)@@ -15,7 +17,8 @@ import Horizon.Spec (HorizonExport (MakeOverlay, MakePackageSet), OverlayExportSettings (MkOverlayExportSettings), PackageSetExportSettings (MkPackageSetExportSettings),- fromOverlay, packages)+ compiler, fromCompiler, fromOverlay,+ packages) import Options.Applicative (execParser) import Path (toFilePath) import Path.Dhall ()@@ -23,13 +26,21 @@ makeMakePackageSet :: PackageSetExportSettings -> IO () makeMakePackageSet (MkPackageSetExportSettings d f xs) = do- writeHaskellPackages d (packages xs)- writeMakePackageSet d f xs+ case eitherParsec (T.unpack $ fromCompiler $ compiler xs) of+ Left e -> putStrLn e+ Right x -> do+ writeHaskellPackages d x (packages xs)+ writeMakePackageSet d f xs makeOverlay :: OverlayExportSettings -> IO ()-makeOverlay (MkOverlayExportSettings d f xs) = do- writeHaskellPackages d (fromOverlay xs)- writeOverlay d f xs+makeOverlay (MkOverlayExportSettings d f xs) = let+ xs' = fromOverlay xs+ in+ case eitherParsec (T.unpack $ fromCompiler $ compiler xs') of+ Left e -> putStrLn e+ Right x -> do+ writeHaskellPackages d x (packages xs')+ writeOverlay d f xs processHorizonExport :: HorizonExport -> IO () processHorizonExport (MakePackageSet settings) = makeMakePackageSet settings
src/Horizon/Gen/Nix/Cabal2Nix/Options.hs view
@@ -32,7 +32,8 @@ optUrl) import Control.Lens ((#)) import qualified Data.Text as T-import Distribution.Compiler (buildCompilerId)+import Distribution.Compiler (CompilerId,+ buildCompilerId) import Distribution.Nixpkgs.Fetch (FetchSubmodules (FetchSubmodules)) import Distribution.Nixpkgs.Haskell.PackageSourceSpec (HpackUse (NoHpack)) import Distribution.System (buildPlatform)@@ -85,15 +86,15 @@ , optFetchSubmodules = FetchSubmodules } -haskellPackageToCabal2NixOptions :: HaskellPackage -> Options-haskellPackageToCabal2NixOptions (MkHaskellPackage x ms _) =+haskellPackageToCabal2NixOptions :: CompilerId -> HaskellPackage -> Options+haskellPackageToCabal2NixOptions c (MkHaskellPackage x ms _) = applyModifiersToCabal2NixOptions ms $ ( case x of FromHackage z -> applyHackageSourceToCabal2NixOptions z FromGit z -> applyGitSourceToCabal2NixOptions z FromLocal z -> applyLocalSourceToCabal2NixOptions z FromTarball z -> applyTarballSourceToCabal2NixOptions z- ) mkDefaultCabal2NixOptions+ ) mkDefaultCabal2NixOptions { optCompiler = c } applyGitSourceToCabal2NixOptions :: GitSource
src/Horizon/Gen/Nix/Writers.hs view
@@ -13,6 +13,7 @@ import Control.Monad (forM_, unless) import Data.Map (keys, toList) import qualified Data.Text as T+import Distribution.Compiler (CompilerId) import Distribution.Nixpkgs.Haskell.Derivation (Derivation, benchmarkDepends, testDepends)@@ -46,7 +47,7 @@ writeOverlay :: PackagesDir -> OverlayFile -> Overlay -> IO ()-writeOverlay (MkPackagesDir d) (MkOverlayFile f) (MkOverlay (MkPackageList xs)) = withFile (toFilePath f) WriteMode $ \h -> do+writeOverlay (MkPackagesDir d) (MkOverlayFile f) (MkOverlay (MkPackageSet _ (MkPackageList xs))) = withFile (toFilePath f) WriteMode $ \h -> do hPutStrLn h "{ pkgs, ... }:" hPutStrLn h "" hPutStrLn h "final: prev: with pkgs.haskell.lib; {"@@ -80,14 +81,14 @@ writeDerivation :: Path b File -> Derivation -> IO () writeDerivation f = writeFile (toFilePath f) . show . prettyDerivation -writeHaskellPackage :: PackagesDir -> Name -> HaskellPackage -> IO ()-writeHaskellPackage (MkPackagesDir d) (MkName f) y = do- let o = haskellPackageToCabal2NixOptions y+writeHaskellPackage :: PackagesDir -> CompilerId -> Name -> HaskellPackage -> IO ()+writeHaskellPackage (MkPackagesDir d) c (MkName f) y = do+ let o = haskellPackageToCabal2NixOptions c y createDirectoryIfMissing True (toFilePath d) f' <- parseRelFile $ T.unpack (f <> ".nix") let j = d </> f' q <- doesFileExist $ toFilePath j unless q $ writeCabal2Nix j (modifiers y) o -writeHaskellPackages :: PackagesDir -> PackageList -> IO ()-writeHaskellPackages d = mapM_ (uncurry $ writeHaskellPackage d) . toList . fromPackageList+writeHaskellPackages :: PackagesDir -> CompilerId -> PackageList -> IO ()+writeHaskellPackages d c = mapM_ (uncurry $ writeHaskellPackage d c) . toList . fromPackageList
test/Spec.hs view
@@ -19,6 +19,7 @@ outputFilesOverlayRel = [ $(mkRelFile "overlay.nix") , $(mkRelFile "pkgs/lens.nix")+ , $(mkRelFile "pkgs/hashable.nix") , $(mkRelFile "pkgs/Cabal-syntax.nix") , $(mkRelFile "pkgs/network-mux.nix") ]@@ -27,6 +28,7 @@ outputFilesPackageSetRel = [ $(mkRelFile "initial-packages.nix") , $(mkRelFile "pkgs/lens.nix")+ , $(mkRelFile "pkgs/hashable.nix") , $(mkRelFile "pkgs/Cabal-syntax.nix") , $(mkRelFile "pkgs/network-mux.nix") ]