On Wed, Sep 5, 2012 at 6:56 AM, Simon Baldwin <sim...@google.com> wrote: > Add a configure option to disable system header canonicalizations.
Why should this be a configure option rather than a command-line option? Ian > Libcpp may canonicalize system header paths with lrealpath() for diagnostics, > dependency output, and similar. If gcc is held in a symlink farm the > canonicalized paths may be meaningless to users, and will also conflict with > build frameworks that (for example) disallow absolute paths to header files. > > This change adds --[en/dis]able-canonical-system-headers, allowing configure > to select whether or not to implement r186991. See also PR c++/52974. > > Tested for regressions with bootstrap builds of C and C++, both with and > without configure --disable-canonical-system-headers. > > Okay for trunk? > > libcpp/ChangeLog.google-integration > 2012-09-05 Simon Baldwin <sim...@google.com> > > * files.c (maybe_shorter_path): Suppress function definition if > ENABLE_CANONICAL_SYSTEM_HEADERS is not defined. > * (find_file_in_dir): Call maybe_shorter_path() only if > ENABLE_CANONICAL_SYSTEM_HEADERS is defined. > * configure.ac: Add new --enable-canonical-system-headers. > * configure: Regenerate. > * config.in: Regenerate. > > gcc/ChangeLog.google-integration > 2012-09-05 Simon Baldwin <sim...@google.com> > > * doc/install.texi: Document --enable-canonical-system-headers. > > > Index: gcc/doc/install.texi > =================================================================== > --- gcc/doc/install.texi (revision 190968) > +++ gcc/doc/install.texi (working copy) > @@ -1710,6 +1710,14 @@ link time when @option{-fuse-linker-plug > This linker should have plugin support such as gold starting with > version 2.20 or GNU ld starting with version 2.21. > See @option{-fuse-linker-plugin} for details. > + > +@item --enable-canonical-system-headers > +@itemx --disable-canonical-system-headers > +Enable system header path canonicalization for @file{libcpp}. This can > +produce shorter header file paths in diagnostics and dependency output > +files, but these changed header paths may conflict with some compilation > +environments. Enabled by default, and may be disabled using > +@option{--disable-canonical-system-headers}. > @end table > > @subheading Cross-Compiler-Specific Options > Index: libcpp/configure > =================================================================== > --- libcpp/configure (revision 190968) > +++ libcpp/configure (working copy) > @@ -700,6 +700,7 @@ enable_rpath > with_libiconv_prefix > enable_maintainer_mode > enable_checking > +enable_canonical_system_headers > ' > ac_precious_vars='build_alias > host_alias > @@ -1333,6 +1334,8 @@ Optional Features: > --disable-rpath do not hardcode runtime library paths > --enable-maintainer-mode enable rules only needed by maintainers > --enable-checking enable expensive run-time checks > + --enable-canonical-system-headers > + enable or disable system headers canonicalization > > Optional Packages: > --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] > @@ -7094,6 +7097,19 @@ $as_echo "#define ENABLE_CHECKING 1" >>c > > fi > > +# Check whether --enable-canonical-system-headers was given. > +if test "${enable_canonical_system_headers+set}" = set; then : > + enableval=$enable_canonical_system_headers; > +else > + enable_canonical_system_headers=yes > +fi > + > +if test $enable_canonical_system_headers != no; then > + > +$as_echo "#define ENABLE_CANONICAL_SYSTEM_HEADERS 1" >>confdefs.h > + > +fi > + > > case $target in > alpha*-*-* | \ > Index: libcpp/files.c > =================================================================== > --- libcpp/files.c (revision 190968) > +++ libcpp/files.c (working copy) > @@ -345,6 +345,7 @@ pch_open_file (cpp_reader *pfile, _cpp_f > shorter, otherwise return NULL. This function does NOT free the > memory pointed by FILE. */ > > +#ifdef ENABLE_CANONICAL_SYSTEM_HEADERS > static char * > maybe_shorter_path (const char * file) > { > @@ -359,6 +360,7 @@ maybe_shorter_path (const char * file) > return NULL; > } > } > +#endif > > /* Try to open the path FILE->name appended to FILE->dir. This is > where remap and PCH intercept the file lookup process. Return true > @@ -384,6 +386,7 @@ find_file_in_dir (cpp_reader *pfile, _cp > char *copy; > void **pp; > > +#ifdef ENABLE_CANONICAL_SYSTEM_HEADERS > /* We try to canonicalize system headers. */ > if (file->dir->sysp) > { > @@ -396,6 +399,7 @@ find_file_in_dir (cpp_reader *pfile, _cp > path = canonical_path; > } > } > +#endif > > hv = htab_hash_string (path); > if (htab_find_with_hash (pfile->nonexistent_file_hash, path, hv) != > NULL) > Index: libcpp/configure.ac > =================================================================== > --- libcpp/configure.ac (revision 190968) > +++ libcpp/configure.ac (working copy) > @@ -132,6 +132,16 @@ if test $enable_checking != no ; then > [Define if you want more run-time sanity checks.]) > fi > > +AC_ARG_ENABLE(canonical-system-headers, > +[ --enable-canonical-system-headers > + enable or disable system headers canonicalization], > +[], > +enable_canonical_system_headers=yes) > +if test $enable_canonical_system_headers != no; then > + AC_DEFINE(ENABLE_CANONICAL_SYSTEM_HEADERS, > + 1, [Define to enable system headers canonicalization.]) > +fi > + > m4_changequote(,) > case $target in > alpha*-*-* | \ > Index: libcpp/config.in > =================================================================== > --- libcpp/config.in (revision 190968) > +++ libcpp/config.in (working copy) > @@ -11,6 +11,9 @@ > /* Define to 1 if using `alloca.c'. */ > #undef C_ALLOCA > > +/* Define to enable system headers canonicalization. */ > +#undef ENABLE_CANONICAL_SYSTEM_HEADERS > + > /* Define if you want more run-time sanity checks. */ > #undef ENABLE_CHECKING > > > -- > This patch is available for review at http://codereview.appspot.com/6495088