Skip to content

Commit

Permalink
Support --ipid flag for explicitly passing IPID in.
Browse files Browse the repository at this point in the history
This flag (through a terrible hack) also supports install
directory variables (e.g. $pkgver).  Depends on PR haskell#2752.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
  • Loading branch information
ezyang committed Aug 25, 2015
1 parent 621bd3d commit 77f55e6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 22 deletions.
52 changes: 31 additions & 21 deletions Cabal/Distribution/Simple/Configure.hs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ import Distribution.Version
( Version(..), anyVersion, orLaterVersion, withinRange, isAnyVersion )
import Distribution.Verbosity
( Verbosity, lessVerbose, silent )
import Distribution.Simple.InstallDirs
( fromPathTemplate, substPathTemplate, toPathTemplate, packageTemplateEnv )

import qualified Distribution.Simple.GHC as GHC
import qualified Distribution.Simple.GHCJS as GHCJS
Expand Down Expand Up @@ -621,7 +623,7 @@ configure (pkg_descr0, pbi) cfg
case mkComponentsGraph pkg_descr internalPkgDeps of
Left componentCycle -> reportComponentCycle componentCycle
Right components ->
mkComponentsLocalBuildInfo comp packageDependsIndex pkg_descr
mkComponentsLocalBuildInfo cfg comp packageDependsIndex pkg_descr
internalPkgDeps externalPkgDeps holeDeps
(Map.fromList hole_insts)
components (configConfigurationsFlags cfg)
Expand Down Expand Up @@ -1295,7 +1297,8 @@ reportComponentCycle cnames =
[ "'" ++ showComponentName cname ++ "'"
| cname <- cnames ++ [head cnames] ]

mkComponentsLocalBuildInfo :: Compiler
mkComponentsLocalBuildInfo :: ConfigFlags
-> Compiler
-> InstalledPackageIndex
-> PackageDescription
-> [PackageId] -- internal package deps
Expand All @@ -1306,7 +1309,7 @@ mkComponentsLocalBuildInfo :: Compiler
-> FlagAssignment
-> IO [(ComponentName, ComponentLocalBuildInfo,
[ComponentName])]
mkComponentsLocalBuildInfo comp installedPackages pkg_descr
mkComponentsLocalBuildInfo cfg comp installedPackages pkg_descr
internalPkgDeps externalPkgDeps holePkgDeps hole_insts
graph flagAssignment =
sequence
Expand Down Expand Up @@ -1344,27 +1347,34 @@ mkComponentsLocalBuildInfo comp installedPackages pkg_descr
version_hash = packageKeyLibraryName (package pkg_descr) pkg_key

-- Calculate IPID
ipid <- do
-- sdist produces too much noise, so silent
(ordfiles, exefiles) <-
listPackageSources silent pkg_descr knownSuffixHandlers
let files = sort $ ordfiles ++ exefiles
fileHashes <-
ipid <-
case configIPID cfg of
Flag ipid ->
-- Hack to reuse install dirs machinery
let env = packageTemplateEnv (package pkg_descr) version_hash
in return . InstalledPackageId
$ fromPathTemplate (substPathTemplate env (toPathTemplate ipid))
_ -> do
-- sdist produces too much noise, so silent
(ordfiles, exefiles) <-
listPackageSources silent pkg_descr knownSuffixHandlers
let files = sort $ ordfiles ++ exefiles
fileHashes <-
#if __GLASGOW_HASKELL__ >= 710
mapM getFileHash files
mapM getFileHash files
#else
mapM (\x -> readFile x >>= (return . fingerprintString)) files
mapM (\x -> readFile x >>= (return . fingerprintString)) files
#endif
-- show is found to be faster than intercalate and then replacement of
-- special character used in intercalating. We cannot simply hash by
-- doubly concating list, as it just flatten out the nested list, so
-- different sources can produce same hash
return $ InstalledPackageId $ (display (package pkg_descr)) ++ "-" ++
(hashToBase62 $
(show $ map Installed.installedPackageId externalPkgs)
++ show (zip files $
map (flip showHex "" . fpToInteger) fileHashes)
++ show flagAssignment)
-- show is found to be faster than intercalate and then replacement of
-- special character used in intercalating. We cannot simply hash by
-- doubly concating list, as it just flatten out the nested list, so
-- different sources can produce same hash
return $ InstalledPackageId $ (display (package pkg_descr)) ++ "-" ++
(hashToBase62 $
(show $ map Installed.installedPackageId externalPkgs)
++ show (zip files $
map (flip showHex "" . fpToInteger) fileHashes)
++ show flagAssignment)

return LibComponentLocalBuildInfo {
componentPackageDeps = cpds,
Expand Down
8 changes: 8 additions & 0 deletions Cabal/Distribution/Simple/Setup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ data ConfigFlags = ConfigFlags {
configScratchDir :: Flag FilePath,
configExtraLibDirs :: [FilePath], -- ^ path to search for extra libraries
configExtraIncludeDirs :: [FilePath], -- ^ path to search for header files
configIPID :: Flag String, -- ^ explicit IPID to be used

configDistPref :: Flag FilePath, -- ^"dist" prefix
configVerbosity :: Flag Verbosity, -- ^verbosity level
Expand Down Expand Up @@ -573,6 +574,11 @@ configureOptions showOrParseArgs =
configExtraIncludeDirs (\v flags -> flags {configExtraIncludeDirs = v})
(reqArg' "PATH" (\x -> [x]) id)

,option "" ["ipid"]
"Installed package ID to compile this package as"
configIPID (\v flags -> flags {configIPID = v})
(reqArgFlag "IPID")

,option "" ["extra-lib-dirs"]
"A list of directories to search for external libraries"
configExtraLibDirs (\v flags -> flags {configExtraLibDirs = v})
Expand Down Expand Up @@ -795,6 +801,7 @@ instance Monoid ConfigFlags where
configDependencies = mempty,
configInstantiateWith = mempty,
configExtraIncludeDirs = mempty,
configIPID = mempty,
configConfigurationsFlags = mempty,
configTests = mempty,
configCoverage = mempty,
Expand Down Expand Up @@ -840,6 +847,7 @@ instance Monoid ConfigFlags where
configDependencies = combine configDependencies,
configInstantiateWith = combine configInstantiateWith,
configExtraIncludeDirs = combine configExtraIncludeDirs,
configIPID = combine configIPID,
configConfigurationsFlags = combine configConfigurationsFlags,
configTests = combine configTests,
configCoverage = combine configCoverage,
Expand Down
1 change: 1 addition & 0 deletions cabal-install/Distribution/Client/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ instance Monoid SavedConfig where
configExtraLibDirs = lastNonEmpty configExtraLibDirs,
-- TODO: NubListify
configExtraIncludeDirs = lastNonEmpty configExtraIncludeDirs,
configIPID = combine configIPID,
configDistPref = combine configDistPref,
configVerbosity = combine configVerbosity,
configUserInstall = combine configUserInstall,
Expand Down
3 changes: 2 additions & 1 deletion cabal-install/Distribution/Client/Setup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,8 @@ filterConfigureFlags flags cabalLibVersion

-- Cabal < 1.23 doesn't know about '--profiling-detail'.
flags_1_22_0 = flags_latest { configProfDetail = NoFlag
, configProfLibDetail = NoFlag }
, configProfLibDetail = NoFlag
, configIPID = NoFlag }

-- Cabal < 1.22 doesn't know about '--disable-debug-info'.
flags_1_21_0 = flags_1_22_0 { configDebugInfo = NoFlag }
Expand Down

0 comments on commit 77f55e6

Please sign in to comment.