1# $NetBSD: opt-jobs-no-action.mk,v 1.8 2020/12/10 23:54:41 rillig Exp $ 2# 3# Tests for the combination of the options -j and -n, which prints the 4# commands instead of actually running them. 5# 6# The format of the output differs from the output of only the -n option, 7# without the -j. This is because all this code is implemented twice, once 8# in compat.c and once in job.c. 9# 10# See also: 11# opt-jobs.mk 12# The corresponding tests without the -n option 13# opt-no-action-combined.mk 14# The corresponding tests without the -j option 15 16.MAKEFLAGS: -j1 -n 17 18# Change the templates for running the commands in jobs mode, to make it 19# easier to see what actually happens. 20# 21# The shell attributes are handled by Job_ParseShell. 22# The shell attributes 'quiet' and 'echo' don't need a trailing newline, 23# this is handled by the [0] != '\0' checks in Job_ParseShell. 24# The '\#' is handled by ParseGetLine. 25# The '\n' is handled by Str_Words in Job_ParseShell. 26# The '$$' is handled by Var_Subst in ParseDependency. 27.SHELL: \ 28 name=sh \ 29 path=${.SHELL} \ 30 quiet="\# .echoOff" \ 31 echo="\# .echoOn" \ 32 filter="\# .noPrint\n" \ 33 check="\# .echoTmpl\n""echo \"%s\"\n" \ 34 ignore="\# .runIgnTmpl\n""%s\n" \ 35 errout="\# .runChkTmpl\n""{ %s \n} || exit $$?\n" 36 37all: explained combined 38.ORDER: explained combined 39 40# Explain the most basic cases in detail. 41explained: .PHONY 42 @+echo hide-from-output 'begin explain' 43 44 # The following command is regular, it is printed twice: 45 # - first using the template shell.echoTmpl, 46 # - then using the template shell.runChkTmpl. 47 false regular 48 49 # The following command is silent, it is printed once, using the 50 # template shell.runChkTmpl. 51 @: silent 52 53 # The following command ignores errors, it is printed once, using 54 # the default template for cmdTemplate, which is "%s\n". 55 # XXX: Why is it not printed using shell.echoTmpl as well? 56 # XXX: The '-' should not influence the echoing of the command. 57 -false ignore-errors 58 59 # The following command ignores the -n command line option, it is 60 # not handled by the Job module but by the Compat module, see the 61 # '!silent' in Compat_RunCommand. 62 +echo run despite the -n option 63 64 @+echo hide-from-output 'end explain' 65 @+echo hide-from-output 66 67 68# Test all combinations of the 3 RunFlags. 69# 70# TODO: Closely inspect the output whether it makes sense. 71# XXX: silent=no always=no ignerr={no,yes} should be almost the same. 72# 73SILENT.no= # none 74SILENT.yes= @ 75ALWAYS.no= # none 76ALWAYS.yes= + 77IGNERR.no= echo running 78IGNERR.yes= -echo running; false 79# 80combined: combined-begin 81 82combined-begin: .PHONY 83 @+echo hide-from-output 'begin combined' 84 @+echo hide-from-output 85 86.for silent in no yes 87. for always in no yes 88. for ignerr in no yes 89. for target in combined-silent-${silent}-always-${always}-ignerr-${ignerr} 90combined: .WAIT ${target} .WAIT 91${target}: .PHONY 92 @+echo hide-from-output silent=${silent} always=${always} ignerr=${ignerr} 93 ${SILENT.${silent}}${ALWAYS.${always}}${IGNERR.${ignerr}} 94 @+echo hide-from-output 95. endfor 96. endfor 97. endfor 98.endfor 99 100combined: combined-end 101combined-end: .PHONY 102 @+echo hide-from-output 'end combined' 103