Home | History | Annotate | Line # | Download | only in unit-tests
      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