G++9 (only C++) defines _GNU_SOURCE by default. This breaks some ports (e.g. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239627 ) on GCC architectures. After further investigation, I pinpointed it to /usr/local/lib/gcc9/gcc/powerpc64-portbld-freebsd12.0/9.1.0/plugin/include/config/gnu-user.h, which has this line: #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" GCC8 didn't set it, this problem only appeared in 9.
(In reply to Piotr Kubaj from comment #0) I'm trying this patch: --- gcc/config/gnu-user.h.orig 2019-08-04 18:05:25 UTC +++ gcc/config/gnu-user.h @@ -92,7 +92,7 @@ see the files COPYING3 and COPYING.RUNTIME respectivel /* The GNU C++ standard library requires that these macros be defined. */ #undef CPLUSPLUS_CPP_SPEC -#define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" +#define CPLUSPLUS_CPP_SPEC "%(cpp)" #define GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC \ "%{shared:-lc} \
(In reply to Piotr Kubaj from comment #1) Hm, looks like this macro was added 9 years ago, but for some reason this file isn't installed for GCC8 (only GCC9 started installing it).
(In reply to Piotr Kubaj from comment #2) Comment at the top of this file is: /* Definitions for systems using, at least optionally, a GNU (glibc-based) userspace or other userspace with libc derived from glibc (e.g. uClibc) or for which similar specs are appropriate. It seems plainly wrong to install this file on FreeBSD.
Thanks for the report and first analysis, Piotr. At first I was surprised why this did not manifest on i386 or x86-64, but a little research makes me think this is specific to ppc (or rs6000 in GCC-land). And was introduced by https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00921.html which states This patch removes some duplication in rs6000/sysv4.h of macros found in gnu-user.h that we want for linux. Including gnu-user.h will mean powerpc doesn't miss updates to that file. Requires https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00917.html and https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00919.html Bootstrapped etc. powerpc-linux and powerpc64le-linux. * config.gcc (powerpc*-*-freebsd*, powerpc-*-netbsd*), (powerpc-*-eabisimaltivec*, powerpc-*-eabisim*, powerpc-*-elf*), (powerpc-*-eabialtivec*, powerpc-*-eabi*, powerpc-*-rtems*), (powerpc-wrs-vxworks*, powerpc-*-lynxos*, powerpcle-*-elf*), (powerpcle-*-eabisim*, powerpcle-*-eabi*): Add gnu-user.h to tm_file. * config/rs6000/freebsd.h (CPLUSPLUS_CPP_SPEC), (LINK_GCC_C_SEQUENCE_SPEC): Undef. (ASM_APP_ON, ASM_APP_OFF): Don't define. * config/rs6000/freebsd64.h (ASM_APP_ON, ASM_APP_OFF): Don't define. :
(In reply to Gerald Pfeifer from comment #4) Thanks for your comment, I was just about to send comment with https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config.gcc?r1=266496&r2=266495&pathrev=266496 :) Trying to revert it now.
After reverting, it fails to build with: /usr/local/poudriere/ports/default/lang/gcc9/work/gcc-9.1.0/gcc/config/rs6000/sysv4.h:774:9: error: expected ',' or ';' before 'GNU_USER_TARGET_LIB_SPEC' :" GNU_USER_TARGET_LIB_SPEC "}" ^~~~~~~~~~~~~~~~~~~~~~~~ Looks like it needs gnu-user.h after all. Maybe we should put #ifndef __FreeBSD__ around CPLUSPLUS_CPP_SPEC?
(In reply to Piotr Kubaj from comment #6) Oh, sysv4.h also needs reverting. I will look at it tomorrow...
Let's take a step back, breathe, and involve upstream instead of creating random hacks that are definitely not upstreamable. In fact, this would have been a perfect bug report upstream and actually necessary to flag the regression and get any fixes into the GCC 9 release branch. So I went ahead and just did that, copying the original author of what I believe causes this: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91349
(In reply to Gerald Pfeifer from comment #8) I compared the changes done in that commit to freebsd.h and freebsd64.h and noticed that freebsd64.h misses: /* Undef gnu-user.h macros we don't want. */ #undef CPLUSPLUS_CPP_SPEC #undef LINK_GCC_C_SEQUENCE_SPEC I'm compiling right now gcc9 with those undefs and build progresses fine. Other than that, there are no changes.
That change works and I can see it's already committed upstream and merged to 9. Can you patch lang/gcc9?
I'm not really keen on patching that hack. The whole gnu-user.h thing is not very convenient. I'd like to wait until the guys found a suitable solution.
(In reply to Andreas Tobler from comment #11) I agree, but currently many ports don't build on powerpc64 because of _GNU_SOURCE. Either tens of ports are patched not to use the code that is behind _GNU_SOURCE check, or gcc itself is fixed.
I see. Give me 24h and we see if there is a better solution till then. Otherwise I can 'patch' lang/gcc9(-devel) and lang/gcc10-devel.
Thank you, Andreas! Note that in the upstream bug I filed https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91349 there is also a discussion about the patch that got committed upstream. (I agree the upstream approached Alan took end of last year was not exactly elegant, but diverging from upstream is not a good options I guess, so are you going to propose something there?)
I won't. And I try not to diverge from upstream but I try to avoid needless patch cycles.
I will not patch gcc9, gcc-9.2 is coming soon, and it contains the fix. gcc9-devel and gcc10-devel will contain the 'fix' in the next update. Soon means next week if all goes well.
A commit references this bug: Author: gerald Date: Sun Aug 11 09:27:26 UTC 2019 New revision: 508592 URL: https://svnweb.freebsd.org/changeset/ports/508592 Log: Update to the 20180803 snapshot of GCC 9.1.1. This brings a larger number of backports for the testsuite, a fix for Fortran, one for rs6000 (aka powerpc*) and most importantly now longer has _GNU_SOURCE defined on powerpc64 (which was a regression from the GCC 8 series [1]). PR: 239648 [1] Changes: head/lang/gcc9-devel/Makefile head/lang/gcc9-devel/distinfo
This should address the issue for lang/gcc9-devel. Can you please verify and let me know it does for you?
A commit references this bug: Author: gerald Date: Mon Aug 12 07:30:35 UTC 2019 New revision: 508710 URL: https://svnweb.freebsd.org/changeset/ports/508710 Log: Ensure _GNU_SOURCE is now longer defined on powerpc64 (which was a regression from the GCC 8 series). The technical background is that a consolidation in upstream GCC made non-GNU platforms include gnu-user.h and then undefined some macros in rs6000/freebsd.h, but missed doing the same in rs6000/freebsd64.h. The has now been included upstream and the current snapshot that the lang/gcc9-devel port tracks; carrying files/patch-powerpc64-no-_GNU_SOURCE in this port should become obsolete with the GCC 9.2 release. (As this should be a very short-lived measure, bump PORTREVISION only for powerpc64 to avoid all other users having to rebuild, too.) PR: 239648 Changes: head/lang/gcc9/Makefile head/lang/gcc9/files/patch-powerpc64-no-_GNU_SOURCE
A commit references this bug: Author: gerald Date: Wed Aug 14 07:08:20 UTC 2019 New revision: 508894 URL: https://svnweb.freebsd.org/changeset/ports/508894 Log: Update to the 201900811 snapshot of GCC 10.0.0. This no longer has _GNU_SOURCE defined on powerpc64 (which was a regression from the GCC 8 series). [1] PR: 239648 [1] Changes: head/lang/gcc10-devel/Makefile head/lang/gcc10-devel/distinfo
With that, all affected ports -- lang/gcc9{,-devel} and lang/gcc10 -- should be addressed, either by now referring to upstream snapshots that have (in case of the -devel ports) or a local backport (in case of gcc9). If you are using/building on powerpc64, please still do advise if this matches your understanding and experience.
A commit references this bug: Author: gerald Date: Sat Aug 17 07:16:27 UTC 2019 New revision: 509141 URL: https://svnweb.freebsd.org/changeset/ports/509141 Log: Update to GCC 9.2 release, the second in the GCC 9 series, which fixes some 68 bugs. This is the default version of GCC in the Ports Collection, and it just got a bit more polish and stability. Both files/patch-amd64-gcc-multilib-support and files/patch-powerpc64-no-_GNU_SOURCE [1] have been integrated upstream (and also been part of lang/gcc9-devel already), so remove them here. PR: 239648 [1] Changes: head/lang/gcc9/Makefile head/lang/gcc9/distinfo head/lang/gcc9/files/patch-amd64-gcc-multilib-support head/lang/gcc9/files/patch-powerpc64-no-_GNU_SOURCE