Ian, I think this patch or one related to it may have broken the expected behaviour.
Previously I could do: $ ghc -M Main.hs but now executing the above gives the error "You must specify at least one -dep-suffix". I can get the old behaviour by doing: $ ghc -M Main.hs -dep-suffix='' If the new behaviour is the expected one, then the userguide is now out of date. Cheers, David On 2 November 2012 16:38, Ian Lynagh <[email protected]> wrote: > Repository : ssh://darcs.haskell.org//srv/darcs/ghc > > On branch : master > > http://hackage.haskell.org/trac/ghc/changeset/af072fc35d8dbe7962e62700da052593e999c0ef > >>--------------------------------------------------------------- > > commit af072fc35d8dbe7962e62700da052593e999c0ef > Author: Ian Lynagh <[email protected]> > Date: Fri Nov 2 21:42:33 2012 +0000 > > Change how dependency generation works; fixes #7381 > > We now do the initial dependency generation for the vanilla way > regardless of what way flags and hisuf/osuf flags are given. This > makes it easier to generate the right dependency info in the end. > >>--------------------------------------------------------------- > > compiler/main/DriverMkDepend.hs | 41 ++++++++++++++++++++++---------------- > ghc.mk | 5 ++++ > ghc/ghc.mk | 2 +- > rules/build-dependencies.mk | 12 +---------- > 4 files changed, 31 insertions(+), 29 deletions(-) > > diff --git a/compiler/main/DriverMkDepend.hs b/compiler/main/DriverMkDepend.hs > index 953b2c4..7355e31 100644 > --- a/compiler/main/DriverMkDepend.hs > +++ b/compiler/main/DriverMkDepend.hs > @@ -51,7 +51,25 @@ import Data.Maybe ( isJust ) > doMkDependHS :: GhcMonad m => [FilePath] -> m () > doMkDependHS srcs = do > -- Initialisation > - dflags <- GHC.getSessionDynFlags > + dflags0 <- GHC.getSessionDynFlags > + > + -- We kludge things a bit for dependency generation. Rather than > + -- generating dependencies for each way separately, we generate > + -- them once and then duplicate them for each way's osuf/hisuf. > + -- We therefore do the initial dependency generation with an empty > + -- way and .o/.hi extensions, regardless of any flags that might > + -- be specified. > + let dflags = dflags0 { > + ways = [], > + buildTag = mkBuildTag [], > + hiSuf = "hi", > + objectSuf = "o" > + } > + _ <- GHC.setSessionDynFlags dflags > + > + when (null (depSuffixes dflags)) $ > + ghcError (ProgramError "You must specify at least one -dep-suffix") > + > files <- liftIO $ beginMkDependHS dflags > > -- Do the downsweep to find all the modules > @@ -263,24 +281,13 @@ writeDependency root hdl targets dep > ----------------------------- > insertSuffixes > :: FilePath -- Original filename; e.g. "foo.o" > - -> [String] -- Extra suffices e.g. ["x","y"] > - -> [FilePath] -- Zapped filenames e.g. ["foo.o", "foo.x_o", > "foo.y_o"] > + -> [String] -- Suffix prefixes e.g. ["x_", "y_"] > + -> [FilePath] -- Zapped filenames e.g. ["foo.x_o", "foo.y_o"] > -- Note that that the extra bit gets inserted *before* the old suffix > - -- We assume the old suffix contains no dots, so we can strip it > with removeSuffix > - > - -- NOTE: we used to have this comment > - -- In order to construct hi files with alternate suffixes, we > - -- now have to find the "basename" of the hi file. This is > - -- difficult because we can't just split the hi filename > - -- at the last dot - the hisuf might have dots in it. So we > - -- check whether the hi filename ends in hisuf, and if it > does, > - -- we strip off hisuf, otherwise we strip everything after > the > - -- last dot. > - -- But I'm not sure we care about hisufs with dots in them. > - -- Lots of other things will break first! > - > + -- We assume the old suffix contains no dots, so we know where to > + -- split it > insertSuffixes file_name extras > - = file_name : [ basename <.> (extra ++ "_" ++ suffix) | extra <- extras ] > + = [ basename <.> (extra ++ suffix) | extra <- extras ] > where > (basename, suffix) = case splitExtension file_name of > -- Drop the "." from the extension > diff --git a/ghc.mk b/ghc.mk > index c1544ad..6c0a29a 100644 > --- a/ghc.mk > +++ b/ghc.mk > @@ -138,6 +138,11 @@ ifeq "$(findstring v,$(GhcLibWays))" "" > $(error v is not in $$(GhcLibWays), and $$(DYNAMIC_BY_DEFAULT) is not YES) > endif > endif > +ifeq "$(GhcProfiled)" "YES" > +ifeq "$(findstring p,$(GhcLibWays))" "" > +$(error p is not in $$(GhcLibWays), and $$(GhcProfiled) is YES) > +endif > +endif > endif > > ifeq "$(phase)" "" > diff --git a/ghc/ghc.mk b/ghc/ghc.mk > index ac8ce66..809756e 100644 > --- a/ghc/ghc.mk > +++ b/ghc/ghc.mk > @@ -64,7 +64,7 @@ ghc_stage3_MORE_HC_OPTS += -threaded > endif > > ifeq "$(GhcProfiled)" "YES" > -ghc_stage2_MORE_HC_OPTS += -prof > +ghc_stage2_PROGRAM_WAY = p > endif > > ghc_stage1_PROG = ghc-stage1$(exeext) > diff --git a/rules/build-dependencies.mk b/rules/build-dependencies.mk > index 8442801..4a4f563 100644 > --- a/rules/build-dependencies.mk > +++ b/rules/build-dependencies.mk > @@ -22,18 +22,8 @@ $1_$2_depfile_c_asm = $$($1_$2_depfile_base).c_asm > > $1_$2_C_FILES_DEPS = $$(filter-out > $$($1_$2_C_FILES_NODEPS),$$($1_$2_C_FILES)) > > -$1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp > $$(foreach way,$$(filter-out v,$$($1_$2_WAYS)),-dep-suffix $$(way)) > +$1_$2_MKDEPENDHS_FLAGS = -dep-makefile $$($1_$2_depfile_haskell).tmp > $$(foreach way,$$($1_$2_WAYS),-dep-suffix "$$(patsubst > %o,%,$$($$(way)_osuf))") > $1_$2_MKDEPENDHS_FLAGS += -include-pkg-deps > -# Setting hisuf/osuf is a kludge. If DYNAMIC_BY_DEFAULT is on, dyn is > -# the first way, and p is another way, then without this kludge we run > -# ghc -M -hisuf dyn_hi -osuf dyn_o -dep-suffix dyn -dep-suffix p > -# which means we get dependencies for .dyn_hi/.dyn_o and .p_dyn_hi/.p_dyn_o > -# rather than .dyn_hi/.dyn_o and .p_hi/.p_o. > -# With the kludge we also get .hi/.o dependencies that we don't need, but > -# they don't do any harm. > -# We also specify -static, as otherwise we end up with some dependencies > -# on .dyn_dyn_hi files > -$1_$2_MKDEPENDHS_FLAGS += -static -hisuf hi -osuf o > > ifneq "$$(NO_GENERATED_MAKEFILE_RULES)" "YES" > > > > > _______________________________________________ > Cvs-ghc mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/cvs-ghc _______________________________________________ ghc-devs mailing list [email protected] http://www.haskell.org/mailman/listinfo/ghc-devs
