Simon J. Gerraty 2c3632d14f Update to bmake-20200902
Lots of code refactoring, simplification and cleanup.
Lots of new unit-tests providing much higher code coverage.
All courtesy of rillig at netbsd.

Other significant changes:

o new read-only variable .SHELL which provides the path of the shell
  used to run scripts (as defined by  the .SHELL target).

o variable parsing detects more errors.

o new debug option -dl: LINT mode, does the equivalent of := for all
  variable assignments so that file and line number are reported for
  variable parse errors.
2020-09-05 19:29:42 +00:00

64 lines
1.5 KiB
Makefile

# $NetBSD: cond-func.mk,v 1.1 2020/08/20 17:45:47 rillig Exp $
#
# Tests for those parts of the functions in .if conditions that are common
# among several functions.
#
# The below test uses the function defined(...) since it has no side-effects,
# the other functions (except empty(...)) would work equally well.
DEF= defined
${:UA B}= variable name with spaces
${:UVAR(value)}= variable name with parentheses
${:UVAR{value}}= variable name with braces
.if !defined(DEF)
.error
.endif
# Horizontal whitespace after the opening parenthesis is ignored.
.if !defined( DEF)
.error
.endif
# Horizontal whitespace before the closing parenthesis is ignored.
.if !defined(DEF )
.error
.endif
# The argument of a function must not directly contain whitespace.
.if !defined(A B)
.error
.endif
# If necessary, the whitespace can be generated by a variable expression.
.if !defined(${:UA B})
.error
.endif
# Characters that could be mistaken for operators must not appear directly
# in a function argument. As with whitespace, these can be generated
# indirectly.
#
# It's not entirely clear why these characters are forbidden.
# The most plausible reason seems to be typo detection.
.if !defined(A&B)
.error
.endif
.if !defined(A|B)
.error
.endif
# Even parentheses may appear in variable names.
# They must be balanced though.
.if !defined(VAR(value))
.error
.endif
# Braces do not have any special meaning when parsing arguments.
.if !defined(VAR{value})
.error
.endif
all:
@:;