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