lang/gcc6-aux build error due to internal Makefile/sh syntax: $${PWDCMD-pwd} is missing a ":" [misidentified problem]

Mark Millard markmi at dsl-only.net
Tue Apr 11 01:33:43 UTC 2017


On 2017-Apr-10, at 5:52 PM, Mark Millard <markmi at dsl-only.net> wrote:


> On 2017-Apr-10, at 1:21 PM, John Marino <freebsdml at marino.st> wrote:
> 
>> On 4/10/2017 15:12, Mark Millard wrote:
>>> On 2017-Apr-10, at 12:12 PM, Mark Millard <markmi at dsl-only.net> wrote:
>>>> with line 875 being the one with: @r=`${PWD_COMMAND}`
>>>> 
>>>> It appears to me that the notation $${PWDCMD-pwd} is not
>>>> what was intended. My guess is that a ":" is missing:
>>>> 
>>>> PWD_COMMAND = $${PWDCMD:-pwd}
>> 
>> I grepped gcc source and ${PWDCMD-pwd} shows up everywhere.  I assume it is valid for GNU make.
> 
> My guess about the issue was definitely wrong: simple tests
> show that gmake and /bin/sh handle the notation that I
> pointed at.
> 
>> I don't know what's going on in your particular case.
>> I also don't have access to the reference aarch64 machine anymore.
> 
> 
> Looking at the log again: Further back there is a message
> that I missed:
> 
> checking size of long long... checking for geteuid... checking for getc_unlocked... configure: error: in `/usr/obj/portswork/usr/ports/lang/gcc6-aux/work/build/libiberty':
> configure: error: cannot compute sizeof (long long)
> See `config.log' for more details.
> yes
> checking for putchar_unlocked... yes
> gmake[3]: *** [Makefile:7409: configure-libiberty] Error 1
> gmake[3]: *** Waiting for unfinished jobs....
> 
> Looking around that config.log shows problems like:
> 
> configure:5452: checking size of long long
> configure:5457: /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/bin/gcc -o conftest -pipe -B/usr/local/aarch64-freebsd/bin/ -mcpu=cortex-a53  -DLIBICONV_PLUG -g -fno-strict-aliasing -B/usr/l
> ocal/aarch64-freebsd/bin/ -mcpu=cortex-a53 -I/usr/local/include -DLIBICONV_PLUG -static-libstdc++ -static-libgcc -L/usr/local/lib conftest.c  >&5
> In file included from conftest.c:71:0:
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h: In function 'posix_memalign':
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:192:46: error: expected declaration specifiers before '__nonnull'
> int  posix_memalign(void **, size_t, size_t) __nonnull(1); /* (ADV) */
>                                              ^~~~~~~~~
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:252:20: error: storage class specified for parameter 'malloc_conf'
> extern const char *malloc_conf;
>                    ^~~~~~~~~~~
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:253:15: error: storage class specified for parameter 'malloc_message'
> extern void (*malloc_message)(void *, const char *);
>               ^~~~~~~~~~~~~~
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:341:14: error: storage class specified for parameter 'suboptarg'
> extern char *suboptarg;   /* getsubopt(3) external variable */
>              ^~~~~~~~~
> conftest.c:74:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
> {
> ^
> In file included from conftest.c:71:0:
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:192:6: error: old-style parameter declarations in prototyped function definition
> int  posix_memalign(void **, size_t, size_t) __nonnull(1); /* (ADV) */
>      ^~~~~~~~~~~~~~
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:192:1: error: parameter name omitted
> int  posix_memalign(void **, size_t, size_t) __nonnull(1); /* (ADV) */
> ^~~
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:192:1: error: parameter name omitted
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:192:1: error: parameter name omitted
> conftest.c:99:1: error: expected '{' at end of input
> }
> ^
> 
> 
> 
> And looking around for __nonnull in include files:
> 
> # grep -R __nonnull /usr/include/ | more
> /usr/include/security/openpam_attr.h:# define OPENPAM_NONNULL(params) __attribute__((__nonnull__ params))
> 
> 
> # grep -R __nonnull /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/
> /usr/obj/portswork/usr/ports/lang/gcc6-aux/work/bootstrap/lib/gcc/aarch64-aux-freebsd12.0/6.3.1/include-fixed/stdlib.h:int	 posix_memalign(void **, size_t, size_t) __nonnull(1); /* (ADV) */
> 
> So the __nonnull is from the bootstrap gcc 6.3.1 include-fixed area.
> 
> My guess is that __nonnull was intended to be a macro that expanded to an attribute
> specification but the macro definition ended up missing for some reason.
> 
> The bootstrap gcc command above shows the results of my CFLAGS
> and/or CXXFLAGS in case those are a problem (not that I expect
> they would contribute to this specific issue).
> 
> 
> 
> I've started an update to other ports so even if they work it
> will be a while before the Pine64+ 2GB completes that.

I found more material about __nonnull use. The overall
summary (from -r311012 back on 2017-Jan-1):

The __nonnull() attribute will be deprecrated from our headers and
replaced with the Clang _Nonnull qualifier in the future.

This was done in -r312934 on 2017-Jan-28.

Supporting details follow. . .


Revision 312934 - (view) (download) (annotate) - [select for diffs] 
Modified Sat Jan 28 20:54:43 2017 UTC (2 months, 1 week ago) by pfg 
File length: 10634 byte(s) 
Diff to previous 311012
Make use of clang nullability attributes.

Replace uses of the GCC __nonnull__ attribute with the clang nullability
qualifiers. The replacement should be transparent for clang developers as
the new qualifiers will produce the same warnings and will be useful for
static checkers but will not cause aggressive optimizations.

GCC will not produce such warnings and developers will have to use
upgraded GCC ports built with the system headers from 
r312538.

Hinted by:	Apple's Libc-1158.20.4, Bionic libc
MFC after:	11.1 Release

Differential Revision:	
https://reviews.freebsd.org/D9004


An earlier submittal says . . .

Revision 311012 - (view) (download) (annotate) - [select for diffs] 
Modified Sun Jan 1 17:16:47 2017 UTC (3 months, 1 week ago) by pfg 
File length: 10500 byte(s) 
Diff to previous 306651
Remove some uses of the GCC __nonnull() attribute.

While the checks are considered useful, the attribute does dangerous
optimizations, removing NULL checks where they can be needed. Remove the
uses of this attribute introduced in 
r281130
: the changes were inspired on
Google's bionic where this attribute is not used anymore.

The __nonnull() attribute will be deprecrated from our headers and
replaced with the Clang _Nonnull qualifier in the future.

MFC after:	3 days

===
Mark Millard
markmi at dsl-only.net




More information about the freebsd-ports mailing list