| # -*-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; |
| } |
| |
| # Shorthand |
| my $np = '--no-print-directory'; |
| |
| # Simple test of MAKEFLAGS settings |
| run_make_test(q! |
| SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS)) |
| recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all |
| all:;@echo $@: "/$(SHOW)/" |
| !, |
| "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\nall: /-j2 --jobserver-auth=<auth> $np/\n"); |
| |
| # Setting parallelism with the environment |
| # Command line should take precedence over the environment |
| $extraENV{MAKEFLAGS} = "-j2 $np"; |
| run_make_test(q! |
| SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS)) |
| recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all |
| all:;@echo $@: "/$(SHOW)/" |
| !, |
| '', "recurse: /-j2 --jobserver-auth=<auth> $np/\nall: /-j2 --jobserver-auth=<auth> $np/\n"); |
| delete $extraENV{MAKEFLAGS}; |
| |
| # Test override of -jN |
| $extraENV{MAKEFLAGS} = "-j9 $np"; |
| run_make_test(q! |
| SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS)) |
| recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -j3 -f #MAKEFILE# recurse2 |
| recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all |
| all:;@echo $@: "/$(SHOW)/" |
| !, |
| "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j3 --jobserver-auth=<auth> $np/\nall: /-j3 --jobserver-auth=<auth> $np/\n"); |
| delete $extraENV{MAKEFLAGS}; |
| |
| # Test override of -jN with -j |
| run_make_test(q! |
| SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=<auth>,$(MAKEFLAGS)) |
| recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -j -f #MAKEFILE# recurse2 |
| recurse2: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all |
| all:;@echo $@: "/$(SHOW)/" |
| !, |
| "-j2 $np", "recurse: /-j2 --jobserver-auth=<auth> $np/\n#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nrecurse2: /-j $np/\nall: /-j $np/\n"); |
| |
| # Don't put --jobserver-auth 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 |
| |
| unlink('inc.mk'); |
| |
| 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' > $@ |
| !, |
| "$np -j2", "#MAKE#[1]: warning: -jN forced in submake: disabling jobserver mode.\nall\n"); |
| |
| unlink('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 ' |
| vpath %.c ../ |
| foo: |
| '; |
| close(MAKEFILE); |
| |
| run_make_test(q! |
| default: ; @ #MAKEPATH# -f Makefile2 |
| !, |
| "-j2 $np", |
| "#MAKE#[1]: warning: jobserver unavailable: using -j1. Add '+' to parent make rule. |
| #MAKE#[1]: Nothing to be done for 'foo'."); |
| |
| rmfiles('Makefile2'); |
| |
| 1; |
| |
| ### Local Variables: |
| ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) |
| ### End: |