on master help sign in
Skip Haddocks when no modules present
commit670966d40cef3e57bf34fd87a357ffd12dacfdc4 authorMichael Snoyman <michael@snoyman.com> dateThu 11 Dec 2014, 23:23 (12 years ago) parent827c674
2 files changed+43−36
Stackage2/PackageDescription.hs+42−29 Stackage2/PerformBuild.hs+1−7
Stackage2/PackageDescription.hs+42−29
@@ -83,25 +83,30 @@ data SimpleDesc = SimpleDesc
8383 { sdPackages :: Map PackageName DepInfo
8484 , sdTools :: Map ExeName DepInfo
8585 , sdProvidedExes :: Set ExeName
86+ , sdModules :: Set Text
87+ -- ^ modules exported by the library
8688 }
8789 deriving (Show, Eq)
8890instance Monoid SimpleDesc where
89− mempty = SimpleDesc mempty mempty mempty
90− mappend (SimpleDesc a b c) (SimpleDesc x y z) = SimpleDesc
91− (unionWith (<>) a x)
92− (unionWith (<>) b y)
93− (c ++ z)
91+ mempty = SimpleDesc mempty mempty mempty mempty
92+ mappend (SimpleDesc a b c d) (SimpleDesc w x y z) = SimpleDesc
93+ (unionWith (<>) a w)
94+ (unionWith (<>) b x)
95+ (c ++ y)
96+ (d ++ z)
9497instance ToJSON SimpleDesc where
9598 toJSON SimpleDesc {..} = object
9699 [ "packages" .= Map.mapKeysWith const unPackageName sdPackages
97100 , "tools" .= Map.mapKeysWith const unExeName sdTools
98101 , "provided-exes" .= sdProvidedExes
102+ , "modules" .= sdModules
99103 ]
100104instance FromJSON SimpleDesc where
101105 parseJSON = withObject "SimpleDesc" $ \o -> do
102106 sdPackages <- Map.mapKeysWith const mkPackageName <$> (o .: "packages")
103107 sdTools <- Map.mapKeysWith const ExeName <$> (o .: "tools")
104108 sdProvidedExes <- o .: "provided-exes"
109+ sdModules <- o .: "modules"
105110 return SimpleDesc {..}
106111
107112-- | Convert a 'GenericPackageDescription' into a 'SimpleDesc' by following the
@@ -111,46 +116,54 @@ toSimpleDesc :: MonadThrow m
111116 -> GenericPackageDescription
112117 -> m SimpleDesc
113118toSimpleDesc cc gpd = execWriterT $ do
114− forM_ (condLibrary gpd) $ tellTree cc CompLibrary libBuildInfo
115− forM_ (condExecutables gpd) $ tellTree cc CompExecutable buildInfo . snd
119+ forM_ (condLibrary gpd) $ tellTree cc CompLibrary libBuildInfo getModules
120+ forM_ (condExecutables gpd) $ tellTree cc CompExecutable buildInfo noModules . snd
116121 tell mempty { sdProvidedExes = setFromList
117122 $ map (fromString . fst)
118123 $ condExecutables gpd
119124 }
120125 when (ccIncludeTests cc) $ forM_ (condTestSuites gpd)
121− $ tellTree cc CompTestSuite testBuildInfo . snd
126+ $ tellTree cc CompTestSuite testBuildInfo noModules . snd
122127 when (ccIncludeBenchmarks cc) $ forM_ (condBenchmarks gpd)
123− $ tellTree cc CompBenchmark benchmarkBuildInfo . snd
128+ $ tellTree cc CompBenchmark benchmarkBuildInfo noModules . snd
129+ where
130+ noModules = const mempty
131+ getModules = setFromList . map display . exposedModules
124132
125133-- | Convert a single CondTree to a 'SimpleDesc'.
126134tellTree :: (MonadWriter SimpleDesc m, MonadThrow m)
127135 => CheckCond
128136 -> Component
129137 -> (a -> BuildInfo)
138+ -> (a -> Set Text) -- ^ get module names
130139 -> CondTree ConfVar [Dependency] a
131140 -> m ()
132−tellTree cc component getBI (CondNode dat deps comps) = do
133− tell mempty
134− { sdPackages = unionsWith (<>) $ flip map deps
135− $ \(Dependency x y) -> singletonMap x DepInfo
136− { diComponents = singletonSet component
137− , diRange = simplifyVersionRange y
138− }
139− , sdTools = unionsWith (<>) $ flip map (buildTools $ getBI dat)
140− $ \(Dependency name range) -> singletonMap
141− -- In practice, cabal files refer to the exe name, not the
142− -- package name.
143− (ExeName $ unPackageName name)
144− DepInfo
141+tellTree cc component getBI getModules =
142+ loop
143+ where
144+ loop (CondNode dat deps comps) = do
145+ tell mempty
146+ { sdPackages = unionsWith (<>) $ flip map deps
147+ $ \(Dependency x y) -> singletonMap x DepInfo
145148 { diComponents = singletonSet component
146− , diRange = simplifyVersionRange range
149+ , diRange = simplifyVersionRange y
147150 }
148− }
149− forM_ comps $ \(cond, ontrue, onfalse) -> do
150− b <- checkCond cc cond
151− if b
152− then tellTree cc component getBI ontrue
153− else maybe (return ()) (tellTree cc component getBI) onfalse
151+ , sdTools = unionsWith (<>) $ flip map (buildTools $ getBI dat)
152+ $ \(Dependency name range) -> singletonMap
153+ -- In practice, cabal files refer to the exe name, not the
154+ -- package name.
155+ (ExeName $ unPackageName name)
156+ DepInfo
157+ { diComponents = singletonSet component
158+ , diRange = simplifyVersionRange range
159+ }
160+ , sdModules = getModules dat
161+ }
162+ forM_ comps $ \(cond, ontrue, onfalse) -> do
163+ b <- checkCond cc cond
164+ if b
165+ then loop ontrue
166+ else maybe (return ()) loop onfalse
154167
155168-- | Resolve a condition to a boolean based on the provided 'CheckCond'.
156169checkCond :: MonadThrow m => CheckCond -> Condition ConfVar -> m Bool
Stackage2/PerformBuild.hs+1−7
@@ -288,7 +288,7 @@ singleBuild pb@PerformBuild {..} SingleBuild {..} =
288288 -- on top of our successful results
289289 atomically $ putTMVar (piResult sbPackageInfo) True
290290
291− when (pcHaddocks /= Don'tBuild && hasLibrary (ppDesc $ piPlan sbPackageInfo)) $ do
291+ when (pcHaddocks /= Don'tBuild && not (null $ sdModules $ ppDesc $ piPlan sbPackageInfo)) $ do
292292 log' $ "Haddocks " ++ namever
293293 hfs <- readTVarIO sbHaddockFiles
294294 let hfsOpts = flip map (mapToList hfs) $ \(pkgVer, hf) -> concat
@@ -362,12 +362,6 @@ singleBuild pb@PerformBuild {..} SingleBuild {..} =
362362 Just bf -> bf
363363 Nothing -> BuildFailureException exc
364364
365−hasLibrary :: SimpleDesc -> Bool
366−hasLibrary sd =
367− any go (sdPackages sd) || any go (sdTools sd)
368− where
369− go = (CompLibrary `member`) . diComponents
370−
371365renameOrCopy :: FilePath -> FilePath -> IO ()
372366renameOrCopy src dest = rename src dest `catchIO` \_ -> copyDir src dest
373367