1 # $NetBSD: cond-func-make-main.mk,v 1.2 2021/04/04 10:13:09 rillig Exp $ 2 # 3 # Test how accurately the make() function in .if conditions reflects 4 # what is actually made. 5 # 6 # There are several ways to specify what is being made: 7 # 8 # 1. The default main target is the first target in the given makefiles that 9 # is not one of the special targets. For example, .PHONY is special when 10 # it appears on the left-hand side of the ':'. It is not special on the 11 # right-hand side though. 12 # 13 # 2. Command line arguments that are neither options (-ds or -k) nor variable 14 # assignments (VAR=value) are interpreted as targets to be made. These 15 # override the default main target from above. 16 # 17 # 3. All sources of the first '.MAIN: sources' line. Any further .MAIN line 18 # is treated as if .MAIN were a regular name. 19 # 20 # This test only covers items 1 and 3. For item 2, see cond-func-make.mk. 21 22 first-main-target: 23 : Making ${.TARGET}. 24 25 # Even though the main-target would actually be made at this point, it is 26 # ignored by the make() function. 27 .if make(first-main-target) 28 . error 29 .endif 30 31 # Declaring a target via the .MAIN dependency adds it to the targets to be 32 # created (opts.create), but only that list was empty at the beginning of 33 # the line. This implies that several main targets can be set at the name 34 # time, but they have to be in the same dependency group. 35 # 36 # See ParseDependencyTargetSpecial, branch SP_MAIN. 37 .MAIN: dot-main-target-1a dot-main-target-1b 38 39 .if !make(dot-main-target-1a) 40 . error 41 .endif 42 .if !make(dot-main-target-1b) 43 . error 44 .endif 45 46 dot-main-target-{1,2}{a,b}: 47 : Making ${.TARGET}. 48 49 # At this point, the list of targets to be made (opts.create) is not empty 50 # anymore. ParseDependencyTargetSpecial therefore treats the .MAIN as if 51 # it were an ordinary target. Since .MAIN is not listed as a dependency 52 # anywhere, it is not made. 53 .if target(.MAIN) 54 . error 55 .endif 56 .MAIN: dot-main-target-2a dot-main-target-2b 57 .if !target(.MAIN) 58 . error 59 .endif 60 .if make(dot-main-target-2a) 61 . error 62 .endif 63