Skip to content
Snippets Groups Projects
Commit ff1e90cc authored by Simon Marlow's avatar Simon Marlow Committed by Ian Lynagh
Browse files

Omit -osuf/-odir -hisuf/-hidir and -stubdir from the flag checker

The reasoning is that GHC will only skip recompilation if it has found
a valid up-to-date object file and .hi file, so there is no need to
also check that these flags have not changed, and indeed there are
valid reasons to want to change them.
parent 8bafc223
No related branches found
No related tags found
No related merge requests found
...@@ -40,12 +40,8 @@ fingerprintDynFlags DynFlags{..} this_mod nameio = ...@@ -40,12 +40,8 @@ fingerprintDynFlags DynFlags{..} this_mod nameio =
cpp = (map normalise includePaths, sOpt_P settings) cpp = (map normalise includePaths, sOpt_P settings)
-- normalise: eliminate spurious differences due to "./foo" vs "foo" -- normalise: eliminate spurious differences due to "./foo" vs "foo"
-- -i, -osuf, -hcsuf, -hisuf, -odir, -hidir, -stubdir, -o, -ohi -- Note [path flags and recompilation]
paths = (map normalise importPaths, paths = [ hcSuf ]
[ objectSuf, hcSuf, hiSuf ],
[ objectDir, hiDir, stubDir, outputHi ])
-- NB. not outputFile, we don't want "ghc --make M -o <file>"
-- to force recompilation when <file> changes.
-- -fprof-auto etc. -- -fprof-auto etc.
prof = if opt_SccProfilingOn then fromEnum profAuto else 0 prof = if opt_SccProfilingOn then fromEnum profAuto else 0
...@@ -53,3 +49,33 @@ fingerprintDynFlags DynFlags{..} this_mod nameio = ...@@ -53,3 +49,33 @@ fingerprintDynFlags DynFlags{..} this_mod nameio =
in -- pprTrace "flags" (ppr (mainis, safeHs, lang, cpp, paths)) $ in -- pprTrace "flags" (ppr (mainis, safeHs, lang, cpp, paths)) $
computeFingerprint nameio (mainis, safeHs, lang, cpp, paths, prof) computeFingerprint nameio (mainis, safeHs, lang, cpp, paths, prof)
{- Note [path flags and recompilation]
There are several flags that we deliberately omit from the
recompilation check; here we explain why.
-osuf, -odir, -hisuf, -hidir
If GHC decides that it does not need to recompile, then
it must have found an up-to-date .hi file and .o file.
There is no point recording these flags - the user must
have passed the correct ones. Indeed, the user may
have compiled the source file in one-shot mode using
-o to specify the .o file, and then loaded it in GHCi
using -odir.
-stubdir
We omit this one because it is automatically set by -outputdir, and
we don't want changes in -outputdir to automatically trigger
recompilation. This could be wrong, but only in very rare cases.
-i (importPaths)
For the same reason as -osuf etc. above: if GHC decides not to
recompile, then it must have already checked all the .hi files on
which the current module depends, so it must have found them
successfully. It is occasionally useful to be able to cd to a
different directory and use -i flags to enable GHC to find the .hi
files; we don't want this to force recompilation.
The only path-related flag left is -hcsuf.
-}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment