Makefile revision 133165
1126596Sbms# $FreeBSD: head/tools/build/make_check/Makefile 133165 2004-08-05 09:11:44Z harti $ 2196155Ssam 3126596Sbms# Test for broken LHS expansion. 4126596Sbms# This *must* cause make(1) to detect a recursive variable, and fail as such. 5126596Sbms.if make(lhs_expn) 6126596SbmsFOO= ${BAR} 7126596SbmsBAR${NIL}= ${FOO} 8126596SbmsFOO${BAR}= ${FOO} 9126596Sbms.endif 10126596Sbms 11126596SbmsDATA1= helllo 12126596SbmsDATA2:= ${DATA1} 13126596SbmsDATA3= ${DATA2:S/ll/rr/g} 14126596SbmsDATA4:= ${DATA2:S/ll/rr/g} 15126596SbmsDATA2?= allo 16126596SbmsDATA5:= ${DATA2:S/ll/ii/g} ${DATA1:S/ll/rr/g} 17126596SbmsDATA2= yello 18126596SbmsDATA1:= ${DATA5:S/l/r/g} 19126596SbmsNIL= 20126596Sbms 21126596Sbmsall: 22126596Sbms @echo "Running test variables" 23126596Sbms @echo 1:${DATA1} 2:${DATA2} 3:${DATA3} 4:${DATA4} 5:${DATA5} | \ 24126596Sbms diff -u ${.CURDIR}/regress.variables.out - || ${MAKE} failure 25126596Sbms @echo "PASS: Test variables detected no regression, output matches." 26126596Sbms @echo "Running test targets" 27126596Sbms @${MAKE} double 2>/dev/null || ${MAKE} failure 28207325Srpaulo @echo "PASS: Test targets detected no regression." 29207325Srpaulo @echo "Running test sysvmatch" 30126596Sbms @${MAKE} sysvmatch || ${MAKE} failure 31126596Sbms @echo "PASS: Test sysvmatch detected no regression." 32233648Seadler @echo "Running test lhs_expn" 33196155Ssam @! ${MAKE} lhs_expn && true || ${MAKE} failure 34126596Sbms @echo "PASS: Test lhs_expn detected no regression." 35126596Sbms @echo "Running test notdef" 36126596Sbms @${MAKE} notdef || ${MAKE} failure 37196155Ssam @echo "PASS: Test notdef detected no regression." 38126596Sbms @echo "Running test modifiers" 39196155Ssam @${MAKE} modifiers || ${MAKE} failure 40126596Sbms @echo "PASS: Test modifiers detected no regression." 41196155Ssam @echo "Running test funny_targets" 42196155Ssam @${MAKE} funny_targets || ${MAKE} failure 43196155Ssam @echo "PASS: Test funny_targets detected no regression." 44196155Ssam @echo "Running test arith_expr" 45196155Ssam @${MAKE} arith_expr || ${MAKE} failure 46196155Ssam @echo "PASS: Test arith_expr detected no regression." 47196155Ssam @echo "Running test PATH_exists" 48196155Ssam @${MAKE} PATH_exists || ${MAKE} failure 49196155Ssam @echo "PASS: Test PATH_exists detected no regression." 50196155Ssam @echo "Running test double_quotes" 51196155Ssam @${MAKE} double_quotes || ${MAKE} failure 52196155Ssam @echo "PASS: Test double_quotes detected no regression." 53196155Ssam @echo "Running test double_quotes2" 54196155Ssam @! ${MAKE} double_quotes2 >/dev/null 2>&1 && true || ${MAKE} failure 55196155Ssam @echo "PASS: Test double_quotes2 detected no regression." 56196155Ssam @echo "Running test pass_cmd_vars" 57196155Ssam @${MAKE} pass_cmd_vars || ${MAKE} failure 58196155Ssam @echo "PASS: Test pass_cmd_vars detected no regression." 59196155Ssam @echo "Running test plus_flag" 60196155Ssam @${MAKE} plus_flag || ${MAKE} failure 61196155Ssam @echo "PASS: Test plus_flag detected no regression." 62196155Ssam 63196155Ssam.if make(double) 64196155Ssam# Doubly-defined targets. make(1) will warn, but use the "right" one. If it 65196155Ssam# switches to using the "non-right" one, it breaks things worse than a little 66196155Ssam# regression test. 67196155Ssamdouble: 68196155Ssam @true 69126596Sbms 70196155Ssamdouble: 71196155Ssam @false 72196155Ssam.endif 73196155Ssam 74196155Ssam.if make(sysvmatch) 75196155Ssam# Some versions of FreeBSD make(1) do not handle a nil LHS in sysvsubst. 76196155Ssamsysvmatch: 77196155Ssam @echo EMPTY ${NIL:=foo} LHS | \ 78196155Ssam diff -u ${.CURDIR}/regress.sysvmatch.out - || false 79196155Ssam.endif 80196155Ssam 81196155Ssam# A bogus target for the lhs_expn test; If this is reached, then the make(1) 82196155Ssam# program has not errored out because of the recursion caused by not expanding 83196155Ssam# the left-hand-side's embedded variables above. 84196155Ssamlhs_expn: 85196155Ssam @true 86126596Sbms 87196155Ssam.if make(notdef) 88196155Ssam# make(1) claims to only evaluate a conditional as far as is necessary 89196155Ssam# to determine its value; that was not always the case. 90196155Ssam.undef notdef 91196155Ssamnotdef: 92196155Ssam.if defined(notdef) && ${notdef:U} 93196155Ssam.endif 94196155Ssam.endif 95196155Ssam 96196155Ssam.if make(modifiers) 97196155Ssam# See if make(1) supports the C modifier. 98196155Ssammodifiers: 99196155Ssam @if ${MAKE} -V .CURDIR:C/.// 2>&1 >/dev/null | \ 100196155Ssam grep -q "Unknown modifier 'C'"; then \ 101126596Sbms false; \ 102196155Ssam fi 103196155Ssam.endif 104196155Ssam 105196155Ssam.if make(funny_targets) 106196155Ssamfunny_targets: colons::target exclamation!target 107196155Ssamcolons::target: 108196155Ssamexclamation!target: 109196155Ssam.endif 110126596Sbms 111196155Ssam.if make(arith_expr) 112196155Ssamarith_expr: 113196155Ssam# See if arithmetic expression parsing is broken. 114196155Ssam# The different spacing below is intentional. 115196155SsamVALUE= 0 116196155Ssam.if (${VALUE} < 0)||(${VALUE}>0) 117196155Ssam.endif 118196155Ssam.endif 119196155Ssam 120196155Ssam.if make(PATH_exists) 121196155SsamPATH_exists: 122196155Ssam.PATH: ${.CURDIR} 123126596Sbms.if !exists(${.CURDIR}/) || !exists(${.CURDIR}/.) || !exists(${.CURDIR}/..) 124196155Ssam.error exists() failed 125196155Ssam.endif 126196155Ssam.endif 127196155Ssam 128196155Ssam.if make(double_quotes) 129196155SsamVALUE= foo "" 130196155Ssamdouble_quotes: 131196155Ssam.if ${VALUE:S/$//} != ${VALUE} 132196155Ssam.error "" reduced to " 133196155Ssam.endif 134126596Sbms.endif 135126596Sbms 136196155Ssam.if make(double_quotes2) 137196155Ssamdouble_quotes2: 138196155Ssam @cat /dev/null "" 139196155Ssam.endif 140196155Ssam 141196155Ssam# 142196155Ssam# Check passing of variable via MAKEFLAGS 143196155Ssam# 144196155Ssam.if make(pass_cmd_vars) 145196155Ssampass_cmd_vars: 146196155Ssam @${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_1 147196155Ssam @${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_2 148196155Ssam @${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_3 149196155Ssam @${MAKE} CMD1=cmd1 CMD2=cmd2 pass_cmd_vars_4 150196155Ssam.endif 151196155Ssam 152126596Sbms.if make(pass_cmd_vars_1) 153196155Ssam# Check that the variable definition arrived from the calling make 154196155Ssampass_cmd_vars_1: 155196155Ssam @: 156196155Ssam 157196155Ssam.if ${CMD1} != cmd1 || ${CMD2} != cmd2 158196155Ssam.error variables not passed through MAKEFLAGS 159196155Ssam.endif 160196155Ssam 161196155Ssam# Check that the variable definition is in MAKEFLAGS 162196155Ssam.if ${.MAKEFLAGS:MCMD1=*} != "CMD1=cmd1" || ${.MAKEFLAGS:MCMD2=*} != "CMD2=cmd2" 163196155Ssam.error variable assignment not found in $${MAKEFLAGS} 164196155Ssam.endif 165196155Ssam 166196155Ssam# Check that the variable definition is not in MFLAGS 167233648Seadler.if ${MFLAGS:MCMD1=*} != "" || ${MFLAGS:MCMD2=*} != "" 168196155Ssam.error variable assignment found in $${MFLAGS} 169196155Ssam.endif 170126596Sbms.endif 171196155Ssam 172196155Ssam.if make(pass_cmd_vars_2) 173196155Ssam# Check that we cannot override the passed variables 174196155SsamCMD1=foo1 175196155SsamCMD2=foo2 176196155Ssam 177196155Ssam.if ${CMD1} != cmd1 || ${CMD2} != cmd2 178196155Ssam.error MAKEFLAGS-passed variables overridden 179196155Ssam.endif 180196155Ssam 181196155Ssampass_cmd_vars_2: 182196155Ssam @: 183196155Ssam.endif 184196155Ssam 185196155Ssam.if make(pass_cmd_vars_3) 186196155Ssam# Check that we can override the passed variables on the next sub-make's 187196155Ssam# command line 188196155Ssam 189196155Ssampass_cmd_vars_3: 190196155Ssam @${MAKE} CMD1=foo1 pass_cmd_vars_3_1 191196155Ssam.endif 192196155Ssam 193196155Ssam.if make(pass_cmd_vars_3_1) 194196155Ssam.if ${CMD1} != foo1 || ${CMD2} != cmd2 195196155Ssam.error MAKEFLAGS-passed variables not overridden on command line 196196155Ssam.endif 197196155Ssampass_cmd_vars_3_1: 198196155Ssam @: 199196155Ssam.endif 200196155Ssam 201196155Ssam.if make(pass_cmd_vars_4) 202196155Ssam# Ensure that a variable assignment passed via MAKEFLAGS may be overwritten 203196155Ssam# by evaluating the .MAKEFLAGS target. 204196155Ssam 205196155Ssam.MAKEFLAGS: CMD1=baz1 206196155Ssam 207196155Ssampass_cmd_vars_4: 208211397Sjoel @: 209196155Ssam# The following does not work yet (see standards/57295) 210196155Ssam# @${MAKE} pass_cmd_vars_4_1 211196155Ssam 212211397Sjoel.if ${CMD1} != baz1 || ${CMD2} != cmd2 213196155Ssam.error MAKEFLAGS-passed variables not overridden via .MAKEFLAGS target 214196155Ssam.endif 215196155Ssam 216196155Ssam.endif 217196155Ssam.if make(pass_cmd_vars_4_1) 218196155Ssam.if ${CMD1} != baz1 || ${CMD2} != cmd2 219196155Ssam.error MAKEFLAGS-passed variables not overridden via .MAKEFLAGS target (2) 220196155Ssam.endif 221196155Ssampass_cmd_vars_4_1: 222196155Ssam @: 223196155Ssam.endif 224233648Seadler 225196155Ssam# 226196155Ssam# Test whether make supports the '+' flag (meaning: execute even with -n) 227196155Ssam# 228197300Sbrueffer.if make(plus_flag) 229196155SsamOUT != ${MAKE} -n plus_flag_1 230196155Ssam.if ${OUT} != "/tmp" 231196155Ssam.error make doesn't handle + flag 232196155Ssam.endif 233196155Ssamplus_flag: 234196155Ssam @: 235233648Seadler.endif 236196155Ssam.if make(plus_flag_1) 237196155Ssamplus_flag_1: 238196155Ssam +@cd /tmp; pwd 239196155Ssam.endif 240196155Ssam 241196155Ssamfailure: 242196155Ssam @echo "FAIL: Test failed: regression detected. See above." 243196155Ssam @false 244196155Ssam