diff options
author | Paul Smith <psmith@gnu.org> | 2013-09-21 18:10:08 -0400 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2013-09-21 18:10:08 -0400 |
commit | 300d1296fb0f8f1b6bd16f977e2167442338343d (patch) | |
tree | e1e413420a68a278295562e5a7c4233d2c737c4f | |
parent | 822f8dae415cb5da2ad27ab7e26033f6b9ad5b48 (diff) | |
download | gunmake-300d1296fb0f8f1b6bd16f977e2167442338343d.tar.gz |
Create a target that tests alternative configurations.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | maintMakefile | 31 | ||||
-rw-r--r-- | tests/ChangeLog | 10 | ||||
-rw-r--r-- | tests/scripts/features/jobserver | 59 | ||||
-rw-r--r-- | tests/scripts/features/output-sync | 9 | ||||
-rw-r--r-- | tests/scripts/features/parallelism | 44 | ||||
-rw-r--r-- | tests/scripts/features/se_explicit | 5 |
7 files changed, 114 insertions, 48 deletions
@@ -1,5 +1,9 @@ 2013-09-21 Paul Smith <psmith@gnu.org> + * maintMakefile (check-alt-config): Create a target to test + alternative configurations. Each one will build make with a + different configuration then run the test suite. + Invert the output-sync #define to NO_OUTPUT_SYNC * configure.ac: Don't set OUTPUT_SYNC. diff --git a/maintMakefile b/maintMakefile index e3eda37..1836629 100644 --- a/maintMakefile +++ b/maintMakefile @@ -184,10 +184,41 @@ scm-update: get-config/texinfo.tex get-config/config.guess get-config/config.sub update: po-update scm-update +# ---------------------------------- # +# Alternative configuration checks. # +# ---------------------------------- # + +.PHONY: check-alt-config +check-alt-config: \ + checkcfg.--disable-job-server \ + checkcfg.--disable-load \ + checkcfg.--without-guile \ + checkcfg.CPPFLAGS^-DNO_OUTPUT_SYNC \ + checkcfg.CPPFLAGS^-DNO_ARCHIVES + +checkcfg.%: distdir + @ rm -rf $(distdir)/_build \ + && mkdir $(distdir)/_build \ + && cd $(distdir)/_build \ + && echo "Testing configure with $(subst ^,=,$*)" \ + && ../configure --srcdir=.. $(subst ^,=,$*) \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \ + CFLAGS='$(AM_CFLAGS)' \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) check + + +.PHONY: update +update: po-update scm-update + + ## --------------- ## ## Sanity checks. ## ## --------------- ## +# Before we build a distribution be sure we run our local checks +#distdir: local-check + # Checks that don't require Git. Run 'changelog-check' last as # previous test may reveal problems requiring new ChangeLog entries. local-check: po-check changelog-check diff --git a/tests/ChangeLog b/tests/ChangeLog index cbcaa03..fee01a8 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,15 @@ 2013-09-21 Paul Smith <psmith@gnu.org> + * scripts/features/se_explicit: Fix a test that behaves + differently with/without archive capability enabled. + * scripts/features/output-sync: Don't test output-sync if it's not + enabled. We also skip it if parallelism is not enabled, although + strictly speaking some of the output-sync tests are valid even + without parallelism. + * scripts/features/jobserver: Move some tests that require the + jobserver from features/parallelism to a separate suite. Only run + this if jobserver mode is enabled. + * scripts/features/output-sync: Test shell functions writing to stderr in recipes: ensure it's captured via output-sync. Test output generated while reading makefiles and make sure it's diff --git a/tests/scripts/features/jobserver b/tests/scripts/features/jobserver new file mode 100644 index 0000000..6a9565e --- /dev/null +++ b/tests/scripts/features/jobserver @@ -0,0 +1,59 @@ +# -*-perl-*- + +$description = "Test jobserver."; + +$details = "These tests are ones that specifically are different when the +jobserver feature is available. Most -j tests are the same whether or not +jobserver is available, and those appear in the 'parallelism' test suite."; + +exists $FEATURES{'jobserver'} or return -1; + +if (!$parallel_jobs) { + return -1; +} + +# Don't put --jobserver-fds into a re-exec'd MAKEFLAGS. +# We can't test this directly because there's no way a makefile can +# show the value of MAKEFLAGS we were re-exec'd with. We can intuit it +# by looking for "disabling jobserver mode" warnings; we should only +# get one from the original invocation and none from the re-exec. +# See Savannah bug #18124 + +run_make_test(q! +-include inc.mk +recur: +# @echo 'MAKEFLAGS = $(MAKEFLAGS)' + @rm -f inc.mk + @$(MAKE) -j2 -f #MAKEFILE# all +all: +# @echo 'MAKEFLAGS = $(MAKEFLAGS)' + @echo $@ +inc.mk: +# @echo 'MAKEFLAGS = $(MAKEFLAGS)' + @echo 'FOO = bar' > $@ +!, + '--no-print-directory -j2', "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n"); + +rmfiles('inc.mk'); + +# Test recursion when make doesn't think it exists. +# See Savannah bug #39934 +# Or Red Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=885474 + +open(MAKEFILE,"> Makefile2"); +print MAKEFILE <<EOF; +vpath %.c $ENV{HOME}/ +foo: +EOF +close(MAKEFILE); + +run_make_test(q! +default: ; @ #MAKEPATH# -f Makefile2 +!, + '-j2 --no-print-directory', +"#MAKE#[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. +#MAKE#[1]: Nothing to be done for 'foo'."); + +unlink('Makefile2'); + +1; diff --git a/tests/scripts/features/output-sync b/tests/scripts/features/output-sync index 3bb9997..e2e88a7 100644 --- a/tests/scripts/features/output-sync +++ b/tests/scripts/features/output-sync @@ -4,9 +4,12 @@ $description = "Test --output-sync (-O) option."; $details = "Test the synchronization of output from parallel jobs."; -if (!$parallel_jobs) { - return -1; -} +# If we don't have output sync support, never mind. +exists $FEATURES{'output-sync'} or return -1; + +# Output sync can't be tested without parallelization +$parallel_jobs or return -1; + if ($vos) { $sleep_command = "sleep -seconds"; diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism index 084f2cc..1f56748 100644 --- a/tests/scripts/features/parallelism +++ b/tests/scripts/features/parallelism @@ -143,30 +143,6 @@ intermed: | phony ; touch $@ phony: ; : phony', '-rR -j', ': phony'); rmfiles('target'); -# TEST #10: Don't put --jobserver-fds into a re-exec'd MAKEFLAGS. -# We can't test this directly because there's no way a makefile can -# show the value of MAKEFLAGS we were re-exec'd with. We can intuit it -# by looking for "disabling jobserver mode" warnings; we should only -# get one from the original invocation and none from the re-exec. -# See Savannah bug #18124 - -run_make_test(q! --include inc.mk -recur: -# @echo 'MAKEFLAGS = $(MAKEFLAGS)' - @rm -f inc.mk - @$(MAKE) -j2 -f #MAKEFILE# all -all: -# @echo 'MAKEFLAGS = $(MAKEFLAGS)' - @echo $@ -inc.mk: -# @echo 'MAKEFLAGS = $(MAKEFLAGS)' - @echo 'FOO = bar' > $@ -!, - '--no-print-directory -j2', "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n"); - -rmfiles('inc.mk'); - # TEST #11: Make sure -jN from MAKEFLAGS is processed even when we re-exec # See Savannah bug #33873 @@ -202,26 +178,6 @@ file2: file1 ; @touch $@ rmfiles('file1', 'file2', 'file3', 'file4'); -# Test recursion when make doesn't think it exists. -# See Savannah bug #39934 -# Or Red Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=885474 - -open(MAKEFILE,"> Makefile2"); -print MAKEFILE <<EOF; -vpath %.c $ENV{HOME}/ -foo: -EOF -close(MAKEFILE); - -run_make_test(q! -default: ; @ #MAKEPATH# -f Makefile2 -!, - '-j2 --no-print-directory', -"#MAKE#[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. -#MAKE#[1]: Nothing to be done for 'foo'."); - -unlink('Makefile2'); - # Make sure that all jobserver FDs are closed if we need to re-exec the # master copy. # diff --git a/tests/scripts/features/se_explicit b/tests/scripts/features/se_explicit index c3cade4..790017a 100644 --- a/tests/scripts/features/se_explicit +++ b/tests/scripts/features/se_explicit @@ -6,6 +6,9 @@ $details = ""; # TEST #0: Test handing of '$' in prerequisites with and without second # expansion. +# If we don't support archives then the prerequisite is different +my $prereq = exists $FEATURES{'archives'} ? '$' : '$(PRE)'; + run_make_test(q! ifdef SE .SECONDEXPANSION: @@ -18,7 +21,7 @@ PRE = three four .DEFAULT: ; @echo '$@' !, '', - "\$\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz"); + "$prereq\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz"); run_make_test(undef, 'SE=1', "three\nfour\nbariz\nfoo\$bar : baraz bariz"); |