X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=libraries%2FMakefile;h=8d9bd710d50191bc98af67c98cf9fef4b0856aa5;hp=ba6d54772c804e800f31b26e4c5c63deadc2aa6c;hb=ae1d4548d997731878e8c1220fc996a79f47a3e3;hpb=cdf3453aa51c6387a6b8ea815a3d1745b1980d8d diff --git a/libraries/Makefile b/libraries/Makefile index ba6d547..8d9bd71 100644 --- a/libraries/Makefile +++ b/libraries/Makefile @@ -8,7 +8,7 @@ # To rebuild a particular library : # # make clean.library. -# make build.library. +# make make.library. # # or the following is equivalent: # @@ -18,11 +18,17 @@ # # darcs get http://darcs.haskell.org/packages/foo # [ -e foo/configure.ac ] && ( cd foo && autoreconf ) -# make build.library.foo +# make make.library.foo .PHONY: default_target -default_target: build +default_target: all + +# make doesn't give us an easy way to get the libraries built in +# dependency order the first time, but not rebuild base (for example) +# when we want to rebuild another library later. +# So for now we just don't do anything in parallel in here. +.NOTPARALLEL: # Ideally we'd just include something to give us variables # for paths and arguments to tools etc, and those set in mk/build.mk. @@ -72,6 +78,7 @@ ifeq "$(GhcLibsWithObjectIO)" "YES" SUBDIRS += $(wildcard ObjectIO) endif SUBDIRS += $(wildcard parallel) +SUBDIRS += $(wildcard ndp) endif # ----------------------------------------------------------------------------- @@ -110,6 +117,7 @@ subdirs: boot: $(BOOTSTRAP_STAMPS) ifBuildable/ifBuildable \ $(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/setup/Setup) \ + $(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/GNUmakefile) \ installPackage/installPackage # We build the Setup program in a setup subdirectory to stop it trying @@ -151,22 +159,25 @@ $(BOOTSTRAP_STAMPS): stamp/bootstrapping.%: all: build -ifneq "$(NO_HADDOCK_DOCS)" "YES" +ifeq "$(HADDOCK_DOCS)" "YES" all: doc endif .PHONY: rebuild.library.% $(foreach SUBDIR,$(SUBDIRS),rebuild.library.$(SUBDIR)):\ -rebuild.library.%: clean.library.% build.library.% +rebuild.library.%: clean.library.% make.library.% -build: $(foreach SUBDIR,$(SUBDIRS),build.library.$(SUBDIR)) +# NB. we're depending on make chasing dependencies from left to right here. +# This bit goes wrong with 'make -j'. +build: $(foreach SUBDIR,$(SUBDIRS),make.library.$(SUBDIR)) build: installPackage/installPackage configure: $(foreach SUBDIR,$(SUBDIRS), \ stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).$(SUBDIR)) .PHONY: build.library.% +.PHONY: make.library.% # We should depend on %/%.cabal here (and in other rules), but make # makes that difficult. @@ -175,6 +186,16 @@ configure: $(foreach SUBDIR,$(SUBDIRS), \ # default on Linux, on Windows it defaults to # "C:\\Program Files\\Common Files" +# We also set libsubdir differently on Windows and non-Windows, as on +# non-Windows the path we deduce is highre up than the path passed to +# the executable with the shell script on non-Windows. This should +# probably be tidied up so that we can always pass the same libsubdir. +ifeq "$(Windows)" "YES" +libsubdir = $$pkgid +else +libsubdir = $$compiler/lib/$$pkgid +endif + $(foreach SUBDIR,$(SUBDIRS), \ stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).$(SUBDIR)): \ stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).%: %/setup/Setup @@ -183,7 +204,7 @@ stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).%: %/setup/Setup $(CONFIGURE_OPTS) \ --prefix='$$topdir' \ --datadir='$$prefix/share' \ - --libsubdir='$$compiler/lib/$$pkgid' \ + --libsubdir='$(libsubdir)' \ --with-compiler=../../compiler/ghc-inplace$(dot_bat) \ --with-hc-pkg=../../utils/ghc-pkg/ghc-pkg-inplace$(dot_bat) \ --with-hsc2hs=../../utils/hsc2hs/hsc2hs-inplace$(dot_bat) \ @@ -199,19 +220,27 @@ stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).%: %/setup/Setup # This is particularly important for corelibs, where failure means the # build dies! +# Build the library using 'make' +$(foreach SUBDIR,$(SUBDIRS),make.library.$(SUBDIR)):\ +make.library.%: stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).% \ + %/GNUmakefile \ + %/setup/Setup ifBuildable/ifBuildable + ifBuildable/ifBuildable $* $(MAKE) + ifBuildable/ifBuildable $* setup/Setup register --inplace + +# Build the library using 'setup build' (not the default) $(foreach SUBDIR,$(SUBDIRS),build.library.$(SUBDIR)):\ build.library.%: stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).% \ %/setup/Setup ifBuildable/ifBuildable ifBuildable/ifBuildable $* setup/Setup build \ $(addprefix --ghc-option=,$(GhcLibHcOpts)) - ifBuildable/ifBuildable $* setup/Setup register --inplace -$(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/CabalMakefile):\ -%/CabalMakefile: stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).% \ +$(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/GNUmakefile):\ +%/GNUmakefile: stamp/configure.library.build$(CONFIGURE_STAMP_EXTRAS).% \ %/setup/Setup ifBuildable/ifBuildable - $(RM) $*/CabalMakefile - ifBuildable/ifBuildable $* setup/Setup makefile -f CabalMakefile \ - $(addprefix --ghc-option=,$(GhcLibHcOpts)) + $(RM) $*/GNUmakefile + cp Makefile.local $* + ifBuildable/ifBuildable $* setup/Setup makefile -f GNUmakefile .PHONY: doc @@ -249,7 +278,7 @@ endif ROOT=$(prefix)/share/ghc/doc/html/ install: $(foreach SUBDIR,$(SUBDIRS),install.library.$(SUBDIR)) -ifneq "$(NO_HADDOCK_DOCS)" "YES" +ifeq "$(HADDOCK_DOCS)" "YES" $(INSTALL_DIR) $(ROOT) $(INSTALL_DATA) index.html doc-index.html $(ROOT) $(INSTALL_SCRIPT) gen_contents_index $(ROOT) @@ -289,7 +318,6 @@ $(foreach SUBDIR,$(SUBDIRS),binary-dist.library.$(SUBDIR)): \ binary-dist.library.%: $(MKDIRHIER) $(BIN_DIST_LIBDIR)/$* ifBuildable/ifBuildable $* cp $*.cabal $(BIN_DIST_LIBDIR)/$* - ifBuildable/ifBuildable $* cp .setup-config $(BIN_DIST_LIBDIR)/$* ifBuildable/ifBuildable $* cp -a dist $(BIN_DIST_LIBDIR)/$* # Euch ifBuildable/ifBuildable $* cp -aL include $(BIN_DIST_LIBDIR)/$* || :