#!/bin/sh

# 01.06.2005 Volker Quetschke
# Tests for dmake function macros. (issue 36027, issue 37053)

: ${DMAKEPROG:=dmake}
file1="mymakefile.mk"
tmpfiles="$file1"

trap '{ echo "trapped signal - removing temporary files" ; rm -rf $tmpfiles ; }' 1 2 3 15

trap 'rm -rf $tmpfiles' 1 2 3 15 

# Remember to quote variables in generated makefiles( $ -> \$ ).
cat > $file1 <<EOT
# Testing function macros
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

TEST1:=a b c

all:
	@echo \$\$(and ...) section
	test "::" = ":\$(and  \$(nil) \$(nil)  ):"
	test ":t:" = ":\$(and  a b  ):"
	test "::" = ":\$(and  \$(nil) \
 \$(nil)  ):"
	test "::" = ":\$(and   \
   ):"

	@echo -e \n\$\$(assign ...) section
	test ":A:" =  ":\$(assign A := B ):"
	test "\$(A)" = "B"
	test ":A:" = ":\$(assign A\
 := C ):"
	test "\$(A)" = "C"

	@echo -e \n\$\$(echo ...) section
	test ":123:" = ":\$(echo 123    ):"
	test ":123:" = ":\$(echo  123    ):"
	test ":123:" = ":\$(echo\
 123    ):"
	test ":123:" = ":\$(echo     \
 123    ):"

	@echo -e \n\$\$(eq ...) section
	test ":true:" = ":\$(eq,1,1 true false):"
	test ":true:" = ":\$(eq,1,1\
 true false):"

#       These tests need to use a shell
	+@echo -e '\n\$\$(foreach ...) section'
	+test ":[a] [b] [c]:" = ":\$(foreach,i,\$(TEST1) [\$i]):"
	+test ":[a] [b] [c]:" = ":\$(foreach,i,\$(TEST1)     [\$i]):"
	+test ":[a] [b] [c]:" = ":\$(foreach,i,\$(TEST1) [\$i]  ):"
	+test ":[a] [b] [c]:" = ":\$(foreach,i,\$(TEST1) \
    [\$i]  ):"

	@echo -e \n\$\$(nil ...) section
	test "::" = ":\$(nil abc):"
#   Fails with syntax error
	test "::" = ":\$(nil \
          ):"

	@echo -e \n\$\$(not ...) section
	test "::" = ":\$(not abc):"
	test ":t:" = ":\$(not \$(NULL)):"
	test ":t:" = ":\$(not   ):"
	test ":t:" = ":\$(not  \
     ):"

	@echo -e \n\$\$(null ...) section
	test ":true:" = ":\$(null, true      false):"
	test ":false:" = ":\$(null,a true false):"
	test ":false:" = ":\$(null,a true false    ):"
	test ":false:" = ":\$(null,a \
     true false    ):"
	test ":true:" = ":\$(null, \
     true false    ):"

	@echo -e \n\$\$(or ...) section
	test "::" = ":\$(or  \$(nil) \$(nil)  ):"
	test ":t:" = ":\$(or  a \$(nil)  ):"
	test "::" = ":\$(or  \$(nil) \
 \$(nil)  ):"
	test "::" = ":\$(or   \
   ):"

EOT

${DMAKEPROG} -r -f $file1
result=$?

test $result -eq 0 && echo "Success - Cleaning up" && rm -f ${tmpfiles}
test $result -ne 0 && echo "Failure!"
exit $result