From 11e3da87d34465406147927fd89fb64b147cfaca Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 14 May 2009 10:57:04 +0000 Subject: [PATCH] main repeated 'make maintainer-clean' not fail --- Makefile | 17 +++++++++++------ boot | 37 ------------------------------------- boot-pkgs | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 43 deletions(-) create mode 100644 boot-pkgs diff --git a/Makefile b/Makefile index e5b2115..d0f52b9 100644 --- a/Makefile +++ b/Makefile @@ -43,13 +43,19 @@ endif include mk/custom-settings.mk +# If the package ghc.mk files are missing, generate them. This means that +# repeating 'make maintainer-clean' works. +PACKAGE_MK=libraries/base/ghc.mk +$(PACKAGE_MK): + sh boot-pkgs + # No need to update makefiles for these targets: REALGOALS=$(filter-out framework-pkg clean clean_% distclean maintainer-clean show,$(MAKECMDGOALS)) # NB. not the same as saying '%: ...', which doesn't do the right thing: # it does nothing if we specify a target that already exists. .PHONY: $(REALGOALS) -$(REALGOALS) all: +$(REALGOALS) all: $(PACKAGE_MK) @echo "===--- updating makefiles phase 0" $(MAKE) -r --no-print-directory -f ghc.mk phase=0 just-makefiles @echo "===--- updating makefiles phase 1" @@ -61,19 +67,19 @@ $(REALGOALS) all: @echo "===--- finished updating makefiles" $(MAKE) -r --no-print-directory -f ghc.mk $@ -binary-dist: +binary-dist: $(PACKAGE_MK) rm -f bindist-list $(MAKE) -r --no-print-directory -f ghc.mk bindist BINDIST=YES $(MAKE) -r --no-print-directory -f ghc.mk binary-dist -clean distclean maintainer-clean: +clean distclean maintainer-clean: $(PACKAGE_MK) $(MAKE) -r --no-print-directory -f ghc.mk $@ test ! -d testsuite || $(MAKE) -C testsuite $@ -$(filter clean_%, $(MAKECMDGOALS)) : clean_% : +$(filter clean_%, $(MAKECMDGOALS)) : clean_% : $(PACKAGE_MK) $(MAKE) -r --no-print-directory -f ghc.mk $@ -show: +show: $(PACKAGE_MK) $(MAKE) -r --no-print-directory -f ghc.mk $@ ifeq "$(darwin_TARGET_OS)" "1" @@ -86,4 +92,3 @@ endif .NOTPARALLEL: endif - diff --git a/boot b/boot index 3cb9f6a..78c9295 100644 --- a/boot +++ b/boot @@ -30,40 +30,3 @@ do chmod +x $f fi done - -libraries= - -for f in libraries/*; do - pkgs=$f/ghc-packages - if test -f $pkgs; then - for p in `cat $pkgs`; do - libraries="$libraries $f/$p" - done - else - libraries="$libraries $f" - fi -done - -for f in $libraries; do - dir=`basename $f` - cabals=`echo $f/*.cabal` - if test -f $cabals; then - echo "Creating $f/ghc.mk" - rm -f $f/ghc.mk - pkg=`echo "$cabals" | sed -e 's#.*/##' -e 's#\.cabal$##'` - if test -f $f/ghc-stage; then - stage=`cat $f/ghc-stage` - else - stage=1 - fi - top=`echo $f | sed 's#[^/]\+#..#g'` - echo "${f}_PACKAGE = ${pkg}" >> $f/ghc.mk - echo "${f}_dist-install_GROUP = libraries" >> $f/ghc.mk - echo "\$(eval \$(call build-package,${f},dist-install,${stage}))" >> $f/ghc.mk - rm -f $f/GNUmakefile - echo "Creating $f/GNUmakefile" - echo "dir = ${f}" >> $f/GNUmakefile - echo "TOP = ${top}" >> $f/GNUmakefile - echo "include \$(TOP)/mk/sub-makefile.mk" >> $f/GNUmakefile - fi -done diff --git a/boot-pkgs b/boot-pkgs new file mode 100644 index 0000000..4892b52 --- /dev/null +++ b/boot-pkgs @@ -0,0 +1,39 @@ +#! /bin/sh +set -e + +libraries= + +for f in libraries/*; do + pkgs=$f/ghc-packages + if test -f $pkgs; then + for p in `cat $pkgs`; do + libraries="$libraries $f/$p" + done + else + libraries="$libraries $f" + fi +done + +for f in $libraries; do + dir=`basename $f` + cabals=`echo $f/*.cabal` + if test -f $cabals; then + echo "Creating $f/ghc.mk" + rm -f $f/ghc.mk + pkg=`echo "$cabals" | sed -e 's#.*/##' -e 's#\.cabal$##'` + if test -f $f/ghc-stage; then + stage=`cat $f/ghc-stage` + else + stage=1 + fi + top=`echo $f | sed 's#[^/]\+#..#g'` + echo "${f}_PACKAGE = ${pkg}" >> $f/ghc.mk + echo "${f}_dist-install_GROUP = libraries" >> $f/ghc.mk + echo "\$(eval \$(call build-package,${f},dist-install,${stage}))" >> $f/ghc.mk + rm -f $f/GNUmakefile + echo "Creating $f/GNUmakefile" + echo "dir = ${f}" >> $f/GNUmakefile + echo "TOP = ${top}" >> $f/GNUmakefile + echo "include \$(TOP)/mk/sub-makefile.mk" >> $f/GNUmakefile + fi +done -- 1.7.10.4