mirror of
https://github.com/mirror/make.git
synced 2026-08-31 03:38:03 +08:00
Implement new "if... else if... endif" semantics.
This commit is contained in:
@@ -3,12 +3,7 @@ $description = "Check GNU make conditionals.";
|
||||
|
||||
$details = "Attempt various different flavors of GNU make conditionals.";
|
||||
|
||||
open(MAKEFILE,"> $makefile");
|
||||
|
||||
# The Contents of the MAKEFILE ...
|
||||
|
||||
print MAKEFILE <<'EOMAKE';
|
||||
objects = foo.obj
|
||||
run_make_test('
|
||||
arg1 = first
|
||||
arg2 = second
|
||||
arg3 = third
|
||||
@@ -22,13 +17,13 @@ else
|
||||
@echo arg1 NOT equal arg2
|
||||
endif
|
||||
|
||||
ifeq '$(arg2)' "$(arg5)"
|
||||
ifeq \'$(arg2)\' "$(arg5)"
|
||||
@echo arg2 equals arg5
|
||||
else
|
||||
@echo arg2 NOT equal arg5
|
||||
endif
|
||||
|
||||
ifneq '$(arg3)' '$(arg4)'
|
||||
ifneq \'$(arg3)\' \'$(arg4)\'
|
||||
@echo arg3 NOT equal arg4
|
||||
else
|
||||
@echo arg3 equal arg4
|
||||
@@ -43,32 +38,18 @@ ifdef arg4
|
||||
@echo arg4 is defined
|
||||
else
|
||||
@echo arg4 is NOT defined
|
||||
endif
|
||||
|
||||
EOMAKE
|
||||
|
||||
close(MAKEFILE);
|
||||
|
||||
&run_make_with_options($makefile,"",&get_logfile,0);
|
||||
|
||||
$answer = "arg1 NOT equal arg2
|
||||
endif',
|
||||
'',
|
||||
'arg1 NOT equal arg2
|
||||
arg2 equals arg5
|
||||
arg3 NOT equal arg4
|
||||
variable is undefined
|
||||
arg4 is defined
|
||||
";
|
||||
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
arg4 is defined');
|
||||
|
||||
|
||||
# Test expansion of variables inside ifdef.
|
||||
|
||||
$makefile2 = &get_tmpfile;
|
||||
|
||||
open(MAKEFILE, "> $makefile2");
|
||||
|
||||
print MAKEFILE <<'EOF';
|
||||
|
||||
run_make_test('
|
||||
foo = 1
|
||||
|
||||
FOO = foo
|
||||
@@ -92,15 +73,73 @@ ifdef $(call FUNC,DEF)3
|
||||
DEF3 = yes
|
||||
endif
|
||||
|
||||
all:; @echo DEF=$(DEF) DEF2=$(DEF2) DEF3=$(DEF3)
|
||||
all:; @echo DEF=$(DEF) DEF2=$(DEF2) DEF3=$(DEF3)',
|
||||
'',
|
||||
'DEF=yes DEF2=yes DEF3=yes');
|
||||
|
||||
EOF
|
||||
|
||||
close(MAKEFILE)
|
||||
# Test all the different "else if..." constructs
|
||||
|
||||
&run_make_with_options($makefile2,"",&get_logfile,0);
|
||||
$answer = "DEF=yes DEF2=yes DEF3=yes\n";
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
run_make_test('
|
||||
arg1 = first
|
||||
arg2 = second
|
||||
arg3 = third
|
||||
arg4 = cc
|
||||
arg5 = fifth
|
||||
|
||||
result =
|
||||
|
||||
ifeq ($(arg1),$(arg2))
|
||||
result += arg1 equals arg2
|
||||
else ifeq \'$(arg2)\' "$(arg5)"
|
||||
result += arg2 equals arg5
|
||||
else ifneq \'$(arg3)\' \'$(arg3)\'
|
||||
result += arg3 NOT equal arg4
|
||||
else ifndef arg5
|
||||
result += variable is undefined
|
||||
else ifdef undefined
|
||||
result += arg4 is defined
|
||||
else
|
||||
result += success
|
||||
endif
|
||||
|
||||
|
||||
all: ; @echo $(result)',
|
||||
'',
|
||||
'success');
|
||||
|
||||
|
||||
# Test some random "else if..." construct nesting
|
||||
|
||||
run_make_test('
|
||||
arg1 = first
|
||||
arg2 = second
|
||||
arg3 = third
|
||||
arg4 = cc
|
||||
arg5 = second
|
||||
|
||||
ifeq ($(arg1),$(arg2))
|
||||
$(info failed 1)
|
||||
else ifeq \'$(arg2)\' "$(arg2)"
|
||||
ifdef undefined
|
||||
$(info failed 2)
|
||||
else
|
||||
$(info success)
|
||||
endif
|
||||
else ifneq \'$(arg3)\' \'$(arg3)\'
|
||||
$(info failed 3)
|
||||
else ifdef arg5
|
||||
$(info failed 4)
|
||||
else ifdef undefined
|
||||
$(info failed 5)
|
||||
else
|
||||
$(info failed 6)
|
||||
endif
|
||||
|
||||
.PHONY: all
|
||||
all: ; @:',
|
||||
'',
|
||||
'success');
|
||||
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
|
||||
Reference in New Issue
Block a user