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