On Jul 12, 2007, at 4:04 AM, Simon Peyton-Jones wrote:
Sounds very cool to me! But Ian and Simon are the gatekeepers on
this.
(Remember too that breakage in the build system is particularly
painful for everyone else, so test well!)
Thanks for the encouragement! I understand Simon Marlow is away, and
this will require a full build to test because make -n does not
always reveal problems and it cannot test whether Make will only
rebuild several files after you change the timestamp on one or a
few. (Anyone interested in this please contact me and I will send a
patch so you may try it out.)
| From: [EMAIL PROTECTED] [mailto:cvs-ghc-
[EMAIL PROTECTED] On Behalf Of Peter Tanski
| Sent: 11 July 2007 15:29
| implement it and send a patch. The only catch is the base Make
| version required would go up to 3.80.
To my knowledge, Simon M and Ian L keep watch over whether we add a
new dependancy to the system: the current requirement is GNU Make
3.79.1. (I am not aware of any widespread platforms that by default
do not come bundled with at least GNU Make 3.80, but OS X 10.3, for
example, does not.)
Ian, if you have time to consider this, one of the other things I
would change in libraries/Makefile is the current dependancy order.
The current system sets the dependancy for each library as: boot,
configure, for all libraries before that library's build step; then
build depends on all libraries, then doc and clean, etc. The rebuild
step does not: it operates independently on each library. This
disjunction can cause problems because it hides the dependancy for
each library from Make. I would change it so each library depends on
the successful build of only those libraries it depends on. For example:
currently (abstractly):
SUBDIRS = base old-locale old-time filepath directory process pretty \
hpc template-haskell readline Cabal random haskell98
boot.readline : _all_ the boot.libraries (including itself) (boot.%)
(Yes, that is what this says to Make:
$(foreach SUBDIR,$(SUBDIRS),$(SUBDIR)/setup/Setup): \
%/setup/Setup: $(BOOTSTRAP_STAMPS)
-$(RM) -rf $*/setup
mkdir $*/setup
$(CP) $*/Setup.*hs $*/setup
cd $*/setup && $(GHC) -Wall -cpp --make Setup.*hs -o Setup \
$(BOOTSTRAP_INC_2_UP))
boot : boot.%
configure.readline : configure.%
configure : configure.%
build.readline : build.%
...
I would change it to:
boot.readline : readline/setup/Setup build.Cabal build.random
build.haskell98
configure.readline : boot.readline
build.readline : configure.readline
...
My question is: are there any special dependancies between these, for
example the configuration of readline depending on the configuration
but _not_ the build of, say, Cabal?
Also, I would have to reverse the list: currently it goes from "left
to right", meaning haskell98 depends on random, random depends on
Cabal and on down to base. The recursion is easiest when the first
library (here, base) is last in the list; otherwise you would need to
check for a null list at the beginning, go to the end and then work
backwards toward a null list in the beginning again. Would reversing
the list be a problem?
Cheers,
Pete
_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc