Subject: | [Fwd: MakeMaker: adjust install target dependencies to allow parallel makes] |
Date: | Mon, 28 Jan 2008 20:36:46 -0800 |
To: | via RT <bug-ExtUtils-MakeMaker [...] rt.cpan.org> |
From: | Michael G Schwern <schwern [...] pobox.com> |
Show quoted text
-------- Original Message --------
Subject: MakeMaker: adjust install target dependencies to allow parallel makes
Date: Sun, 27 Jan 2008 14:14:55 +1100
From: Brendan O'Dea <bod@debian.org>
To: Perl5 Porters <perl5-porters@perl.org>
There was some discussion on the debian-devel mailing list about
problems with running make -j on various packages:
http://lists.debian.org/debian-devel/2007/12/msg00046.html
There is an issue with the install rules generated by MakeMaker which
causes some problems. Attached is a patch to fix this.
I can't say that this will make all module builds work with -j, but if
not it is at least a start.
As a simple example of the problem, consider the simplified MakeMaker
generated Makefile fragment attached, run with -j:
$ make -f m1 -j install
pure_site_install
doc_site_install
pure_install
doc_install
all
install
The obvious problem here being that "pure_site_install" &c are attempted
before "all" completes. A modified fragment is attached for comparison.
--bod
--- lib/ExtUtils/MM_Unix.pm.orig 2008-01-27 13:15:51.000000000 +1100
+++ lib/ExtUtils/MM_Unix.pm 2008-01-27 13:50:59.887358525 +1100
@@ -2088,16 +2088,16 @@
my(@m);
push @m, q{
-install :: all pure_install doc_install
+install :: pure_install doc_install
$(NOECHO) $(NOOP)
-install_perl :: all pure_perl_install doc_perl_install
+install_perl :: pure_perl_install doc_perl_install
$(NOECHO) $(NOOP)
-install_site :: all pure_site_install doc_site_install
+install_site :: pure_site_install doc_site_install
$(NOECHO) $(NOOP)
-install_vendor :: all pure_vendor_install doc_vendor_install
+install_vendor :: pure_vendor_install doc_vendor_install
$(NOECHO) $(NOOP)
pure_install :: pure_$(INSTALLDIRS)_install
@@ -2112,7 +2112,7 @@
doc__install : doc_site_install
$(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-pure_perl_install ::
+pure_perl_install :: all
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(PERL_ARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
write }.$self->catfile('$(DESTINSTALLARCHLIB)','auto','$(FULLEXT)','.packlist').q{ \
@@ -2126,7 +2126,7 @@
}.$self->catdir('$(SITEARCHEXP)','auto','$(FULLEXT)').q{
-pure_site_install ::
+pure_site_install :: all
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(SITEARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
write }.$self->catfile('$(DESTINSTALLSITEARCH)','auto','$(FULLEXT)','.packlist').q{ \
@@ -2139,7 +2139,7 @@
$(NOECHO) $(WARN_IF_OLD_PACKLIST) \
}.$self->catdir('$(PERL_ARCHLIB)','auto','$(FULLEXT)').q{
-pure_vendor_install ::
+pure_vendor_install :: all
$(NOECHO) $(MOD_INSTALL) \
read }.$self->catfile('$(VENDORARCHEXP)','auto','$(FULLEXT)','.packlist').q{ \
write }.$self->catfile('$(DESTINSTALLVENDORARCH)','auto','$(FULLEXT)','.packlist').q{ \
@@ -2150,7 +2150,7 @@
$(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
$(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
-doc_perl_install ::
+doc_perl_install :: all
$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
@@ -2161,7 +2161,7 @@
EXE_FILES "$(EXE_FILES)" \
>> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-doc_site_install ::
+doc_site_install :: all
$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
@@ -2172,7 +2172,7 @@
EXE_FILES "$(EXE_FILES)" \
>> }.$self->catfile('$(DESTINSTALLARCHLIB)','perllocal.pod').q{
-doc_vendor_install ::
+doc_vendor_install :: all
$(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLARCHLIB)/perllocal.pod
-$(NOECHO) $(MKPATH) $(DESTINSTALLARCHLIB)
-$(NOECHO) $(DOC_INSTALL) \
all ::
@sleep 10
@echo $@
install :: all pure_install doc_install
@echo $@
pure_install :: pure_site_install
@echo $@
doc_install :: doc_site_install
@echo $@
pure_site_install ::
@sleep 1
@echo $@
doc_site_install ::
@sleep 1
@echo $@
all ::
@sleep 10
@echo $@
install :: pure_install doc_install
@echo $@
pure_install :: pure_site_install
@echo $@
doc_install :: doc_site_install
@echo $@
pure_site_install :: all
@sleep 1
@echo $@
doc_site_install :: all
@sleep 1
@echo $@