Module Name: src
Committed By: rillig
Date: Fri Aug 7 13:43:50 UTC 2020
Modified Files:
src/usr.bin/make/unit-tests: Makefile impsrc.exp impsrc.mk
Log Message:
make(1): enable test for .IMPSRC
Having this test disabled was very confusing since its content didn't
match the actual behavior, and this also differs from the GNU make
behavior.
To generate a diff of this commit:
cvs rdiff -u -r1.85 -r1.86 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/make/unit-tests/impsrc.exp
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/impsrc.mk
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.85 src/usr.bin/make/unit-tests/Makefile:1.86
--- src/usr.bin/make/unit-tests/Makefile:1.85 Thu Aug 6 16:23:52 2020
+++ src/usr.bin/make/unit-tests/Makefile Fri Aug 7 13:43:50 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.85 2020/08/06 16:23:52 sjg Exp $
+# $NetBSD: Makefile,v 1.86 2020/08/07 13:43:50 rillig Exp $
#
# Unit tests for make(1)
#
@@ -55,7 +55,7 @@ TESTS+= export-env
TESTS+= forloop
TESTS+= forsubst
TESTS+= hash
-TESTS+= # impsrc # broken by reverting POSIX changes
+TESTS+= impsrc
TESTS+= include-main
TESTS+= lint
TESTS+= misc
Index: src/usr.bin/make/unit-tests/impsrc.exp
diff -u src/usr.bin/make/unit-tests/impsrc.exp:1.1 src/usr.bin/make/unit-tests/impsrc.exp:1.2
--- src/usr.bin/make/unit-tests/impsrc.exp:1.1 Sat Aug 23 15:05:40 2014
+++ src/usr.bin/make/unit-tests/impsrc.exp Fri Aug 7 13:43:50 2020
@@ -1,13 +1,13 @@
-expected: source4
-actual: source4
+expected:
+actual:
expected: target1.x
actual: target1.x
expected: target1.y
actual: target1.y
-expected: source1
-actual: source1
-expected: source2
-actual: source2
-expected: source1
-actual: source1
+expected:
+actual:
+expected:
+actual:
+expected:
+actual:
exit status 0
Index: src/usr.bin/make/unit-tests/impsrc.mk
diff -u src/usr.bin/make/unit-tests/impsrc.mk:1.2 src/usr.bin/make/unit-tests/impsrc.mk:1.3
--- src/usr.bin/make/unit-tests/impsrc.mk:1.2 Sat Aug 30 22:21:07 2014
+++ src/usr.bin/make/unit-tests/impsrc.mk Fri Aug 7 13:43:50 2020
@@ -1,4 +1,4 @@
-# $NetBSD: impsrc.mk,v 1.2 2014/08/30 22:21:07 sjg Exp $
+# $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:
@@ -6,6 +6,8 @@
# 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
@@ -19,25 +21,40 @@ all: target1.z target2 target3 target4
@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: 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: source1'
+ @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: source2'
+ @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: source1'
+ @echo 'expected: '
@echo 'actual: $<'
source1 source2 source3 source4:
-