make/tests/scripts/variables/MAKEFLAGS
Dmitry Goncharov 7d8756a4a3 [SV 63537] Document and test flippable switches
* doc/make.texi (Options/Recursion): Clarify that MAKEFLAGS values
from the environment have precedence over those set in the makefile.
* tests/scripts/variables/MAKEFLAGS: Check boolean switches -k/-S,
-w/--no-print-directory and -s/--no-silent as follows:
1. A switch can be enabled or disabled on the command line.
2. A switch can be enabled or disabled in env.
3. A switch can be enabled or disabled in makefile.
4. Command line beats env and makefile.
5. Env beats makefile.
6. MAKEFLAGS contains each specified switch at parse and build time.
7. If switches are specified in multiple origins, MAKEFLAGS contains
   the winning switch at parse and build time.
8. MAKEFLAGS does not contain the losing switch.
Also test that --debug settings from different origins are combined
together into one option.
2022-12-18 20:06:38 -05:00

896 lines
20 KiB
Perl

# -*-perl-*-
$description = "Test proper behavior of MAKEFLAGS";
$details = "DETAILS";
# Normal flags aren't prefixed with "-"
run_make_test(q!
all: ; @echo /$(MAKEFLAGS)/
!,
'-e -r -R', '/erR/');
# Long arguments mean everything is prefixed with "-"
run_make_test(q!
all: ; @echo /$(MAKEFLAGS)/
!,
'--no-print-directory -e -r -R --trace', "#MAKEFILE#:2: update target 'all' due to: target does not exist
echo /erR --trace --no-print-directory/
/erR --trace --no-print-directory/");
# Recursive invocations of make should accumulate MAKEFLAGS values.
# Savannah bug #2216
run_make_test(q!
MSG = Fails
.RECIPEPREFIX = >
all:
> @echo '$@: MAKEFLAGS=$(MAKEFLAGS)'
> @MSG=Works $(MAKE) -e -f #MAKEFILE# jump
jump:
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
> @$(MAKE) -f #MAKEFILE# print
print:
> @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)'
.PHONY: all jump print
!,
'--no-print-directory',
'all: MAKEFLAGS= --no-print-directory
jump Works: MAKEFLAGS=e --no-print-directory
print Works: MAKEFLAGS=e --no-print-directory');
# Ensure MAKEFLAGS updates are handled immediately rather than later
mkdir('foo', 0777);
mkdir('bar', 0777);
run_make_test(q!
$(info MAKEFLAGS=$(MAKEFLAGS))
$(info INCLUDE_DIRS=$(.INCLUDE_DIRS))
MAKEFLAGS += -Ibar
$(info MAKEFLAGS=$(MAKEFLAGS))
$(info INCLUDE_DIRS=$(.INCLUDE_DIRS))
.PHONY: all
all: ; @echo 'MAKEFLAGS=$(MAKEFLAGS)' "\$$MAKEFLAGS=$$MAKEFLAGS"
!,
'-I- -Ifoo', 'MAKEFLAGS= -I- -Ifoo
INCLUDE_DIRS=foo
MAKEFLAGS= -I- -Ifoo -Ibar
INCLUDE_DIRS=foo bar
MAKEFLAGS= -I- -Ifoo -Ibar $MAKEFLAGS= -I- -Ifoo -Ibar');
rmdir('foo');
rmdir('bar');
# Test that command line switches are all present in MAKEFLAGS.
# sv 62514.
my @opts;
my @flavors;
# Simple flags.
@opts = ('i', 'k', 'n', 'q', 'r', 's', 'w', 'd');
exists $FEATURES{'check-symlink'} and push @opts, 'L';
@flavors = ('=', ':=', ':::=', '+=-');
for my $fl (@flavors) {
for my $opt (@opts) {
run_make_test("
MAKEFLAGS${fl}B
all:; \$(info makeflags='\$(MAKEFLAGS)')
", "-$opt", "/makeflags='B$opt'/");
}
}
# Switches which carry arguments.
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
for my $fl (@flavors) {
for my $opt (@opts) {
run_make_test("
MAKEFLAGS${fl}B
all:; \$(info makeflags='\$(MAKEFLAGS)')
", "$opt", "/makeflags='B$opt'/");
}
}
# Long options which take no arguments.
# sv 62514.
@opts = (' --no-print-directory', ' --warn-undefined-variables', ' --trace');
for my $fl (@flavors) {
for my $opt (@opts) {
run_make_test("
MAKEFLAGS${fl}B
all:; \$(info makeflags='\$(MAKEFLAGS)')
", "$opt", "/makeflags='B$opt'/");
}
}
# Test that make filters out duplicates.
# Each option is specified in the makefile, env and on the command line.
@opts = (' -I/tmp', ' -Onone', ' --debug=b', ' -l2.5');
for my $fl (@flavors) {
for my $opt (@opts) {
$ENV{'MAKEFLAGS'} = $opt;
run_make_test("
MAKEFLAGS${fl}B $opt
all:; \$(info makeflags='\$(MAKEFLAGS)')
", "$opt", "/makeflags='B$opt'/");
}
}
# Test that make filters out duplicates.
# Each option is specified in the makefile, env and on the command line.
# decode_switches reallocates when the number of parameters in sl->list exceeds 5.
# This test exercises the realloc branch.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '-I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6 -I2 -I2';
run_make_test("
MAKEFLAGS${fl}B -I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6 -I2 -I2
all:; \$(info makeflags='\$(MAKEFLAGS)')
",
'-I1 -Onone --debug=b -l2.5 -I2 -I3 -I4 -I5 -I6',
"/makeflags='B -I1 -I2 -I3 -I4 -I5 -I6 -l2.5 -Onone --debug=b'/");
}
# A mix of multiple flags from env, the makefile and command line.
# Skip -L since it's not available everywhere
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables --trace';
run_make_test("
MAKEFLAGS${fl}iknqrswd -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5
all:; \$(info makeflags='\$(MAKEFLAGS)')
",
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrswd -i -n -s -k -I/tmp',
"/makeflags='Bdiknqrsw -I/tmp -l2.5 -Onone --trace --warn-undefined-variables'/");
}
# Verify MAKEFLAGS are all available to shell function at parse time.
for my $fl (@flavors) {
my $answer = 'Biknqrs -I/tmp -l2.5 -Onone --no-print-directory --warn-undefined-variables';
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables';
run_make_test("
MAKEFLAGS${fl}iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
\$(info at parse time '\$(MAKEFLAGS)')
XX := \$(shell echo \"\$\$MAKEFLAGS\")
all:; \$(info at build time makeflags='\$(XX)')
",
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrs -i -n -s -k -I/tmp',
"at parse time '$answer'
at build time makeflags='$answer'");
}
# Verify MAKEFLAGS and command line definitions are all available to shell function at parse time.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = 'ikB --no-print-directory --warn-undefined-variables';
my $answer = 'Biknqrs -I/tmp -l2.5 -Onone --no-print-directory --warn-undefined-variables -- hello=world';
run_make_test("
MAKEFLAGS${fl}iknqrsw -I/tmp -I/tmp -Onone -Onone -l2.5 -l2.5 --no-print-directory
\$(info at parse time '\$(MAKEFLAGS)')
XX := \$(shell echo \"\$\$MAKEFLAGS\")
all:; \$(info at build time makeflags='\$(XX)')
",
'-Onone -l2.5 -l2.5 -Onone -I/tmp -iknqrs -i -n -s -k -I/tmp hello=world',
"at parse time '$answer'
at build time makeflags='$answer'");
}
# Verify that command line arguments are included in MAKEFLAGS
run_make_test(q!
all: ; @echo $(MAKEFLAGS)
!,
'-e FOO=bar -r -R', 'erR -- FOO=bar');
# Long arguments mean everything is prefixed with "-"
run_make_test(q!
all: ; @echo /$(MAKEFLAGS)/
!,
'--no-print-directory -e -r -R --trace FOO=bar',
"#MAKEFILE#:2: update target 'all' due to: target does not exist
echo /erR --trace --no-print-directory -- FOO=bar/
/erR --trace --no-print-directory -- FOO=bar/");
# sv 63347.
# Verify that command line arguments are included in MAKEFLAGS
# when makefiles are parsed.
my $answer = 'erR -- hello:=world FOO=bar';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-e FOO=bar -r -R hello:=world',
"$answer
$answer
#MAKE#: 'all' is up to date.\n");
# sv 63347.
# Same as above, with makefile setting the value of the same variables as
# defined on the cli.
my $answer = 'erR -- hello:=world FOO=bar';
run_make_test(q!
$(info $(MAKEFLAGS))
FOO=moon
hello:=moon
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-e FOO=bar -r -R hello:=world',
"$answer
$answer
$answer
#MAKE#: 'all' is up to date.\n");
# sv 63347.
# Same as above, with makefile overriding the value of cli definition.
my $answer = 'erR -- hello:=world FOO=bar';
run_make_test(q!
$(info $(MAKEFLAGS))
override FOO=moon
override hello:=moon
export hello
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-e FOO=bar -r -R hello:=world',
"$answer
$answer
$answer
#MAKE#: 'all' is up to date.\n");
# Same as above, and makefile overrides the value of cli definition.
# resets MAKEOVERRIDES.
my $answer = 'rR -- hello:=world FOO=bar';
run_make_test(q!
$(info $(MAKEFLAGS))
override FOO=moon
override hello:=moon
export hello
$(info $(MAKEFLAGS))
MAKEOVERRIDES=
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, 'FOO=bar -r -R hello:=world',
"$answer
$answer
rR -- \nrR
#MAKE#: 'all' is up to date.\n");
# sv 63347.
# MAKEFLAGS set is env and makefile sets MAKEFLAGS and there is a command
# line definition.
my $answer = ' -- bye=moon hello=world';
$ENV{'MAKEFLAGS'} = 'hello=world';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, 'bye=moon',
" -- bye=moon hello=world
-- bye=moon hello=world
#MAKE#: 'all' is up to date.\n");
# sv 63347.
# Conditional assignment and MAKEFLAGS.
my $answer = 'B -- bye=moon hello=world';
$ENV{'MAKEFLAGS'} = 'hello=world';
run_make_test(q!
$(info $(MAKEFLAGS))
MAKEFLAGS?=-k
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-B bye=moon',
"$answer
$answer
$answer
#MAKE#: 'all' is up to date.\n");
# sv 63347.
# MAKEFLAGS set is env and makefile sets MAKEFLAGS and there is a command
# line definition.
for my $fl (@flavors) {
my $answer = ' -- bye=moon hello=world';
$ENV{'MAKEFLAGS'} = 'hello=world';
run_make_test("
\$(info \$(MAKEFLAGS))
MAKEFLAGS${fl}R
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", 'bye=moon',
"$answer
R$answer
rR$answer
#MAKE#: 'all' is up to date.\n");
}
# sv 63347.
# Test changes introduced by makefiles to MAKEFLAGS.
for my $fl (@flavors) {
my $answer = 'rR --no-print-directory -- hello:=world FOO=bar';
run_make_test(q!
MAKEFLAGS+=--no-print-directory
$(info $(MAKEFLAGS))
MAKEFLAGS+=-k
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, 'FOO=bar -r -R hello:=world',
"$answer
k$answer
k$answer
#MAKE#: 'all' is up to date.\n");
}
# sv 63347.
# Test changes introduced by makefiles to MAKEFLAGS.
# Same as above, but with -e.
for my $fl (@flavors) {
my $answer = 'erR -- hello:=world FOO=bar';
run_make_test(q!
MAKEFLAGS+=--no-print-directory
$(info $(MAKEFLAGS))
MAKEFLAGS+=-k
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-e FOO=bar -r -R hello:=world',
"$answer
$answer
$answer
#MAKE#: 'all' is up to date.\n");
}
mkdir('bye', 0777);
create_file('bye/makefile',
'hello=moon
all:; $(info $(hello))');
# sv 63347.
# Test that a cli definition takes precendence over a definition set in
# submake.
run_make_test(q!
v:=$(shell $(MAKE) -C bye --no-print-directory)
all: ; $(info $(v))
!, 'hello=world', "world #MAKE#[1]: 'all' is up to date.\n#MAKE#: 'all' is up to date.");
# Same as above with the shell assignment operator.
run_make_test(q!
v \!= $(MAKE) -C bye --no-print-directory
all: ; $(info $(v))
!, 'hello=world', "world #MAKE#[1]: 'all' is up to date.\n#MAKE#: 'all' is up to date.");
unlink('bye/makefile');
rmdir('bye');
# sv 63347
# Invalid command line variable definition.
run_make_test(q!
all:; $(info $(hello))
!, 'hello=\'$(world\'', "#MAKEFILE#:2: *** unterminated variable reference. Stop.\n", 512);
# sv 63347
# An unused invalid command line variable definition is ignored.
run_make_test(q!
all:; $(info good)
!, 'hello=\'$(world\'', "good\n#MAKE#: 'all' is up to date.\n");
# sv 63537
# Certain switches can be flipped on and off.
# -k/-S, -w/--no-print-directory and -s/--no-silent.
# Test the following aspects of behavior of these switches
# 1. A switch can be enabled or disabled in makefile.
# 2. A switch can be enabled or disabled in env.
# 3. A switch can be enabled or disabled on the command line.
# 4. Command line beats makefile.
# 5. Env beats makefile.
# 6. Command line beats env.
# 7. MAKEFLAGS contains each specified switch at parse and build time.
# 8. If contradicting switches are specified in multiple origins, MAKEFLAGS
# contains the winning switch at parse and build time.
# 9. MAKEFLAGS does not contain the beaten switch.
my @flavors = ('=', ':=', ':::=', '+=');
# sv 63537
# -w vs --no-print-directory
# -w on the command line.
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-w',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKE#: 'all' is up to date.
#MAKE#: Leaving directory '#PWD#'\n");
# -w in the env.
$ENV{'MAKEFLAGS'} = '-w';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKE#: 'all' is up to date.
#MAKE#: Leaving directory '#PWD#'\n");
# -w in env, --no-print-directory on the command line.
$ENV{'MAKEFLAGS'} = '-w';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '--no-print-directory',
" --no-print-directory
--no-print-directory
#MAKE#: 'all' is up to date.\n");
# --no-print-directory in env, -w on the command line.
$ENV{'MAKEFLAGS'} = '--no-print-directory';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-w',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKE#: 'all' is up to date.
#MAKE#: Leaving directory '#PWD#'\n");
delete $ENV{'MAKEFLAGS'};
# -w in makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-w
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKE#: 'all' is up to date.
#MAKE#: Leaving directory '#PWD#'\n");
}
# sv 63537
# -w in makefile, --no-print-directory on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-w
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '--no-print-directory',
" --no-print-directory
--no-print-directory
#MAKE#: 'all' is up to date.\n");
}
mkdir('lib2', 0777);
create_file('lib2/makefile', 'all:; $(info $(MAKEFLAGS))');
# sv 63537
# Default, no -w or --no-print-directory is specified.
run_make_test(q!
all:; $(MAKE) -C lib2
!, '',
"#MAKEPATH# -C lib2
#MAKE#[1]: Entering directory '#PWD#/lib2'
#MAKE#[1]: 'all' is up to date.
#MAKE#[1]: Leaving directory '#PWD#/lib2'\n");
# sv 63537
# --no-print-directory in makefile, -w on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--no-print-directory
\$(info \$(MAKEFLAGS))
all:
\$(info \$(MAKEFLAGS))
\$(MAKE) -C lib2
", '-w',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKEPATH# -C lib2
#MAKE#[1]: Entering directory '#PWD#/lib2'
w
#MAKE#[1]: 'all' is up to date.
#MAKE#[1]: Leaving directory '#PWD#/lib2'
#MAKE#: Leaving directory '#PWD#'\n");
}
# sv 63537
# --no-print-directory in makefile, -w in the env.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '-w';
run_make_test("
MAKEFLAGS${fl}--no-print-directory
\$(info \$(MAKEFLAGS))
all:
\$(info \$(MAKEFLAGS))
\$(MAKE) -C lib2
", '',
"#MAKE#: Entering directory '#PWD#'
w
w
#MAKEPATH# -C lib2
#MAKE#[1]: Entering directory '#PWD#/lib2'
w
#MAKE#[1]: 'all' is up to date.
#MAKE#[1]: Leaving directory '#PWD#/lib2'
#MAKE#: Leaving directory '#PWD#'\n");
}
unlink('lib2/makefile');
rmdir('lib2');
# sv 63537
# -k vs -S.
# -S in env.
$ENV{'MAKEFLAGS'} = '-S';
run_make_test(q!
$(info $(MAKEFLAGS))
all: one two
one:
$(info $(MAKEFLAGS))
false
two:; $(info $@)
!, '',
"S
S
false
#MAKE#: *** [#MAKEFILE#:6: one] Error 1", 512);
# -S in env, -k on the command line.
$ENV{'MAKEFLAGS'} = '-S';
run_make_test(q!
$(info $(MAKEFLAGS))
all: one two
one:
$(info $(MAKEFLAGS))
false
two:; $(info $@)
!, '-k',
"k
k
false
#MAKE#: *** [#MAKEFILE#:6: one] Error 1
two
#MAKE#: Target 'all' not remade because of errors.", 512);
# -k in env.
$ENV{'MAKEFLAGS'} = '-k';
run_make_test(q!
$(info $(MAKEFLAGS))
all: one two
one:
$(info $(MAKEFLAGS))
false
two:; $(info $@)
!, '',
"k
k
false
#MAKE#: *** [#MAKEFILE#:6: one] Error 1
two
#MAKE#: Target 'all' not remade because of errors.", 512);
# -k in env, -S on the command line.
$ENV{'MAKEFLAGS'} = '-k';
run_make_test(q!
$(info $(MAKEFLAGS))
all: one two
one:
$(info $(MAKEFLAGS))
false
two:; $(info $@)
!, '-S',
"S
S
false
#MAKE#: *** [#MAKEFILE#:6: one] Error 1", 512);
delete $ENV{'MAKEFLAGS'};
# -k in makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-k
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '',
"k
k
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1
two
#MAKE#: Target 'all' not remade because of errors.", 512);
}
# sv 63537
# -k in makefile and -S on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-k
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '-S',
"S
S
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512);
}
# sv 63537
# -k in makefile and -S in the env.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '-S';
run_make_test("
MAKEFLAGS${fl}-k
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '',
"S
S
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512);
}
delete $ENV{'MAKEFLAGS'};
# sv 63537
# -S in makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-S
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '',
"S
S
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1", 512);
}
# -S in makefile and -k on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-S
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '-k',
"k
k
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1
two
#MAKE#: Target 'all' not remade because of errors.", 512);
}
# sv 63537
# -S in makefile and -k in the env.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '-k';
run_make_test("
MAKEFLAGS${fl}-S
\$(info \$(MAKEFLAGS))
all: one two
one:
\$(info \$(MAKEFLAGS))
false
two:; \$(info \$@)
", '',
"k
k
false
#MAKE#: *** [#MAKEFILE#:7: one] Error 1
two
#MAKE#: Target 'all' not remade because of errors.", 512);
}
# sv 63537
# -s vs --no-silent.
# -s in env.
$ENV{'MAKEFLAGS'} = '-s';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '', "s\ns");
# -s in env, --no-silent on the command line.
$ENV{'MAKEFLAGS'} = '-s';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '--no-silent',
" --no-silent
--no-silent
#MAKE#: 'all' is up to date.\n");
# --no-silent in env.
$ENV{'MAKEFLAGS'} = '--no-silent';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '',
" --no-silent
--no-silent
#MAKE#: 'all' is up to date.\n");
# --no-silent in env, -s on the command line.
$ENV{'MAKEFLAGS'} = '--no-silent';
run_make_test(q!
$(info $(MAKEFLAGS))
all:; $(info $(MAKEFLAGS))
!, '-s', "s\ns");
delete $ENV{'MAKEFLAGS'};
# -s in the makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-s
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '', "s\ns");
}
# sv 63537
# -s in makefile and --no-silent on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}-s
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '--no-silent',
" --no-silent
--no-silent
#MAKE#: 'all' is up to date.\n");
}
# sv 63537
# -s in makefile and --no-silent in the env.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '--no-silent';
run_make_test("
MAKEFLAGS${fl}-s
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '',
" --no-silent
--no-silent
#MAKE#: 'all' is up to date.\n");
}
delete $ENV{'MAKEFLAGS'};
# sv 63537
# --no-silent in makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--no-silent
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '',
" --no-silent
--no-silent
#MAKE#: 'all' is up to date.\n");
}
# sv 63537
# --no-silent in makefile and -s on the command line.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--no-silent
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '-s', "s\ns");
}
# sv 63537
# --no-silent in makefile and -s in the env.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '-s';
run_make_test("
MAKEFLAGS${fl}--no-silent
\$(info \$(MAKEFLAGS))
all:; \$(info \$(MAKEFLAGS))
", '', "s\ns");
}
delete $ENV{'MAKEFLAGS'};
# sv 63537
# Multiple --debug switches from various origins are all combined.
# Because run_make_test regex matching facility does not allow to match against
# multiple lines, run the test twice. During the first run match the output of
# --debug=b, during the second run match the output of --debug=-j.
#
# --debug=b in makefile.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--debug=b
hello:; touch \$@
.PHONY: hello
", '', "/Updating makefiles/");
}
# --debug=b in makefile, --debug=j on the command line.
# Test for --debug=j output.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--debug=b
hello:; touch \$@
.PHONY: hello
", '--debug=j', "/Putting child/");
}
# --debug=b in makefile, --debug=j on the command line.
# Test for --debug=b output.
for my $fl (@flavors) {
run_make_test("
MAKEFLAGS${fl}--debug=b
hello:; touch \$@
.PHONY: hello
", '--debug=j', "/Updating makefiles/");
}
# --debug=j in makefile, --debug=b on the command line.
# Test that MAKEFLAGS contains --debug=b.
run_make_test(q!
MAKEFLAGS=--debug=j
$(info makeflags=$(MAKEFLAGS))
hello:; touch $@
.PHONY: hello
!, '--debug=b', "/makeflags= --debug=b/");
# --debug=b in makefile, --debug=j in the env.
# Test for --debug=j output.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '--debug=j';
run_make_test("
MAKEFLAGS${fl}--debug=b
hello:; touch \$@
.PHONY: hello
", '', "/Putting child/");
}
# --debug=b in makefile, --debug=j in the env.
# Test for --debug=b output.
for my $fl (@flavors) {
$ENV{'MAKEFLAGS'} = '--debug=j';
run_make_test("
MAKEFLAGS${fl}--debug=b
hello:; touch \$@
.PHONY: hello
", '', "/Updating makefiles/");
}
unlink('hello');
# This tells the test driver that the perl test script executed properly.
1;