1# $NetBSD: cond-cmp-string.mk,v 1.11 2020/10/30 14:53:31 rillig Exp $ 2# 3# Tests for string comparisons in .if conditions. 4 5# This is a simple comparison of string literals. 6# Nothing surprising here. 7.if "str" != "str" 8. error 9.endif 10 11# The right-hand side of the comparison may be written without quotes. 12.if "str" != str 13. error 14.endif 15 16# The left-hand side of the comparison must be enclosed in quotes. 17# This one is not enclosed in quotes and thus generates an error message. 18.if str != str 19. error 20.endif 21 22# The left-hand side of the comparison requires a defined variable. 23# The variable named "" is not defined, but applying the :U modifier to it 24# makes it "kind of defined" (see VAR_KEEP). Therefore it is ok here. 25.if ${:Ustr} != "str" 26. error 27.endif 28 29# Any character in a string literal may be escaped using a backslash. 30# This means that "\n" does not mean a newline but a simple "n". 31.if "string" != "\s\t\r\i\n\g" 32. error 33.endif 34 35# It is not possible to concatenate two string literals to form a single 36# string. 37.if "string" != "str""ing" 38. error 39.endif 40 41# There is no = operator for strings. 42.if !("value" = "value") 43. error 44.else 45. error 46.endif 47 48# There is no === operator for strings either. 49.if !("value" === "value") 50. error 51.else 52. error 53.endif 54 55# A variable expression can be enclosed in double quotes. 56.if ${:Uword} != "${:Uword}" 57. error 58.endif 59 60# Between 2003-01-01 (maybe even earlier) and 2020-10-30, adding one of the 61# characters " \t!=><" directly after a variable expression resulted in a 62# "Malformed conditional", even though the string was well-formed. 63.if ${:Uword } != "${:Uword} " 64. error 65.endif 66# Some other characters worked though, and some didn't. 67# Those that are mentioned in is_separator didn't work. 68.if ${:Uword0} != "${:Uword}0" 69. error 70.endif 71.if ${:Uword&} != "${:Uword}&" 72. error 73.endif 74.if ${:Uword!} != "${:Uword}!" 75. error 76.endif 77.if ${:Uword<} != "${:Uword}<" 78. error 79.endif 80 81# Adding another variable expression to the string literal works though. 82.if ${:Uword} != "${:Uwo}${:Urd}" 83. error 84.endif 85 86# Adding a space at the beginning of the quoted variable expression works 87# though. 88.if ${:U word } != " ${:Uword} " 89. error 90.endif 91