freebsd-src/unit-tests/impsrc.mk
Simon J. Gerraty 6bbc783f48 Import 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 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 16:11:04 +00:00

61 lines
1.7 KiB
Makefile

# $NetBSD: impsrc.mk,v 1.3 2020/08/07 13:43:50 rillig Exp $
# Does ${.IMPSRC} work properly?
# It should be set, in order of precedence, to ${.TARGET} of:
# 1) the implied source of a transformation rule,
# 2) the first prerequisite from the dependency line of an explicit rule, or
# 3) the first prerequisite of an explicit rule.
#
# Items 2 and 3 work in GNU make.
# Items 2 and 3 are not required by POSIX 2018.
all: target1.z target2 target3 target4
.SUFFIXES: .x .y .z
.x.y: source1
@echo 'expected: target1.x'
@echo 'actual: $<'
.y.z: source2
@echo 'expected: target1.y'
@echo 'actual: $<'
# (3) Making target1.z out of target1.y is done because of an inference rule.
# Therefore $< is available here.
# (2) This is an additional dependency on the inference rule .x.y.
# The dependency target1.x comes from the inference rule,
# therefore it is available as $<.
target1.y: source3
# (1) This is an explicit dependency, not an inference rule.
# Therefore POSIX does not specify that $< be available here.
target1.x: source4
@echo 'expected: ' # either 'source4' or ''
@echo 'actual: $<'
# (4) This is an explicit dependency, independent of any inference rule.
# Therefore $< is not available here.
target2: source1 source2
@echo 'expected: '
@echo 'actual: $<'
# (5) These are two explicit dependency rules.
# The first doesn't have any dependencies, only the second has.
# If any, the value of $< would be 'source2'.
target3: source1
target3: source2 source3
@echo 'expected: '
@echo 'actual: $<'
# (6) The explicit rule does not have associated commands.
# The value of $< might come from that rule,
# but it's equally fine to leave $< undefined.
target4: source1
target4:
@echo 'expected: '
@echo 'actual: $<'
source1 source2 source3 source4: