deptgt-begin.mk revision 1.7.2.1       1  1.7.2.1  perseant # $NetBSD: deptgt-begin.mk,v 1.7.2.1 2025/08/02 05:58:32 perseant Exp $
      2      1.1    rillig #
      3      1.3    rillig # Tests for the special target .BEGIN in dependency declarations,
      4      1.3    rillig # which is a container for commands that are run before any other
      5      1.3    rillig # commands from the shell lines.
      6      1.1    rillig 
      7      1.3    rillig .BEGIN:
      8      1.3    rillig 	: $@
      9      1.1    rillig 
     10      1.4    rillig # To register a custom action to be run at the beginning, the simplest way is
     11      1.4    rillig # to directly place some commands on the '.BEGIN' target.  This doesn't scale
     12      1.4    rillig # though, since the ':' dependency operator prevents that any other place may
     13      1.4    rillig # add its commands after this.
     14      1.4    rillig #
     15      1.4    rillig # There are several ways to resolve this situation, which are detailed below.
     16  1.7.2.1  perseant # expect+3: warning: duplicate script for target ".BEGIN" ignored
     17  1.7.2.1  perseant # expect-9: warning: using previous script for ".BEGIN" defined here
     18      1.4    rillig .BEGIN:
     19      1.4    rillig 	: Making another $@.
     20      1.4    rillig 
     21      1.4    rillig # One way to run commands at the beginning is to define a custom target and
     22      1.4    rillig # make the .BEGIN depend on that target.  This way, the commands from the
     23      1.4    rillig # custom target are run even before the .BEGIN target.
     24      1.4    rillig .BEGIN: before-begin
     25      1.4    rillig before-begin: .PHONY .NOTMAIN
     26      1.4    rillig 	: Making $@ before .BEGIN.
     27      1.4    rillig 
     28      1.4    rillig # Another way is to define a custom target and make that a .USE dependency.
     29      1.5    rillig # For the .BEGIN target, .USE dependencies do not work though, since in
     30      1.6    rillig # Compat_MakeAll, the .USE and .USEBEFORE nodes are expanded right after the
     31      1.6    rillig # .BEGIN target has been made, which is too late.
     32      1.4    rillig .BEGIN: use
     33      1.4    rillig use: .USE .NOTMAIN
     34      1.4    rillig 	: Making $@ from a .USE dependency.
     35      1.4    rillig 
     36      1.4    rillig # Same as with .USE, but run the commands before the main commands from the
     37      1.4    rillig # .BEGIN target.
     38      1.4    rillig #
     39      1.5    rillig # For the .BEGIN target, .USEBEFORE dependencies do not work though, since in
     40      1.6    rillig # Compat_MakeAll, the .USE and .USEBEFORE nodes are expanded right after the
     41      1.6    rillig # .BEGIN target has been made, which is too late.
     42      1.4    rillig .BEGIN: use-before
     43      1.4    rillig use-before: .USEBEFORE .NOTMAIN
     44      1.4    rillig 	: Making $@ from a .USEBEFORE dependency.
     45      1.4    rillig 
     46      1.1    rillig all:
     47      1.3    rillig 	: $@
     48      1.3    rillig 
     49      1.3    rillig _!=	echo : parse time 1>&2
     50