Programmatically generate dependencies for all *.SH files.
authorNicholas Clark <nick@ccl4.org>
Wed, 15 May 2013 18:57:37 +0000 (20:57 +0200)
committerNicholas Clark <nick@ccl4.org>
Mon, 20 May 2013 19:50:45 +0000 (21:50 +0200)
Previously dependencies for Makefile, config.h and makedepend were
explicitly coded into verbatim sections of Makefile.SH, with most of the
others being generated by makedepend.SH

Makefile.SH
makedepend.SH

index ee9ea47..5c99047 100755 (executable)
@@ -443,9 +443,12 @@ xconfig.h: config_h.SH Cross/config-\$(CROSS_NAME).sh
        ;;
 esac
 
-SH='Makefile.SH cflags.SH config_h.SH makedepend.SH myconfig.SH runtests.SH pod/Makefile.SH'
-shextract=`echo $SH | sed -e s/\\\.SH//g -e s/_/./g`
+SH_to_target() {
+    echo $@ | sed -e s/\\\.SH//g -e s/_/./g
+}
 
+SH='Makefile.SH cflags.SH config_h.SH makedepend.SH myconfig.SH runtests.SH pod/Makefile.SH'
+shextract=`SH_to_target $SH`
 
 ## In the following dollars and backticks do not need the extra backslash.
 $spitshell >>$Makefile <<!GROK!THIS!
@@ -1400,18 +1403,23 @@ MAKEDEPEND = Makefile makedepend
 
 $(FIRSTMAKEFILE):      README $(MAKEDEPEND)
        $(MAKE) depend MAKEDEPEND=
+!NO!SUBS!
+
+for f in $SH; do
+    file=`SH_to_target $f`
+    $spitshell >>$Makefile <<!GROK!THIS!
 
-config.h: config_h.SH config.sh
-       $(SHELL) config_h.SH
+$file: $f config.sh
+       \$(SHELL) $f
+!GROK!THIS!
+done
+
+$spitshell >>$Makefile <<'!NO!SUBS!'
 
 .PHONY: depend
 depend: makedepend
        sh ./makedepend MAKE=$(MAKE) cflags
 
-# Cannot postpone this until $firstmakefile is ready ;-)
-makedepend: makedepend.SH config.sh
-       sh ./makedepend.SH
-
 .PHONY: test check test_prep test_prep_nodll test_prep_pre \
        test_prep_reonly test_tty test-tty test_notty test-notty \
        utest ucheck test.utf8 check.utf8 test.torture torturetest \
@@ -1594,9 +1602,6 @@ hlist:  $(h)
 shlist: $(sh)
        echo $(sh) | tr ' ' $(TRNL) >.shlist
 
-Makefile: Makefile.SH ./config.sh
-       $(SHELL) Makefile.SH
-
 .PHONY: distcheck
 distcheck: FORCE
        perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()'
index 3ea3a3e..f992af3 100755 (executable)
@@ -211,30 +211,7 @@ done
 
 $sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'
 
-$MAKE shlist || ($echo "Searching for .SH files..."; \
-       $echo *.SH | $tr ' ' $trnl | $egrep -v '\*' >.shlist)
-
-# Now extract the dependencies on makedepend.SH and Makefile.SH
-# (they should reside in the main Makefile):
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^makedepend\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^Makefile\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^perl_exp\.SH' <.shlist.old >.shlist
-rm -f .shlist.old
-mv .shlist .shlist.old
-$egrep -v '^config_h\.SH' <.shlist.old >.shlist
-rm .shlist.old
-
 if $test -s .deptmp; then
-    for file in `cat .shlist`; do
-       $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
-           $sh $file >> .deptmp
-    done
     $echo "Updating $mf..."
     $echo "# If this runs make out of memory, delete /usr/include lines." \
        >> $mf.new
@@ -262,10 +239,6 @@ else
        $sed -f .hsed >> $mf.new
     <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
        $sed -f .hsed >> $mf.new
-    for file in `$cat .shlist`; do
-       $echo `$expr X$file : 'X\(.*\).SH'`: $file $TOP/config.sh \; \
-           $sh $file >> $mf.new
-    done
 fi
 $rm -f $mf.old
 $cp $mf $mf.old
@@ -273,7 +246,7 @@ $rm -f $mf
 $cp $mf.new $mf
 $rm $mf.new
 $echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
-$rm -rf .deptmp UU .shlist .clist .hlist .hsed .cout .cerr
+$rm -rf .deptmp UU .clist .hlist .hsed .cout .cerr
 rmdir .depending
 
 !NO!SUBS!