summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-05-14 10:57:04 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-05-14 10:57:04 +0000
commit11e3da87d34465406147927fd89fb64b147cfaca (patch)
tree2bb4d5c952077562eec73d3fba7e48c0439f7d05
parentcd12c32de77ac18a69ed1733a558095567ec5ba8 (diff)
downloadhaskell-11e3da87d34465406147927fd89fb64b147cfaca.tar.gz
main repeated 'make maintainer-clean' not fail
-rw-r--r--Makefile17
-rw-r--r--boot37
-rw-r--r--boot-pkgs39
3 files changed, 50 insertions, 43 deletions
diff --git a/Makefile b/Makefile
index e5b21150c2..d0f52b93a6 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 3cb9f6aba5..78c9295dd1 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 0000000000..4892b52054
--- /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