Module Name: src Committed By: rillig Date: Sun Nov 22 19:37:28 UTC 2020
Modified Files: src/distrib/sets/lists/tests: mi src/usr.bin/make/unit-tests: Makefile Added Files: src/usr.bin/make/unit-tests: cond-func-make-main.exp cond-func-make-main.mk Log Message: make(1): document the selection of the main target To generate a diff of this commit: cvs rdiff -u -r1.971 -r1.972 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.216 -r1.217 src/usr.bin/make/unit-tests/Makefile cvs rdiff -u -r0 -r1.1 src/usr.bin/make/unit-tests/cond-func-make-main.exp \ src/usr.bin/make/unit-tests/cond-func-make-main.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.971 src/distrib/sets/lists/tests/mi:1.972 --- src/distrib/sets/lists/tests/mi:1.971 Sat Nov 21 10:32:42 2020 +++ src/distrib/sets/lists/tests/mi Sun Nov 22 19:37:27 2020 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.971 2020/11/21 10:32:42 rillig Exp $ +# $NetBSD: mi,v 1.972 2020/11/22 19:37:27 rillig Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -4851,6 +4851,8 @@ ./usr/tests/usr.bin/make/unit-tests/cond-func-empty.mk tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/make/unit-tests/cond-func-exists.exp tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/make/unit-tests/cond-func-exists.mk tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/make/unit-tests/cond-func-make-main.exp tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/make/unit-tests/cond-func-make-main.mk tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/make/unit-tests/cond-func-make.exp tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/make/unit-tests/cond-func-make.mk tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/make/unit-tests/cond-func-target.exp tests-usr.bin-tests compattestfile,atf Index: src/usr.bin/make/unit-tests/Makefile diff -u src/usr.bin/make/unit-tests/Makefile:1.216 src/usr.bin/make/unit-tests/Makefile:1.217 --- src/usr.bin/make/unit-tests/Makefile:1.216 Sun Nov 22 18:44:10 2020 +++ src/usr.bin/make/unit-tests/Makefile Sun Nov 22 19:37:27 2020 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.216 2020/11/22 18:44:10 rillig Exp $ +# $NetBSD: Makefile,v 1.217 2020/11/22 19:37:27 rillig Exp $ # # Unit tests for make(1) # @@ -58,6 +58,7 @@ TESTS+= cond-func-defined TESTS+= cond-func-empty TESTS+= cond-func-exists TESTS+= cond-func-make +TESTS+= cond-func-make-main TESTS+= cond-func-target TESTS+= cond-late TESTS+= cond-op Added files: Index: src/usr.bin/make/unit-tests/cond-func-make-main.exp diff -u /dev/null src/usr.bin/make/unit-tests/cond-func-make-main.exp:1.1 --- /dev/null Sun Nov 22 19:37:28 2020 +++ src/usr.bin/make/unit-tests/cond-func-make-main.exp Sun Nov 22 19:37:27 2020 @@ -0,0 +1,3 @@ +: Making dot-main-target-1a. +: Making dot-main-target-1b. +exit status 0 Index: src/usr.bin/make/unit-tests/cond-func-make-main.mk diff -u /dev/null src/usr.bin/make/unit-tests/cond-func-make-main.mk:1.1 --- /dev/null Sun Nov 22 19:37:28 2020 +++ src/usr.bin/make/unit-tests/cond-func-make-main.mk Sun Nov 22 19:37:27 2020 @@ -0,0 +1,62 @@ +# $NetBSD: cond-func-make-main.mk,v 1.1 2020/11/22 19:37:27 rillig Exp $ +# +# Test how accurately the make() function in .if conditions reflects +# what is actually made. +# +# There are several ways to specify what is being made: +# +# 1. The default main target is the first target in the given makefiles that +# is not one of the special targets. For example, .PHONY is special when +# it appears on the left-hand side of the ':'. It is not special on the +# right-hand side though. +# +# 2. Command line arguments that are neither options (-ds or -k) nor variable +# assignments (VAR=value) are interpreted as targets to be made. These +# override the default main target from above. +# +# 3. All sources of the first '.MAIN: sources' line. Any further .MAIN line +# is treated as if .MAIN were a regular name. +# +# This test only covers items 1 and 3. For item 2, see cond-func-make.mk. + +first-main-target: + : Making ${.TARGET}. + +# Even though the main-target would actually be made at this point, it is +# ignored by the make() function. +.if make(first-main-target) +. error +.endif + +# Declaring a target via the .MAIN dependency adds it to the targets to be +# created (opts.create), but only that list was empty at the beginning of +# the line. This implies that several main targets can be set at the name +# time, but they have to be in the same dependency group. +# +# See ParseDoDependencyTargetSpecial, branch SP_MAIN. +.MAIN: dot-main-target-1a dot-main-target-1b + +.if !make(dot-main-target-1a) +. error +.endif +.if !make(dot-main-target-1b) +. error +.endif + +dot-main-target-{1,2}{a,b}: + : Making ${.TARGET}. + +# At this point, the list of targets to be made (opts.create) is not empty +# anymore. ParseDoDependencyTargetSpecial therefore treats the .MAIN as if +# it were an ordinary target. Since .MAIN is not listed as a dependency +# anywhere, it is not made. +.if target(.MAIN) +. error +.endif +.MAIN: dot-main-target-2a dot-main-target-2b +.if !target(.MAIN) +. error +.endif +.if make(dot-main-target-2a) +. error +.endif