From e14a9c48a4d0568fbc8bb91988c42ea9dc48c427 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Wed, 3 May 2017 18:04:32 +0200 Subject: [PATCH 1/9] Add support for `new-haddock --haddock-for-hackage` --- cabal-install/Distribution/Client/ProjectConfig/Legacy.hs | 3 ++- cabal-install/Distribution/Client/ProjectConfig/Types.hs | 4 +++- cabal-install/Distribution/Client/ProjectPlanning.hs | 4 +++- cabal-install/Distribution/Client/ProjectPlanning/Types.hs | 3 +++ cabal-install/Distribution/Client/Setup.hs | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs index 07fd377de01..39376c5e986 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs @@ -368,6 +368,7 @@ convertLegacyPerPackageFlags configFlags installFlags haddockFlags = haddockHtml = packageConfigHaddockHtml, haddockHtmlLocation = packageConfigHaddockHtmlLocation, haddockForeignLibs = packageConfigHaddockForeignLibs, + haddockForHackage = packageConfigHaddockForHackage, haddockExecutables = packageConfigHaddockExecutables, haddockTestSuites = packageConfigHaddockTestSuites, haddockBenchmarks = packageConfigHaddockBenchmarks, @@ -671,7 +672,7 @@ convertToLegacyPerPackageConfig PackageConfig {..} = haddockHoogle = packageConfigHaddockHoogle, haddockHtml = packageConfigHaddockHtml, haddockHtmlLocation = packageConfigHaddockHtmlLocation, - haddockForHackage = mempty, --TODO: added recently + haddockForHackage = packageConfigHaddockForHackage, haddockForeignLibs = packageConfigHaddockForeignLibs, haddockExecutables = packageConfigHaddockExecutables, haddockTestSuites = packageConfigHaddockTestSuites, diff --git a/cabal-install/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/Distribution/Client/ProjectConfig/Types.hs index 3871965aeb3..5a49768e30e 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Types.hs @@ -48,7 +48,7 @@ import Distribution.Simple.Compiler ( Compiler, CompilerFlavor , OptimisationLevel(..), ProfDetailLevel, DebugInfoLevel(..) ) import Distribution.Simple.Setup - ( Flag, AllowNewer(..), AllowOlder(..) ) + ( Flag, AllowNewer(..), AllowOlder(..), HaddockTarget(..) ) import Distribution.Simple.InstallDirs ( PathTemplate ) import Distribution.Utils.NubList @@ -254,6 +254,7 @@ data PackageConfig packageConfigHaddockHtml :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockHtmlLocation :: Flag String, --TODO: [required eventually] use this packageConfigHaddockForeignLibs :: Flag Bool, --TODO: [required eventually] use this + packageConfigHaddockForHackage :: Flag HaddockTarget, packageConfigHaddockExecutables :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockTestSuites :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockBenchmarks :: Flag Bool, --TODO: [required eventually] use this @@ -270,6 +271,7 @@ instance Binary ProjectConfigBuildOnly instance Binary ProjectConfigShared instance Binary ProjectConfigProvenance instance Binary PackageConfig +instance Binary HaddockTarget -- | Newtype wrapper for 'Map' that provides a 'Monoid' instance that takes diff --git a/cabal-install/Distribution/Client/ProjectPlanning.hs b/cabal-install/Distribution/Client/ProjectPlanning.hs index 9657d5cff5b..4ae5a45a5b8 100644 --- a/cabal-install/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/Distribution/Client/ProjectPlanning.hs @@ -1711,6 +1711,7 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB elabHaddockHtml = perPkgOptionFlag pkgid False packageConfigHaddockHtml elabHaddockHtmlLocation = perPkgOptionMaybe pkgid packageConfigHaddockHtmlLocation elabHaddockForeignLibs = perPkgOptionFlag pkgid False packageConfigHaddockForeignLibs + elabHaddockForHackage = perPkgOptionFlag pkgid Cabal.ForDevelopment packageConfigHaddockForHackage elabHaddockExecutables = perPkgOptionFlag pkgid False packageConfigHaddockExecutables elabHaddockTestSuites = perPkgOptionFlag pkgid False packageConfigHaddockTestSuites elabHaddockBenchmarks = perPkgOptionFlag pkgid False packageConfigHaddockBenchmarks @@ -3180,7 +3181,8 @@ setupHsHaddockFlags (ElaboratedConfiguredPackage{..}) _ verbosity builddir = haddockHoogle = toFlag elabHaddockHoogle, haddockHtml = toFlag elabHaddockHtml, haddockHtmlLocation = maybe mempty toFlag elabHaddockHtmlLocation, - haddockForHackage = mempty, --TODO: new flag + --haddockForHackage = mempty, --TODO: new flag + haddockForHackage = toFlag elabHaddockForHackage, haddockForeignLibs = toFlag elabHaddockForeignLibs, haddockExecutables = toFlag elabHaddockExecutables, haddockTestSuites = toFlag elabHaddockTestSuites, diff --git a/cabal-install/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install/Distribution/Client/ProjectPlanning/Types.hs index dab5082524e..23ef866d91f 100644 --- a/cabal-install/Distribution/Client/ProjectPlanning/Types.hs +++ b/cabal-install/Distribution/Client/ProjectPlanning/Types.hs @@ -80,6 +80,7 @@ import Distribution.ModuleName (ModuleName) import Distribution.Simple.LocalBuildInfo (ComponentName(..)) import qualified Distribution.Simple.InstallDirs as InstallDirs import Distribution.Simple.InstallDirs (PathTemplate) +import Distribution.Simple.Setup (HaddockTarget) import Distribution.Version import qualified Distribution.Solver.Types.ComponentDeps as CD @@ -258,6 +259,7 @@ data ElaboratedConfiguredPackage elabHaddockHtml :: Bool, elabHaddockHtmlLocation :: Maybe String, elabHaddockForeignLibs :: Bool, + elabHaddockForHackage :: HaddockTarget, elabHaddockExecutables :: Bool, elabHaddockTestSuites :: Bool, elabHaddockBenchmarks :: Bool, @@ -347,6 +349,7 @@ instance IsNode ElaboratedConfiguredPackage where nodeNeighbors = elabOrderDependencies instance Binary ElaboratedConfiguredPackage +instance Binary HaddockTarget data ElaboratedPackageOrComponent = ElabPackage ElaboratedPackage diff --git a/cabal-install/Distribution/Client/Setup.hs b/cabal-install/Distribution/Client/Setup.hs index edaffc8bc5e..04f24767ce9 100644 --- a/cabal-install/Distribution/Client/Setup.hs +++ b/cabal-install/Distribution/Client/Setup.hs @@ -1586,7 +1586,7 @@ haddockOptions showOrParseArgs , name `elem` ["hoogle", "html", "html-location" ,"executables", "tests", "benchmarks", "all", "internal", "css" ,"hyperlink-source", "hscolour-css" - ,"contents-location"] + ,"contents-location", "for-hackage"] ] where fmapOptFlags :: (OptFlags -> OptFlags) -> OptDescr a -> OptDescr a From 4f19f7d712360dd1fba24232ac708536c3a541c6 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Wed, 3 May 2017 18:15:24 +0200 Subject: [PATCH 2/9] Remove old commented placeholder --- cabal-install/Distribution/Client/ProjectPlanning.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/cabal-install/Distribution/Client/ProjectPlanning.hs b/cabal-install/Distribution/Client/ProjectPlanning.hs index 4ae5a45a5b8..203918c9105 100644 --- a/cabal-install/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/Distribution/Client/ProjectPlanning.hs @@ -3181,7 +3181,6 @@ setupHsHaddockFlags (ElaboratedConfiguredPackage{..}) _ verbosity builddir = haddockHoogle = toFlag elabHaddockHoogle, haddockHtml = toFlag elabHaddockHtml, haddockHtmlLocation = maybe mempty toFlag elabHaddockHtmlLocation, - --haddockForHackage = mempty, --TODO: new flag haddockForHackage = toFlag elabHaddockForHackage, haddockForeignLibs = toFlag elabHaddockForeignLibs, haddockExecutables = toFlag elabHaddockExecutables, From 38d057b12be00b3a897924dfb82bdb9fa33950d5 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Wed, 3 May 2017 20:30:17 +0200 Subject: [PATCH 3/9] Move `instance Binary HaddockTarget` to module of class --- Cabal/Distribution/Simple/Setup.hs | 2 ++ cabal-install/Distribution/Client/ProjectConfig/Types.hs | 1 - cabal-install/Distribution/Client/ProjectPlanning/Types.hs | 1 - 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cabal/Distribution/Simple/Setup.hs b/Cabal/Distribution/Simple/Setup.hs index 60f104eb0cb..1b04bd9d6fd 100644 --- a/Cabal/Distribution/Simple/Setup.hs +++ b/Cabal/Distribution/Simple/Setup.hs @@ -1405,6 +1405,8 @@ hscolourCommand = CommandUI -- documentation in @/doc/html/-docs@. data HaddockTarget = ForHackage | ForDevelopment deriving (Eq, Show, Generic) +instance Binary HaddockTarget + data HaddockFlags = HaddockFlags { haddockProgramPaths :: [(String, FilePath)], haddockProgramArgs :: [(String, [String])], diff --git a/cabal-install/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/Distribution/Client/ProjectConfig/Types.hs index 5a49768e30e..d8634da36c8 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Types.hs @@ -271,7 +271,6 @@ instance Binary ProjectConfigBuildOnly instance Binary ProjectConfigShared instance Binary ProjectConfigProvenance instance Binary PackageConfig -instance Binary HaddockTarget -- | Newtype wrapper for 'Map' that provides a 'Monoid' instance that takes diff --git a/cabal-install/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install/Distribution/Client/ProjectPlanning/Types.hs index 23ef866d91f..8657b7c065d 100644 --- a/cabal-install/Distribution/Client/ProjectPlanning/Types.hs +++ b/cabal-install/Distribution/Client/ProjectPlanning/Types.hs @@ -349,7 +349,6 @@ instance IsNode ElaboratedConfiguredPackage where nodeNeighbors = elabOrderDependencies instance Binary ElaboratedConfiguredPackage -instance Binary HaddockTarget data ElaboratedPackageOrComponent = ElabPackage ElaboratedPackage From cde8779c373cb0b3a6cd3072b7fc35a1be2eaaf0 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Fri, 5 May 2017 12:53:34 +0200 Subject: [PATCH 4/9] Add "for-hackage" flag to legacyPackageConfigFieldDescrs --- cabal-install/Distribution/Client/ProjectConfig/Legacy.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs index 39376c5e986..448fdf36a4b 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs @@ -958,7 +958,7 @@ legacyPackageConfigFieldDescrs = , "foreign-libraries" , "executables", "tests", "benchmarks", "all", "internal", "css" , "hyperlink-source", "hscolour-css" - , "contents-location", "keep-temp-files" + , "contents-location", "keep-temp-files", "for-hackage" ] . commandOptionsToFields ) (haddockOptions ParseArgs) From 73665343727f9c67006be7db52e563f88962afcb Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Fri, 5 May 2017 13:00:29 +0200 Subject: [PATCH 5/9] Move ForHackage to the end in PackageConfig --- cabal-install/Distribution/Client/ProjectConfig/Types.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cabal-install/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/Distribution/Client/ProjectConfig/Types.hs index d8634da36c8..fd71ef5ac28 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Types.hs @@ -254,7 +254,6 @@ data PackageConfig packageConfigHaddockHtml :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockHtmlLocation :: Flag String, --TODO: [required eventually] use this packageConfigHaddockForeignLibs :: Flag Bool, --TODO: [required eventually] use this - packageConfigHaddockForHackage :: Flag HaddockTarget, packageConfigHaddockExecutables :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockTestSuites :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockBenchmarks :: Flag Bool, --TODO: [required eventually] use this @@ -262,7 +261,8 @@ data PackageConfig packageConfigHaddockCss :: Flag FilePath, --TODO: [required eventually] use this packageConfigHaddockHscolour :: Flag Bool, --TODO: [required eventually] use this packageConfigHaddockHscolourCss :: Flag FilePath, --TODO: [required eventually] use this - packageConfigHaddockContents :: Flag PathTemplate --TODO: [required eventually] use this + packageConfigHaddockContents :: Flag PathTemplate, --TODO: [required eventually] use this + packageConfigHaddockForHackage :: Flag HaddockTarget } deriving (Eq, Show, Generic) From ff0e66a523ab1be5336b09240b07deced3ec0100 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Fri, 5 May 2017 13:03:36 +0200 Subject: [PATCH 6/9] Add for-hackage to unit-tests --- .../Distribution/Client/ProjectConfig.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 9d2c275f487..29dc99b73d4 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -228,7 +228,7 @@ prop_roundtrip_printparse_specific config = ---------------------------- --- Individual Parser tests +-- Individual Parser tests -- prop_parsePackageLocationTokenQ :: PackageLocationString -> Bool @@ -389,7 +389,7 @@ instance Arbitrary ProjectConfigShared where postShrink_Constraints = map (\uc -> (uc, projectConfigConstraintSource)) projectConfigConstraintSource :: ConstraintSource -projectConfigConstraintSource = +projectConfigConstraintSource = ConstraintSourceProjectConfig "TODO" instance Arbitrary ProjectConfigProvenance where @@ -432,6 +432,7 @@ instance Arbitrary PackageConfig where <*> arbitrary <*> arbitraryFlag arbitraryShortToken <*> arbitrary + <*> arbitrary where arbitraryProgramName :: Gen String arbitraryProgramName = @@ -447,7 +448,7 @@ instance Arbitrary PackageConfig where x25 x26 x27 x28 x29 x30 x31 x32 x33 x33_1 x34 x35 x36 x37 x38 x39 - x40) = + x40 x41) = [ PackageConfig (postShrink_Paths x00') (postShrink_Args x01') x02' x03' x04' @@ -462,7 +463,7 @@ instance Arbitrary PackageConfig where x30' x31' x32' x33' x33_1' x34' x35' x36' (fmap getNonEmpty x37') x38' (fmap getNonEmpty x39') - x40' + x40' x41' | (((x00', x01', x02', x03', x04'), (x05', x06', x07', x08', x09'), (x10', x11', x12', x13', x14'), @@ -471,7 +472,7 @@ instance Arbitrary PackageConfig where (x25', x26', x27', x28', x29'), (x30', x31', x32', (x33', x33_1'), x34'), (x35', x36', x37', x38', x39'), - (x40'))) + (x40', x41'))) <- shrink (((preShrink_Paths x00, preShrink_Args x01, x02, x03, x04), (x05, x06, x07, x08, x09), @@ -484,7 +485,7 @@ instance Arbitrary PackageConfig where (x25, x26, x27, x28, x29), (x30, x31, x32, (x33, x33_1), x34), (x35, x36, fmap NonEmpty x37, x38, fmap NonEmpty x39), - (x40))) + (x40, x41))) ] where preShrink_Paths = Map.map NonEmpty @@ -500,6 +501,8 @@ instance Arbitrary PackageConfig where . Map.map (map getNonEmpty . getNonEmpty) . Map.mapKeys getNoShrink +instance Arbitrary HaddockTarget where + arbitrary = elements [ForDevelopment, ForHackage] instance Arbitrary SourceRepo where arbitrary = (SourceRepo RepoThis From fa0d26e38eb42648970285618fb6789151678295 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Tue, 9 May 2017 01:07:11 +0200 Subject: [PATCH 7/9] Change arbitrary instance of HaddockTarget --- .../tests/UnitTests/Distribution/Client/ProjectConfig.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 166e6745dd0..43557c3d950 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -503,7 +503,7 @@ instance Arbitrary PackageConfig where . Map.mapKeys getNoShrink instance Arbitrary HaddockTarget where - arbitrary = elements [ForDevelopment, ForHackage] + arbitrary = elements [ForHackage] instance Arbitrary SourceRepo where arbitrary = (SourceRepo RepoThis From 570c65bbe2bbca84b75f71a7e725dfaa6b862b88 Mon Sep 17 00:00:00 2001 From: Bitrauser Date: Tue, 9 May 2017 01:18:51 +0200 Subject: [PATCH 8/9] Change default Flag of haddockForHackage to `NoFlag` --- Cabal/Distribution/Simple/Setup.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cabal/Distribution/Simple/Setup.hs b/Cabal/Distribution/Simple/Setup.hs index 81f22cd8e1f..3f934f406ce 100644 --- a/Cabal/Distribution/Simple/Setup.hs +++ b/Cabal/Distribution/Simple/Setup.hs @@ -1499,7 +1499,7 @@ defaultHaddockFlags = HaddockFlags { haddockHoogle = Flag False, haddockHtml = Flag False, haddockHtmlLocation = NoFlag, - haddockForHackage = Flag ForDevelopment, + haddockForHackage = NoFlag, haddockExecutables = Flag False, haddockTestSuites = Flag False, haddockBenchmarks = Flag False, From a387779104ffaef9bd047b07786394d65d266a79 Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Mon, 8 May 2017 22:06:11 -0400 Subject: [PATCH 9/9] Fix for-hackage rendering to distinguish NoFlag and default case. This commit fixes one instances of a general bug where noFlag command line flags do not translate correctly when converted into the field description format (and in fact, cannot be converted correctly.) The bug goes something like this: 1. A noArg command line parser translates into a "choice" command line parser, for which there is only one choice (the flag that would be set when you toggle it on.) 2. Choice command line parsers get translated into the field format by having a rendering for each defined choice, and then default to empty (omit the field entirely) if no choices apply. 3. This means that NoFlag and the "default choice" (if you hadn't specified the flag at all) render identically, because there is never a choice for the default choice in the no arg field. In the interest of getting this to work, I manually made for-hackage work correctly, but there is probably a way to refactor this into a more universal fix. CC @dcoutts Signed-off-by: Edward Z. Yang --- Cabal/Distribution/Simple/Setup.hs | 7 +++++++ cabal-install/Distribution/Client/ProjectConfig/Legacy.hs | 8 +++++++- .../tests/UnitTests/Distribution/Client/ProjectConfig.hs | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Cabal/Distribution/Simple/Setup.hs b/Cabal/Distribution/Simple/Setup.hs index 8dce70e0755..456a6f14b43 100644 --- a/Cabal/Distribution/Simple/Setup.hs +++ b/Cabal/Distribution/Simple/Setup.hs @@ -1480,6 +1480,13 @@ data HaddockTarget = ForHackage | ForDevelopment deriving (Eq, Show, Generic) instance Binary HaddockTarget +instance Text HaddockTarget where + disp ForHackage = Disp.text "for-hackage" + disp ForDevelopment = Disp.text "for-development" + + parse = Parse.choice [ Parse.string "for-hackage" >> return ForHackage + , Parse.string "for-development" >> return ForDevelopment] + data HaddockFlags = HaddockFlags { haddockProgramPaths :: [(String, FilePath)], haddockProgramArgs :: [(String, [String])], diff --git a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs index 28ca6e69338..d9465852a27 100644 --- a/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/Distribution/Client/ProjectConfig/Legacy.hs @@ -953,12 +953,18 @@ legacyPackageConfigFieldDescrs = (\flags conf -> conf { legacyHaddockFlags = flags }) . mapFieldNames ("haddock-"++) + . addFields + [ simpleField "for-hackage" + -- TODO: turn this into a library function + (fromFlagOrDefault Disp.empty . fmap disp) (Parse.option mempty (fmap toFlag parse)) + haddockForHackage (\v conf -> conf { haddockForHackage = v }) + ] . filterFields [ "hoogle", "html", "html-location" , "foreign-libraries" , "executables", "tests", "benchmarks", "all", "internal", "css" , "hyperlink-source", "hscolour-css" - , "contents-location", "keep-temp-files", "for-hackage" + , "contents-location", "keep-temp-files" ] . commandOptionsToFields ) (haddockOptions ParseArgs) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 1b4406f7caf..7f25acd14a2 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -503,7 +503,7 @@ instance Arbitrary PackageConfig where . Map.mapKeys getNoShrink instance Arbitrary HaddockTarget where - arbitrary = elements [ForHackage] + arbitrary = elements [ForHackage, ForDevelopment] instance Arbitrary SourceRepo where arbitrary = (SourceRepo RepoThis