directive-if.mk revision 1.5
1# $NetBSD: directive-if.mk,v 1.5 2020/11/10 22:23:37 rillig Exp $ 2# 3# Tests for the .if directive. 4 5# TODO: Implementation 6 7.if 0 8. error 9.else 10. info 0 evaluates to false. 11.endif 12 13.if 1 14. info 1 evaluates to true. 15.else 16. error 17.endif 18 19# There is no '.ifx'. 20# 21# The commit from 2005-05-01 intended to detect this situation, but it failed 22# to do this since the call to is_token had its arguments switched. They were 23# expected as (str, token, token_len) but were actually passed as (token, str, 24# token_len). This made is_token return true even if the directive was 25# directly followed by alphanumerical characters, which was wrong. The 26# typical cases produced an error message such as "Malformed conditional 27# (x 123)", while the intended error message was "Unknown directive". 28# 29# Back at that time, the commits only modified the main code but did not add 30# the corresponding unit tests. This allowed the bug to hide for more than 31# 15 years. 32# 33# Since 2020-11-10, the correct error message is produced. The '.ifx' is no 34# longer interpreted as a variant of '.if', therefore the '.error' and '.else' 35# are interpreted as ordinary directives, producing the error messages 36# "if-less else" and "if-less endif". 37.ifx 123 38. error 39.else 40. error 41.endif 42 43# Missing condition. 44.if 45. error 46.else 47. error 48.endif 49 50# A plain word must not start with a '"'. It may contain a embedded quotes 51# though, which are kept. The quotes need not be balanced. The next space 52# ends the word, and the remaining " || 1" is parsed as "or true". 53.if ${:Uplain"""""} == plain""""" || 1 54. info Quotes in plain words are probably a mistake. 55# XXX: Accepting quotes in plain words is probably a mistake as well. 56.else 57. error 58.endif 59 60all: 61