packages feed

hpack 0.14.1 → 0.15.0

raw patch · 6 files changed

+106/−16 lines, 6 filesdep ~aesonPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aeson

API changes (from Hackage documentation)

- Hpack.Config: instance (Hpack.Config.HasFieldNames a, Data.Aeson.Types.Class.FromJSON a) => Data.Aeson.Types.Class.FromJSON (Hpack.Config.CaptureUnknownFields (Hpack.Config.Section a))
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON (Hpack.Config.CaptureUnknownFields Hpack.Config.FlagSection)
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON (Hpack.Config.CaptureUnknownFields Hpack.Config.ThenElse)
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.CommonOptions
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.Condition
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.ConditionalSection
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.Dependency
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.Empty
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.ExecutableSection
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.FlagSection
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.LibrarySection
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.PackageConfig
- Hpack.Config: instance Data.Aeson.Types.Class.FromJSON Hpack.Config.ThenElse
+ Hpack.Config: [packageBuildType] :: Package -> BuildType
+ Hpack.Config: [sectionCcOptions] :: Section a -> [CcOption]
+ Hpack.Config: instance (Hpack.Config.HasFieldNames a, Data.Aeson.Types.FromJSON.FromJSON a) => Data.Aeson.Types.FromJSON.FromJSON (Hpack.Config.CaptureUnknownFields (Hpack.Config.Section a))
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON (Hpack.Config.CaptureUnknownFields Hpack.Config.FlagSection)
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON (Hpack.Config.CaptureUnknownFields Hpack.Config.ThenElse)
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.BuildType
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.CommonOptions
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.Condition
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.ConditionalSection
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.Dependency
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.Empty
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.ExecutableSection
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.FlagSection
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.LibrarySection
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.PackageConfig
+ Hpack.Config: instance Data.Aeson.Types.FromJSON.FromJSON Hpack.Config.ThenElse
+ Hpack.Config: instance GHC.Classes.Eq Hpack.Config.BuildType
+ Hpack.Config: instance GHC.Generics.Generic Hpack.Config.BuildType
+ Hpack.Config: instance GHC.Show.Show Hpack.Config.BuildType
- Hpack.Config: Package :: String -> String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> [String] -> [String] -> [String] -> Maybe String -> Maybe FilePath -> Maybe String -> [Flag] -> [FilePath] -> [FilePath] -> Maybe SourceRepository -> Maybe (Section Library) -> [Section Executable] -> [Section Executable] -> [Section Executable] -> Package
+ Hpack.Config: Package :: String -> String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> Maybe String -> [String] -> [String] -> [String] -> BuildType -> Maybe String -> Maybe FilePath -> Maybe String -> [Flag] -> [FilePath] -> [FilePath] -> Maybe SourceRepository -> Maybe (Section Library) -> [Section Executable] -> [Section Executable] -> [Section Executable] -> Package
- Hpack.Config: Section :: a -> [FilePath] -> [Dependency] -> [String] -> [String] -> [GhcOption] -> [GhcProfOption] -> [CppOption] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [LdOption] -> Maybe Bool -> [Conditional] -> [Dependency] -> Section a
+ Hpack.Config: Section :: a -> [FilePath] -> [Dependency] -> [String] -> [String] -> [GhcOption] -> [GhcProfOption] -> [CppOption] -> [CcOption] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [FilePath] -> [LdOption] -> Maybe Bool -> [Conditional] -> [Dependency] -> Section a

Files

hpack.cabal view
@@ -1,9 +1,9 @@--- This file has been generated from package.yaml by hpack version 0.14.0.+-- This file has been generated from package.yaml by hpack version 0.14.1. -- -- see: https://github.com/sol/hpack  name:           hpack-version:        0.14.1+version:        0.15.0 synopsis:       An alternative format for Haskell packages category:       Development homepage:       https://github.com/sol/hpack#readme@@ -33,7 +33,7 @@     , containers     , unordered-containers     , yaml-    , aeson >= 0.8+    , aeson >= 0.11   exposed-modules:       Hpack       Hpack.Config@@ -64,8 +64,8 @@     , containers     , unordered-containers     , yaml+    , aeson >= 0.11     , hpack-    , aeson >= 0.8   default-language: Haskell2010  test-suite spec@@ -87,13 +87,13 @@     , containers     , unordered-containers     , yaml+    , aeson >= 0.11     , hspec == 2.*     , QuickCheck     , temporary     , mockery >= 0.3     , interpolate     , aeson-qq-    , aeson >= 0.10   other-modules:       Helper       Hpack.ConfigSpec
src/Hpack/Config.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -36,6 +37,7 @@ , Empty(..) , getModules , determineModules+, BuildType(..) #endif ) where @@ -63,7 +65,7 @@ import           Hpack.Yaml  package :: String -> String -> Package-package name version = Package name version Nothing Nothing Nothing Nothing Nothing Nothing [] [] [] Nothing Nothing Nothing [] [] [] Nothing Nothing [] [] []+package name version = Package name version Nothing Nothing Nothing Nothing Nothing Nothing [] [] [] Simple Nothing Nothing Nothing [] [] [] Nothing Nothing [] [] []  renamePackage :: String -> Package -> Package renamePackage name p@Package{..} = p {@@ -91,7 +93,7 @@   ++ maybe [] sectionDependencies packageLibrary  section :: a -> Section a-section a = Section a [] [] [] [] [] [] [] [] [] [] [] [] [] Nothing [] []+section a = Section a [] [] [] [] [] [] [] [] [] [] [] [] [] [] Nothing [] []  packageConfig :: FilePath packageConfig = "package.yaml"@@ -99,7 +101,11 @@ githubBaseUrl :: String githubBaseUrl = "https://github.com/" +#if MIN_VERSION_aeson(1,0,0)+genericParseJSON_ :: forall a. (Generic a, GFromJSON Zero (Rep a), HasTypeName a) => Value -> Parser a+#else genericParseJSON_ :: forall a. (Generic a, GFromJSON (Rep a), HasTypeName a) => Value -> Parser a+#endif genericParseJSON_ = genericParseJSON defaultOptions {fieldLabelModifier = hyphenize name}   where     name :: String@@ -181,6 +187,7 @@ , commonOptionsGhcOptions :: Maybe (List GhcOption) , commonOptionsGhcProfOptions :: Maybe (List GhcProfOption) , commonOptionsCppOptions :: Maybe (List CppOption)+, commonOptionsCcOptions :: Maybe (List CcOption) , commonOptionsCSources :: Maybe (List FilePath) , commonOptionsExtraLibDirs :: Maybe (List FilePath) , commonOptionsExtraLibraries :: Maybe (List FilePath)@@ -241,6 +248,22 @@ instance HasFieldNames Empty where   fieldNames _ = [] +-- From Cabal the library, copied here to avoid a dependency on Cabal.+data BuildType+  = Simple+  | Configure+  | Make+  | Custom+  deriving (Eq, Show, Generic)++instance FromJSON BuildType where+  parseJSON = withText "String" $ \case+    "Simple"    -> return Simple+    "Configure" -> return Configure+    "Make"      -> return Make+    "Custom"    -> return Custom+    _           -> fail "build-type must be one of: Simple, Configure, Make, Custom"+ data PackageConfig = PackageConfig {   packageConfigName :: Maybe String , packageConfigVersion :: Maybe String@@ -253,6 +276,7 @@ , packageConfigAuthor :: Maybe (List String) , packageConfigMaintainer :: Maybe (List String) , packageConfigCopyright :: Maybe (List String)+, packageConfigBuildType :: Maybe BuildType , packageConfigLicense :: Maybe String , packageConfigLicenseFile :: Maybe String , packageConfigTestedWith :: Maybe String@@ -353,6 +377,7 @@ , packageAuthor :: [String] , packageMaintainer :: [String] , packageCopyright :: [String]+, packageBuildType :: BuildType , packageLicense :: Maybe String , packageLicenseFile :: Maybe FilePath , packageTestedWith :: Maybe String@@ -388,6 +413,7 @@ , sectionGhcOptions :: [GhcOption] , sectionGhcProfOptions :: [GhcProfOption] , sectionCppOptions :: [CppOption]+, sectionCcOptions :: [CcOption] , sectionCSources :: [FilePath] , sectionExtraLibDirs :: [FilePath] , sectionExtraLibraries :: [FilePath]@@ -470,6 +496,7 @@       , packageAuthor = fromMaybeList packageConfigAuthor       , packageMaintainer = fromMaybeList packageConfigMaintainer       , packageCopyright = fromMaybeList packageConfigCopyright+      , packageBuildType = fromMaybe Simple packageConfigBuildType       , packageLicense = packageConfigLicense       , packageLicenseFile = packageConfigLicenseFile <|> (guard licenseFileExists >> Just "LICENSE")       , packageTestedWith = packageConfigTestedWith@@ -607,6 +634,7 @@   , sectionGhcOptions = sectionGhcOptions globalOptions ++ sectionGhcOptions options   , sectionGhcProfOptions = sectionGhcProfOptions globalOptions ++ sectionGhcProfOptions options   , sectionCppOptions = sectionCppOptions globalOptions ++ sectionCppOptions options+  , sectionCcOptions = sectionCcOptions globalOptions ++ sectionCcOptions options   , sectionCSources = sectionCSources globalOptions ++ sectionCSources options   , sectionExtraLibDirs = sectionExtraLibDirs globalOptions ++ sectionExtraLibDirs options   , sectionExtraLibraries = sectionExtraLibraries globalOptions ++ sectionExtraLibraries options@@ -621,7 +649,7 @@  toSection :: a -> CommonOptions -> ([FieldName], Section a) toSection a CommonOptions{..}-  = ( concat unknownFields +  = ( concat unknownFields     , Section {         sectionData = a       , sectionSourceDirs = fromMaybeList commonOptionsSourceDirs@@ -630,6 +658,7 @@       , sectionGhcOptions = fromMaybeList commonOptionsGhcOptions       , sectionGhcProfOptions = fromMaybeList commonOptionsGhcProfOptions       , sectionCppOptions = fromMaybeList commonOptionsCppOptions+      , sectionCcOptions = fromMaybeList commonOptionsCcOptions       , sectionCSources = fromMaybeList commonOptionsCSources       , sectionExtraLibDirs = fromMaybeList commonOptionsExtraLibDirs       , sectionExtraLibraries = fromMaybeList commonOptionsExtraLibraries
src/Hpack/Run.hs view
@@ -100,7 +100,7 @@       , ("license", packageLicense)       , ("license-file", packageLicenseFile)       , ("tested-with", packageTestedWith)-      , ("build-type", Just "Simple")+      , ("build-type", Just (show packageBuildType))       , ("cabal-version", cabalVersion)       ] @@ -209,6 +209,7 @@   , renderGhcOptions sectionGhcOptions   , renderGhcProfOptions sectionGhcProfOptions   , renderCppOptions sectionCppOptions+  , renderCcOptions sectionCcOptions   , Field "include-dirs" (LineSeparatedList sectionIncludeDirs)   , Field "install-includes" (LineSeparatedList sectionInstallIncludes)   , Field "c-sources" (LineSeparatedList sectionCSources)@@ -254,6 +255,9 @@  renderCppOptions :: [CppOption] -> Element renderCppOptions = Field "cpp-options" . WordList++renderCcOptions :: [CcOption] -> Element+renderCcOptions = Field "cc-options" . WordList  renderLdOptions :: [LdOption] -> Element renderLdOptions = Field "ld-options" . WordList
src/Hpack/Util.hs view
@@ -4,6 +4,7 @@ , GhcOption , GhcProfOption , CppOption+, CcOption , LdOption , parseMain , toModule@@ -50,6 +51,7 @@ type GhcOption = String type GhcProfOption = String type CppOption = String+type CcOption = String type LdOption = String  parseMain :: String -> (FilePath, [GhcOption])@@ -71,7 +73,7 @@ toModule path = case reverse path of   [] -> Nothing   x : xs -> do-    m <- stripSuffix ".hs" x <|> stripSuffix ".lhs" x+    m <- stripSuffix ".hs" x <|> stripSuffix ".lhs" x <|> stripSuffix ".hsc" x     let name = reverse (m : xs)     guard (isModule name) >> return (intercalate "." name)   where
test/Hpack/ConfigSpec.hs view
@@ -457,6 +457,33 @@         |]         (packageLicenseFile >>> (`shouldBe` Just "FOO")) +    it "accepts build-type: Simple" $ do+      withPackageConfig_ [i|+        build-type: Simple+        |]+        (`shouldBe` package {packageBuildType = Simple})++    it "accepts build-type: Configure" $ do+      withPackageConfig_ [i|+        build-type: Configure+        |]+        (`shouldBe` package {packageBuildType = Configure})++    it "accepts build-type: Make" $ do+      withPackageConfig_ [i|+        build-type: Make+        |]+        (`shouldBe` package {packageBuildType = Make})++    it "accepts build-type: Custom" $ do+      withPackageConfig_ [i|+        build-type: Custom+        |]+        (`shouldBe` package {packageBuildType = Custom})++    it "rejects unknown build-type" $ do+      parseEither parseJSON (String "foobar") `shouldBe` (Left "Error in $: build-type must be one of: Simple, Configure, Make, Custom" :: Either String BuildType)+     it "accepts flags" $ do       withPackageConfig_ [i|         flags:@@ -546,6 +573,30 @@         }         ) +    it "accepts cc-options" $ do+      withPackageConfig_ [i|+        cc-options: -Wall+        library:+          cc-options: -fLIB++        executables:+          foo:+            main: Main.hs+            cc-options: -O2+++        tests:+          spec:+            main: Spec.hs+            cc-options: -O0+        |]+        (`shouldBe` package {+          packageLibrary = Just (section library) {sectionCcOptions = ["-Wall", "-fLIB"]}+        , packageExecutables = [(section $ executable "foo" "Main.hs") {sectionCcOptions = ["-Wall", "-O2"]}]+        , packageTests = [(section $ executable "spec" "Spec.hs") {sectionCcOptions = ["-Wall", "-O0"]}]+        }+        )+     it "accepts ld-options" $ do       withPackageConfig_ [i|         library:@@ -789,10 +840,8 @@           (do           touch "src/Main.hs"           touch "src/Foo.hs"-          touch "src/Bar.hs"-          touch "src/Baz.lhs"           )-          (map (executableOtherModules . sectionData) . packageExecutables >>> (`shouldBe` [["Bar", "Baz", "Foo"]]))+          (map (executableOtherModules . sectionData) . packageExecutables >>> (`shouldBe` [["Foo"]]))        it "allows to specify other-modules" $ do         withPackageConfig [i|@@ -969,7 +1018,7 @@               foo:                 ain: driver/Main.hs             |]-          readPackageConfig file `shouldReturn` Left (file ++ ": Error in $.executables.foo: failed to parse field executables: The key \"main\" was not found")+          readPackageConfig file >>= (`shouldSatisfy` isLeft)        context "when package.yaml does not exist" $ do         it "returns an error" $ \dir -> do
test/Hpack/UtilSpec.hs view
@@ -37,8 +37,14 @@       parseMain "Foo.bar" `shouldBe` ("Foo.hs", ["-main-is Foo.bar"])    describe "toModule" $ do-    it "maps paths to module names" $ do-      toModule ["Foo", "Bar", "Baz.hs"] `shouldBe` Just "Foo.Bar.Baz"+    it "maps .hs paths to module names" $ do+      toModule ["Foo", "Bar", "Baz.hs"]  `shouldBe` Just "Foo.Bar.Baz"++    it "maps .lhs paths to module names" $ do+      toModule ["Foo", "Bar", "Baz.lhs"] `shouldBe` Just "Foo.Bar.Baz"++    it "maps .hsc paths to module names" $ do+      toModule ["Foo", "Bar", "Baz.hsc"] `shouldBe` Just "Foo.Bar.Baz"      it "rejects invalid module names" $ do       toModule ["resources", "hello.hs"] `shouldBe` Nothing