#                                                                    -*-perl-*-
$description = "Check GNU Make conditionals.";

$details = "Attempt various different flavors of GNU Make conditionals.";

run_make_test('
arg1 = first
arg2 = second
arg3 = third
arg4 = cc
arg5 = second

all:
ifeq ($(arg1),$(arg2))
	@echo arg1 equals arg2
else
	@echo arg1 NOT equal arg2
endif

ifeq \'$(arg2)\' "$(arg5)"
	@echo arg2 equals arg5
else
	@echo arg2 NOT equal arg5
endif

ifneq \'$(arg3)\' \'$(arg4)\'
	@echo arg3 NOT equal arg4
else
	@echo arg3 equal arg4
endif

ifndef undefined
	@echo variable is undefined
else
	@echo variable undefined is defined
endif
ifdef arg4
	@echo arg4 is defined
else
	@echo arg4 is NOT defined
endif',
              '',
              'arg1 NOT equal arg2
arg2 equals arg5
arg3 NOT equal arg4
variable is undefined
arg4 is defined');


# Test expansion of variables inside ifdef.

run_make_test('
foo = 1

FOO = foo
F = f

DEF = no
DEF2 = no

ifdef $(FOO)
DEF = yes
endif

ifdef $(F)oo
DEF2 = yes
endif


DEF3 = no
FUNC = $1
ifdef $(call FUNC,DEF)3
  DEF3 = yes
endif

all:; @echo DEF=$(DEF) DEF2=$(DEF2) DEF3=$(DEF3)',
              '',
              'DEF=yes DEF2=yes DEF3=yes');


# Test all the different "else if..." constructs

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');

# SV 47960 : ensure variable assignments in non-taken legs don't cause problems
run_make_test('
ifneq ($(FOO),yes)
target:
else
BAR = bar
target:
endif
	@echo one
',
              '', "one\n");

# SV 64085: Ensure recipe prefixed conditionals are never considered
run_make_test(q!
blah=1
ifdef blah
else
	else
endif
all:;
!,
    '', "#MAKE#: 'all' is up to date.");

run_make_test(q!
blah=1
ifdef blah
else
	endif
endif
all:;
!,
    '', "#MAKE#: 'all' is up to date.");

run_make_test(q!
blah=1
ifdef blah
else
	ifdef blah
endif
all:;
!,
    '', "#MAKE#: 'all' is up to date.");

run_make_test(q!
blah=1
all:;
foo:
ifdef blah
	ifdef blah
endif
!,
    '', "#MAKE#: 'all' is up to date.");

run_make_test(q!
blah=1
all:;
foo:
ifdef blah
	endif
endif
!,
    '', "#MAKE#: 'all' is up to date.");

run_make_test(q!
blah=1
all:;
foo:
ifdef blah
	else
else
endif
!,
    '', "#MAKE#: 'all' is up to date.");

# SV 64402: parse braces in ifeq/ifneq properly

run_make_test(q!
ifeq ($(and a,b),)
endif
ifeq (${and a,b},)
endif
ifeq (${and $(x),${or $(z),${q}}},)
endif
ifeq (${and ),(},)
endif
ifeq ($(and },{),)
endif
# We can hide the comma in a variable
C = ,
ifeq ((and a$Cb),)
endif
all:;
!,
    '', "#MAKE#: 'all' is up to date.");

# The "," in "$," is a variable name not a comma
run_make_test(q!
ifeq ($,,)
$(info ok)
endif
all:;
!,
    '', "ok\n#MAKE#: 'all' is up to date.");

# Without variable references we don't do anything special with parens
run_make_test(q!
ifeq ((and a,b),)
endif
all:;
!,
    '', "#MAKEFILE#:2: extraneous text after 'ifeq' directive\n#MAKE#: 'all' is up to date.");

# This tells the test driver that the perl test script executed properly.
1;

### Local Variables:
### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
### End:
