#!/bin/sh

# 23.03.2007 Volker Quetschke
# Test .WINPATH attribute (A cygwin only attribute that is ignored
# elsewhere).
# (issue 73499)

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

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

# Remove files from prior failed run
rm -rf $tmpfiles

# Remember to quote variables in generated makefiles( $ -> \$ ).
# Test 1 - Test if .WINPATH is accepted as global attribute
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

.WINPATH :

all :
	@echo OK1

EOT

output1=`eval ${DMAKEPROG} -r -f $file1`
result1=$?
if test "$output1" != "OK1"; then
  echo "Subtest 1: Wrong result: $output1"
  result1=1
else
  echo "Subtest 1: OK"
fi 

# Test 2 - Test if .WINPATH is accepted as local attribute
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

all .WINPATH :
	@echo OK2

EOT

output2=`eval ${DMAKEPROG} -r -f $file1`
result2=$?
if test "$output2" != "OK2"; then
  echo "Subtest 2: Wrong result: $output2"
  result2=1
else
  echo "Subtest 2: OK"
fi 


# Test 3 - Test if $@ and $* are DOSified.
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

/tmp/blah.xx .WINPATH :
	@echo at:\$@:star:\$*:

EOT

if test x`uname -o 2> /dev/null` = "xCygwin"; then
    output3=`eval ${DMAKEPROG} -r -f $file1`
    result3=$?
    if test "$output3" != "at:`cygpath -m /tmp/blah.xx`:star:`cygpath -m /tmp/blah`:"; then
        echo "Subtest : Wrong result: $output3"
        result3=1
    else
        echo "Subtest 3: OK"
    fi
else
    echo "Subtest 3 ignored for non cygwin environment"
    result3=0
fi 


# Test 4 - Test if $(PWD), $(MAKEDIR) are DOSified.
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

all .WINPATH .SETDIR=/tmp :
	@echo :\$(PWD):\$(MAKEDIR):

EOT

if test x`uname -o 2> /dev/null` = "xCygwin"; then
    output4=`eval ${DMAKEPROG} -r -f $file1`
    result4=$?
    mypwd=`pwd`
    if test "$output4" != ":`cygpath -m /tmp`:`cygpath -m $mypwd`:"; then
        echo "Subtest : Wrong result: $output4"
        result4=1
    else
        echo "Subtest 4: OK"
    fi
else
    echo "Subtest 4 ignored for non cygwin environment"
    result4=0
fi 


# Test 5 - Test if $(TMD) is DOSified (if it is an absolute path).
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

all .WINPATH .SETDIR=/ :
	@echo :\$(PWD):\$(TMD):

EOT

if test x`uname -o 2> /dev/null` = "xCygwin"; then
    output5=`eval ${DMAKEPROG} -r -f $file1`
    result5=$?
    mypwd=`pwd`
    if test "$output5" != ":`cygpath -m /`:`cygpath -m $mypwd`:"; then
        echo "Subtest : Wrong result: $output5"
        result5=1
    else
        echo "Subtest 5: OK"
    fi
else
    echo "Subtest 5 ignored for non cygwin environment"
    result5=0
fi 


# Test 6 - Test if .WINPATH changes $@ in conditional macro.
cat > $file1 <<EOT
SHELL*:=/bin/sh 
SHELLFLAGS*:=-ce

/tmp/all.bla ?= QQQ=\$@
/tmp/all.bla .WINPATH :
	@echo :\$(QQQ):
EOT

if test x`uname -o 2> /dev/null` = "xCygwin"; then
    output6=`eval ${DMAKEPROG} -r -f $file1`
    result6=$?
    if test "$output6" != ":`cygpath -m /tmp/all.bla`:"; then
        echo "Subtest : Wrong result: $output6"
        result6=1
    else
        echo "Subtest 6: OK"
    fi
else
    echo "Subtest 6 ignored for non cygwin environment"
    result6=0
fi 


if test $result1 -eq 0 -a $result2 -eq 0 \
    -a $result3 -eq 0 -a $result4 -eq 0 \
    -a $result5 -eq 0 -a $result6 -eq 0; then
    echo "Success - Cleaning up" && rm -f ${tmpfiles}
    exit
else
    echo "Failure!"
    exit 1
fi


syntax highlighted by Code2HTML, v. 0.9.1