Skip to content

Commit 0a2b46e

Browse files
committed
cabal-install: call Cabal in-library
This commit modifies the SetupWrapper mechanism, adding a new way of building a package: directly calling Cabal library functions (e.g. 'build', 'configure' etc). This currently requires a bit of GADT trickery to accomodate the fact that configure returns a LocalBuildInfo which must then be passed to subsequent phases, while with the old Setup interface everything returns IO () and communication is done through the filesystem (the local build info file). To handle 'build-type: Hooks', this commit introduces the hooks-exe package, which contains: - the hooks-exe library, used to compile a set of SetupHooks into an external executable, - the hooks-cli library, which is used by cabal-install to communicate with an external hooks executable. This package depends on the new `CommunicationHandle` functionality from haskell/process#308.
1 parent 575acc9 commit 0a2b46e

66 files changed

Lines changed: 3073 additions & 1190 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cabal/src/Distribution/Simple.hs

Lines changed: 62 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,15 @@ defaultMainWithSetupHooksArgs setupHooks verbHandles =
172172
, hscolourHook = setup_hscolourHook
173173
}
174174
where
175+
preBuildHook =
176+
case SetupHooks.preBuildComponentRules (SetupHooks.buildHooks setupHooks) of
177+
Nothing -> const $ return []
178+
Just pbcRules -> \pbci -> runPreBuildHooks verbHandles pbci pbcRules
179+
postBuildHook =
180+
case SetupHooks.postBuildComponentHook (SetupHooks.buildHooks setupHooks) of
181+
Nothing -> const $ return ()
182+
Just hk -> hk
183+
175184
setup_confHook
176185
:: (GenericPackageDescription, HookedBuildInfo)
177186
-> ConfigFlags
@@ -189,13 +198,14 @@ defaultMainWithSetupHooksArgs setupHooks verbHandles =
189198
-> BuildFlags
190199
-> IO ()
191200
setup_buildHook pkg_descr lbi hooks flags =
192-
build_setupHooks
193-
(SetupHooks.buildHooks setupHooks)
194-
verbHandles
195-
pkg_descr
196-
lbi
197-
flags
198-
(allSuffixHandlers hooks)
201+
void $
202+
build_setupHooks
203+
(preBuildHook, postBuildHook)
204+
verbHandles
205+
pkg_descr
206+
lbi
207+
flags
208+
(allSuffixHandlers hooks)
199209

200210
setup_copyHook
201211
:: PackageDescription
@@ -230,14 +240,15 @@ defaultMainWithSetupHooksArgs setupHooks verbHandles =
230240
-> [String]
231241
-> IO ()
232242
setup_replHook pkg_descr lbi hooks flags args =
233-
repl_setupHooks
234-
(SetupHooks.buildHooks setupHooks)
235-
verbHandles
236-
pkg_descr
237-
lbi
238-
flags
239-
(allSuffixHandlers hooks)
240-
args
243+
void $
244+
repl_setupHooks
245+
preBuildHook
246+
verbHandles
247+
pkg_descr
248+
lbi
249+
flags
250+
(allSuffixHandlers hooks)
251+
args
241252

242253
setup_haddockHook
243254
:: PackageDescription
@@ -246,13 +257,14 @@ defaultMainWithSetupHooksArgs setupHooks verbHandles =
246257
-> HaddockFlags
247258
-> IO ()
248259
setup_haddockHook pkg_descr lbi hooks flags =
249-
haddock_setupHooks
250-
(SetupHooks.buildHooks setupHooks)
251-
verbHandles
252-
pkg_descr
253-
lbi
254-
(allSuffixHandlers hooks)
255-
flags
260+
void $
261+
haddock_setupHooks
262+
preBuildHook
263+
verbHandles
264+
pkg_descr
265+
lbi
266+
(allSuffixHandlers hooks)
267+
flags
256268

257269
setup_hscolourHook
258270
:: PackageDescription
@@ -261,13 +273,14 @@ defaultMainWithSetupHooksArgs setupHooks verbHandles =
261273
-> HscolourFlags
262274
-> IO ()
263275
setup_hscolourHook pkg_descr lbi hooks flags =
264-
hscolour_setupHooks
265-
(SetupHooks.buildHooks setupHooks)
266-
verbHandles
267-
pkg_descr
268-
lbi
269-
(allSuffixHandlers hooks)
270-
flags
276+
void $
277+
hscolour_setupHooks
278+
preBuildHook
279+
verbHandles
280+
pkg_descr
281+
lbi
282+
(allSuffixHandlers hooks)
283+
flags
271284

272285
-- | A customizable version of 'defaultMain'.
273286
defaultMainWithHooks :: UserHooks -> IO ()
@@ -931,12 +944,13 @@ simpleUserHooksWithHandles verbHandles =
931944
, testHook = defaultTestHook verbHandles
932945
, benchHook = defaultBenchHook verbHandles
933946
, cleanHook = \p _ _ f -> clean verbHandles p f
934-
, hscolourHook = \p l h f -> hscolour_setupHooks SetupHooks.noBuildHooks verbHandles p l (allSuffixHandlers h) f
935-
, haddockHook = \p l h f -> haddock_setupHooks SetupHooks.noBuildHooks verbHandles p l (allSuffixHandlers h) f
947+
, hscolourHook = \p l h f -> void $ hscolour_setupHooks noBuildHooks verbHandles p l (allSuffixHandlers h) f
948+
, haddockHook = \p l h f -> void $ haddock_setupHooks noBuildHooks verbHandles p l (allSuffixHandlers h) f
936949
, regHook = defaultRegHook verbHandles
937950
, unregHook = \p l _ f -> unregisterWithHandles verbHandles p l f
938951
}
939952
where
953+
noBuildHooks = const (pure [])
940954
finalChecks _args flags pkg_descr lbi =
941955
checkForeignDeps pkg_descr lbi (modifyVerbosityFlags lessVerbose verbosity)
942956
where
@@ -1156,13 +1170,14 @@ defaultBuildHook
11561170
-> BuildFlags
11571171
-> IO ()
11581172
defaultBuildHook verbHandles pkg_descr localbuildinfo hooks flags =
1159-
build_setupHooks
1160-
SetupHooks.noBuildHooks
1161-
verbHandles
1162-
pkg_descr
1163-
localbuildinfo
1164-
flags
1165-
(allSuffixHandlers hooks)
1173+
void $
1174+
build_setupHooks
1175+
(const $ return [], const $ pure ())
1176+
verbHandles
1177+
pkg_descr
1178+
localbuildinfo
1179+
flags
1180+
(allSuffixHandlers hooks)
11661181

11671182
defaultReplHook
11681183
:: VerbosityHandles
@@ -1173,14 +1188,15 @@ defaultReplHook
11731188
-> [String]
11741189
-> IO ()
11751190
defaultReplHook verbHandles pkg_descr localbuildinfo hooks flags args =
1176-
repl_setupHooks
1177-
SetupHooks.noBuildHooks
1178-
verbHandles
1179-
pkg_descr
1180-
localbuildinfo
1181-
flags
1182-
(allSuffixHandlers hooks)
1183-
args
1191+
void $
1192+
repl_setupHooks
1193+
(const $ return [])
1194+
verbHandles
1195+
pkg_descr
1196+
localbuildinfo
1197+
flags
1198+
(allSuffixHandlers hooks)
1199+
args
11841200

11851201
defaultRegHook
11861202
:: VerbosityHandles

0 commit comments

Comments
 (0)