xref: /freebsd-src/contrib/bmake/unit-tests/cmdline-redirect-stdin.mk (revision dba7b0ef928af88caa38728a73657b837aeeac93)
1*dba7b0efSSimon J. Gerraty# $NetBSD: cmdline-redirect-stdin.mk,v 1.1 2021/02/01 20:31:41 rillig Exp $
2*dba7b0efSSimon J. Gerraty#
3*dba7b0efSSimon J. Gerraty# Demonstrate that the '!=' assignment operator can read individual lines
4*dba7b0efSSimon J. Gerraty# from make's stdin.
5*dba7b0efSSimon J. Gerraty#
6*dba7b0efSSimon J. Gerraty# This edge case is an implementation detail that has no practical
7*dba7b0efSSimon J. Gerraty# application.
8*dba7b0efSSimon J. Gerraty
9*dba7b0efSSimon J. Gerratyall: .PHONY
10*dba7b0efSSimon J. Gerraty	@printf '%s\n' "first line" "second line" \
11*dba7b0efSSimon J. Gerraty	| ${MAKE} -f ${MAKEFILE} read-lines
12*dba7b0efSSimon J. Gerraty
13*dba7b0efSSimon J. Gerraty.if make(read-lines)
14*dba7b0efSSimon J. Gerratyline1!=		read line; echo "$$line"
15*dba7b0efSSimon J. Gerratyline2!=		read line; echo "$$line"
16*dba7b0efSSimon J. Gerraty
17*dba7b0efSSimon J. Gerraty.if ${line1} != "first line"
18*dba7b0efSSimon J. Gerraty.  error line1="${line1}"
19*dba7b0efSSimon J. Gerraty
20*dba7b0efSSimon J. Gerraty.elif ${line2} == ""
21*dba7b0efSSimon J. Gerraty# If this branch is ever reached, the shell from the assignment to line1
22*dba7b0efSSimon J. Gerraty# probably buffers its input.  Most shells use unbuffered stdin, and this
23*dba7b0efSSimon J. Gerraty# is actually specified by POSIX, which says that "The read utility shall
24*dba7b0efSSimon J. Gerraty# read a single line from standard input".  This is the reason why the shell
25*dba7b0efSSimon J. Gerraty# reads its input byte by byte, which makes it terribly slow for practical
26*dba7b0efSSimon J. Gerraty# applications.
27*dba7b0efSSimon J. Gerraty.  error The shell's read command does not read a single line.
28*dba7b0efSSimon J. Gerraty
29*dba7b0efSSimon J. Gerraty.elif ${line2} != "second line"
30*dba7b0efSSimon J. Gerraty.  error line2="${line2}"
31*dba7b0efSSimon J. Gerraty.endif
32*dba7b0efSSimon J. Gerraty
33*dba7b0efSSimon J. Gerratyread-lines: .PHONY
34*dba7b0efSSimon J. Gerraty.endif
35