[commit: ghc] wip/nfs-locking: Refactor programPath (44f7374)
git at git.haskell.org
git at git.haskell.org
Fri Oct 27 00:43:50 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/nfs-locking
Link : http://ghc.haskell.org/trac/ghc/changeset/44f7374237aa86baf551860bb943b1707fc286a8/ghc
>---------------------------------------------------------------
commit 44f7374237aa86baf551860bb943b1707fc286a8
Author: Andrey Mokhov <andrey.mokhov at gmail.com>
Date: Sat Oct 29 03:53:46 2016 +0100
Refactor programPath
>---------------------------------------------------------------
44f7374237aa86baf551860bb943b1707fc286a8
src/GHC.hs | 67 ++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 41 insertions(+), 26 deletions(-)
diff --git a/src/GHC.hs b/src/GHC.hs
index 91987c6..6c1e147 100644
--- a/src/GHC.hs
+++ b/src/GHC.hs
@@ -96,31 +96,46 @@ stageDirectory :: Stage -> FilePath
stageDirectory = stageString
-- TODO: move to buildRootPath, see #113
--- TODO: simplify, add programInplaceLibPath
--- | The relative path to the program executable
+-- | The 'FilePath' to a program executable in a given 'Context'.
programPath :: Context -> Maybe FilePath
-programPath Context {..}
- | package == ghc = Just . inplaceProgram $ "ghc-stage" ++ show (fromEnum stage + 1)
- | package `elem` [mkUserGuidePart] =
- case stage of Stage0 -> Just . inplaceProgram $ pkgNameString package
- _ -> Nothing
- | package `elem` [checkApiAnnotations, ghcTags, haddock] =
- case stage of Stage2 -> Just . inplaceProgram $ pkgNameString package
- _ -> Nothing
- | package `elem` [touchy, unlit] = case stage of
- Stage0 -> Just $ "inplace/lib/bin" -/- pkgNameString package <.> exe
- _ -> Nothing
- | package == hpcBin = case stage of
- Stage1 -> Just $ inplaceProgram "hpc"
- _ -> Nothing
- | package == runGhc = case stage of
- Stage1 -> Just $ inplaceProgram "runhaskell"
- _ -> Nothing
- | isProgram package = case stage of
- Stage0 -> Just . inplaceProgram $ pkgNameString package
- _ -> Just . installProgram $ pkgNameString package
- | otherwise = Nothing
+programPath Context {..} = lookup (stage, package) exes
where
- inplaceProgram name = programInplacePath -/- name <.> exe
- installProgram name = pkgPath package -/- stageDirectory stage
- -/- "build/tmp" -/- name <.> exe
+ exes = [ inplace2 checkApiAnnotations
+ , install1 compareSizes
+ , inplace0 deriveConstants
+ , inplace0 dllSplit
+ , inplace0 genapply
+ , inplace0 genprimopcode
+ , inplace0 ghc `setFile` "ghc-stage1"
+ , inplace1 ghc `setFile` "ghc-stage2"
+ , install0 ghcCabal
+ , inplace1 ghcCabal
+ , inplace0 ghcPkg
+ , install1 ghcPkg
+ , inplace2 ghcTags
+ , inplace2 haddock
+ , inplace0 hp2ps
+ , inplace1 hpcBin `setFile` "hpc"
+ , inplace0 hsc2hs
+ , install1 hsc2hs
+ , inplace0 mkUserGuidePart
+ , inplace1 runGhc `setFile` "runhaskell"
+ , inplace0 touchy `setDir` "inplace/lib/bin"
+ , inplace0 unlit `setDir` "inplace/lib/bin" ]
+ inplace pkg = programInplacePath -/- pkgNameString pkg <.> exe
+ inplace0 pkg = ((Stage0, pkg), inplace pkg)
+ inplace1 pkg = ((Stage1, pkg), inplace pkg)
+ inplace2 pkg = ((Stage2, pkg), inplace pkg)
+ install stage pkg = pkgPath package -/- stageDirectory stage -/- "build"
+ -/- pkgNameString pkg <.> exe
+ install0 pkg = ((Stage0, pkg), install Stage0 pkg)
+ install1 pkg = ((Stage1, pkg), install Stage1 pkg)
+ setFile ((stage, pkg), x) y = ((stage, pkg), takeDirectory x -/- y <.> exe)
+ setDir ((stage, pkg), x) y = ((stage, pkg), y -/- takeFileName x)
+
+ -- | isProgram package = case stage of
+ -- Stage0 -> Just . inplaceProgram $ pkgNameString package
+ -- _ -> Just . installProgram $ pkgNameString package
+ -- | otherwise = Nothing
+ -- where
+ -- inplaceProgram name = programInplacePath -/- name <.> exe
More information about the ghc-commits
mailing list