all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Giel van Schijndel <giel@mortis.eu>
To: "Ludovic Courtès" <ludo@gnu.org>, "julien lepiller" <julien@lepiller.eu>
Cc: 30756@debbugs.gnu.org
Subject: bug#30756: gcc7 doesn't find stdlib.h
Date: Fri, 4 May 2018 11:46:58 +0200	[thread overview]
Message-ID: <5212cd7e-5f52-2826-2f65-9b66af4e73ad@mortis.eu> (raw)
In-Reply-To: <87fu59zagv.fsf@gnu.org>

On 09-03-18 13:42, Ludovic Courtès wrote:
> julien lepiller <julien@lepiller.eu> skribis:
>
>> I'm trying to build a software that requires gcc>=7.2. Unfortunately,
>> the process crashes and ends with:
>>
>> /gnu/store/a4vwdk8r6p6l2mnffz4yaqlr1z6z6w3r-gcc-7.3.0/include/c++/cstdlib:75:15:
>> fatal error: stdlib.h: No such file or directory.
> On IRC Marius mentioned this bug report:
>
>   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129#c3
>
> Note that we use C_INCLUDE_PATH, which is equivalent to ‘-isystem’.

This is biting me too for a C++17 project I'm trying to build.

That GCC bug report (Jakub Jellinek) says that you shouldn't be using
-isystem for the default include directories. So I believe these paths
shouldn't get added to CPLUS_INCLUDE_PATH in the first place.

In that bug report there's a link to a CMake bug report with a link to a
solution employed by WebKit:
https://trac.webkit.org/changeset/205672/webkit/trunk/Source/cmake/OptionsCommon.cmake

That solution boils down to executing "g++ -v -E -x c++ /dev/null" and
extracting the list of (default) include directories from its output
then giving CMake that list to ensure it won't ever try to add it with
either -I or -isystem to the preprocessor's search path. I believe a
similar approach should be taken by (gnu packages gcc) (assuming that's
what is responsible for adding this).

To confirm that this works:
> $ env -u CPATH -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH c++ -v -E -x
> c++ /dev/null
> ...
> #include <...> search starts here:
>  /gnu/store/f9wi8xs84b29f5igp578hnqfpjnfn4gh-gcc-7.3.0/include/c++
>  /gnu/store/f9wi8xs84b29f5igp578hnqfpjnfn4gh-gcc-7.3.0/include/c++/x86_64-unknown-linux-gnu
>  /gnu/store/f9wi8xs84b29f5igp578hnqfpjnfn4gh-gcc-7.3.0/include/c++/backward
>  /gnu/store/8jp0v7q1g4g87ay94i7h7p54mcw48mf3-gcc-7.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.3.0/include
>  /gnu/store/8jp0v7q1g4g87ay94i7h7p54mcw48mf3-gcc-7.3.0-lib/lib/gcc/x86_64-unknown-linux-gnu/7.3.0/include-fixed
>  /gnu/store/4sqaib7c2dfjv62ivrg9b8wa7bh226la-glibc-2.26.105-g0890d5379c/include
> End of search list.
> ...

To get my C++17 project building I can take the auto-generated
CPLUS_INCLUDE_PATH and just strip every path from it that also occurs in
the above list and set it again with (setenv).

There's two problems with this:

1. It's a workaround for a break in the build environment that would
need to be copy-pasted to every project wishing to build C++ with a
modern GCC
2. My skill at Scheme/Guile isn't good enough to execute the above
command and capture its output from within the build phases, let alone
parse and use its result to clean up CPLUS_INCLUDE_PATH.

-- 
Met vriendelijke groet,
With kind regards,
Giel van Schijndel

  reply	other threads:[~2018-05-04 15:42 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-09 12:10 bug#30756: gcc7 doesn't find stdlib.h julien lepiller
2018-03-09 12:42 ` Ludovic Courtès
2018-05-04  9:46   ` Giel van Schijndel [this message]
2018-05-04 12:43     ` Ludovic Courtès
2018-05-04 14:30       ` Giel van Schijndel
2018-05-04 15:07         ` Giel van Schijndel
2018-05-04 15:28         ` Ludovic Courtès
2018-05-04 16:03           ` Giel van Schijndel
2018-05-04 16:41             ` Mark H Weaver
2018-05-04 17:14               ` Mark H Weaver
2018-05-04 20:39               ` Ludovic Courtès
2018-05-04 21:36                 ` Mark H Weaver
2018-05-07 10:12         ` Ludovic Courtès
2018-05-07 23:32           ` Mark H Weaver
2018-05-08 13:21             ` Ludovic Courtès
2019-10-22 16:26 ` bug#30756: GCC >= 6 '-isystem' and C_INCLUDE_PATH behavior changed, breaking #include_next Carl Dong
2019-12-14 14:23 ` bug#30756: Use {C,CPLUS,OBJC}_INCLUDE_PATH instead of CPATH Mark Wielaard
2020-01-17 10:23 ` bug#30756: GCC >= 6 '-isystem' and C_INCLUDE_PATH behavior changed, breaking Reza Housseini
2020-01-19 21:16   ` Ludovic Courtès
2020-01-20  3:25     ` Maxim Cournoyer
2020-01-20  8:56       ` Ludovic Courtès
2020-01-22  3:04         ` Maxim Cournoyer
2020-01-23 20:45           ` Ludovic Courtès
2020-02-03  9:00             ` Ludovic Courtès
2020-02-03 21:03               ` Marius Bakke
2020-02-04 11:28                 ` Ludovic Courtès
2020-02-06 17:49                   ` Ludovic Courtès
2020-02-07  3:39               ` Maxim Cournoyer
2020-02-07 11:00                 ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5212cd7e-5f52-2826-2f65-9b66af4e73ad@mortis.eu \
    --to=giel@mortis.eu \
    --cc=30756@debbugs.gnu.org \
    --cc=julien@lepiller.eu \
    --cc=ludo@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.