freebsd-dev/contrib/bmake/unit-tests/depsrc-usebefore.mk
Simon J. Gerraty 2f2a5ecdf8 Merge bmake-20220418
o ignore '.POSIX:' if not in first non-comment line
        of Makefile as specified by POSIX.
        add unit-tests for above.

Merge commit '92bfae0e6bd53a7a0d6fe55e70a916d86cf26e8b'
2022-04-22 13:42:11 -07:00

116 lines
2.9 KiB
Makefile

# $NetBSD: depsrc-usebefore.mk,v 1.9 2022/04/18 14:41:42 rillig Exp $
#
# Tests for the special source .USEBEFORE in dependency declarations,
# which allows to prepend common commands to other targets.
#
# If a target depends on several .USE or .USEBEFORE nodes, the commands get
# appended or prepended in declaration order. For .USE nodes, this is the
# expected order, for .USEBEFORE nodes the order is somewhat reversed, and for
# .USE or .USEBEFORE nodes that depend on other .USE or .USEBEFORE nodes, it
# gets even more complicated.
#
# See also:
# .USE
# depsrc-use.mk
# Before make.h 1.280 from 2021-12-28, a .USEBEFORE target was accidentally
# regarded as a candidate for the main target. On the other hand, a .USE
# target was not.
not-a-main-candidate: .USEBEFORE
all:
@${MAKE} -r -f ${MAKEFILE} ordering
@${MAKE} -r -f ${MAKEFILE} directly
ordering: before-1 before-2 after-1 after-2
before-1: .USEBEFORE before-1-before-1 before-1-before-2 before-1-after-1 before-1-after-2
@echo before-1 1
@echo before-1 2
before-1-before-1: .USEBEFORE
@echo before-1-before-1 1
@echo before-1-before-1 2
before-1-before-2: .USEBEFORE
@echo before-1-before-2 1
@echo before-1-before-2 2
before-1-after-1: .USE
@echo before-1-after-1 1
@echo before-1-after-1 2
before-1-after-2: .USE
@echo before-1-after-2 1
@echo before-1-after-2 2
before-2: .USEBEFORE before-2-before-1 before-2-before-2 before-2-after-1 before-2-after-2
@echo before-2 1
@echo before-2 2
before-2-before-1: .USEBEFORE
@echo before-2-before-1 1
@echo before-2-before-1 2
before-2-before-2: .USEBEFORE
@echo before-2-before-2 1
@echo before-2-before-2 2
before-2-after-1: .USE
@echo before-2-after-1 1
@echo before-2-after-1 2
before-2-after-2: .USE
@echo before-2-after-2 1
@echo before-2-after-2 2
after-1: .USE after-1-before-1 after-1-before-2 after-1-after-1 after-1-after-2
@echo after-1 1
@echo after-1 2
after-1-before-1: .USEBEFORE
@echo after-1-before-1 1
@echo after-1-before-1 2
after-1-before-2: .USEBEFORE
@echo after-1-before-2 1
@echo after-1-before-2 2
after-1-after-1: .USE
@echo after-1-after-1 1
@echo after-1-after-1 2
after-1-after-2: .USE
@echo after-1-after-2 1
@echo after-1-after-2 2
after-2: .USE after-2-before-1 after-2-before-2 after-2-after-1 after-2-after-2
@echo after-2 1
@echo after-2 2
after-2-before-1: .USEBEFORE
@echo after-2-before-1 1
@echo after-2-before-1 2
after-2-before-2: .USEBEFORE
@echo after-2-before-2 1
@echo after-2-before-2 2
after-2-after-1: .USE
@echo after-2-after-1 1
@echo after-2-after-1 2
after-2-after-2: .USE
@echo after-2-after-2 1
@echo after-2-after-2 2
# It is possible but uncommon to have a .USEBEFORE target with no commands.
# This may happen as the result of expanding a .for loop.
empty: .USEBEFORE
# It is technically possible to directly make a .USEBEFORE target, but it
# doesn't make sense since GNode_IsOODate considers such a target to always be
# up to date.
directly: .USEBEFORE
@echo directly