diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 81 |
1 files changed, 0 insertions, 81 deletions
@@ -18,87 +18,6 @@ show: else -# The problem we need to solve is as follows. -# -# GNU make supports included Makefiles, and it is clever enough to try -# to update those Makefiles when they are out-of-date or missing. It -# first reads all the Makefiles, and then tries to build each one if -# it is out-of-date, using the rules in the Makefiles themselves. -# When it has brought all the Makefiles up-to-date, it restarts itself -# to read the newly-generated Makefiles. -# -# This works fine, unless there are dependencies *between* the -# Makefiles. For example in the GHC build, for each package we have a -# package-data.mk file which is generated by the ghc-cabal program, -# and we have a .depend file. The .depend file cannot be generated -# until package-data.mk has been generated and make has been restarted -# to read in its contents, because it is the package-data.mk file that -# tells us which modules are in the package. But make always makes -# all the Makefiles before restarting - it doesn't take into account a -# dependency between Makefiles and restart itself earlier. - -# Consider the following makefile: - -# -------------------- -# all : -# -# include inc1.mk -# -# inc1.mk : Makefile -# echo "X = C" >$@ -# -# include inc2.mk -# -# inc2.mk : inc1.mk -# echo "Y = $(X)" >$@ -# -------------------- - -# Now try it: -# -# $ make -f fail.mk -# fail.mk:3: inc1.mk: No such file or directory -# fail.mk:8: inc2.mk: No such file or directory -# echo "X = C" >inc1.mk -# echo "Y = " >inc2.mk -# make: Nothing to be done for `all'. - -# make built both inc1.mk and inc2.mk without restarting itself -# between the two (even though we added a dependency on inc1.mk from -# inc2.mk). -# -# The solution we adopt in the GHC build system is essentially this: - -# -------------------- -# PHASE = 0 -# -# ifeq "$(PHASE)" "0" -# all : -# $(MAKE) PHASE=1 -# else -# all : -# endif -# -# -include inc1.mk -# -# inc1.mk : Makefile -# echo "X = C" >$@ -# -# ifneq "$(PHASE)" "0" -# include inc2.mk -# -# inc2.mk : inc1.mk -# echo "Y = $(X)" >$@ -# endif -# -# clean : -# rm -f inc1.mk inc2.mk -# -------------------- - -# That is, every time make is invoked, we force it to update inc1.mk -# and then restart. In the GHC build system we need to divide the -# build into 4 phases in fact, with a restart between each phase. See -# ghc.mk for the details on what happens in each phase and why. - default : all @: |