This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] Use "|" instead of "+" when combine the _IO_LINE_BUF and _IO_UNBUFFERED flags
- From: "Carlos O'Donell" <carlos at redhat dot com>
- To: Siddhesh Poyarekar <siddhesh dot poyarekar at gmail dot com>
- Cc: Feng Gao <gfree dot wind at gmail dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Wed, 08 Jul 2015 08:46:59 -0400
- Subject: Re: [PATCH] Use "|" instead of "+" when combine the _IO_LINE_BUF and _IO_UNBUFFERED flags
- Authentication-results: sourceware.org; auth=none
- References: <CA+6hz4qE5L-6LQEvVawdKtXXrqpP-c-VO1SmGtamRJUoRWYLRQ at mail dot gmail dot com> <20150707073145 dot GK13549 at spoyarek dot pnq dot redhat dot com> <CA+6hz4r4FjfTN5+AfM=x7_2xCC-3_FMeniMHdYNufBRrd4g8Lg at mail dot gmail dot com> <20150707162858 dot GR13549 at spoyarek dot pnq dot redhat dot com> <CA+6hz4omaZ2wjwCS1cKOXs27=p0oijUjtP9-8PVbyuDimQDtow at mail dot gmail dot com> <559CE58A dot 90706 at redhat dot com> <CAAHN_R3ZP7CsEEx-2AzDVO3Qh4eHsk+CwBE0E8=w5WRWqU2-zg at mail dot gmail dot com>
On 07/08/2015 05:44 AM, Siddhesh Poyarekar wrote:
> On 8 July 2015 at 14:25, Carlos O'Donell <carlos@redhat.com> wrote:
>> This is a super annoying failure mode that happens when `make` fails or
>> is not run. The fix is as follows, and I'll check it in shortly.
>>
>> 2015-07-08 Carlos O'Donell <carlos@redhat.com>
>>
>> * Makefile ($(objpfx)check-local-headers.out):
>> Redirect input from /dev/null.
>>
>> diff --git a/Makefile b/Makefile
>> index 658ccfa..c88b2e5 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -262,7 +262,7 @@ endif
>>
>> $(objpfx)check-local-headers.out: scripts/check-local-headers.sh
>> AWK='$(AWK)' scripts/check-local-headers.sh \
>> - "$(includedir)" "$(objpfx)" > $@; \
>> + "$(includedir)" "$(objpfx)" < /dev/null > $@; \
>> $(evaluate-test)
>
> That looks like a hack. Does it hang because $(objpfx) and
> $(includedir) are not set? A better fix ought to be to ensure that
> either 'make check' invokes make (and hence sets things up for the
> check target) or it fails early and cleanly, i.e. irrespective of
> whether the check-local-headers test is run or not.
It's not a hack. The script reads from stdin for the list of *.d
files that were created by the build, but if there are no *.d files
the shell expansion is empty and that forces the script to read from
the parent's inherited stdin. Since the parent never writes anything
to stdin the awk script blocks on the read forever. As Andreas notes
it should dep on the *.d files existing, and that is true. However,
even if that were fixed we should still read from /dev/null and
fail the test even if all the *.d files were deleted between the
time they were created and the script ran (robust).
Cheers,
Carlos.