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 00:59:19 UTC 2017


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.

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



More information about the freebsd-ports mailing list