This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Add a configure option to disable system header canonicalizations (issue6495088)
- From: simonb at google dot com (Simon Baldwin)
- To: reply at codereview dot appspotmail dot com,gcc-patches at gcc dot gnu dot org
- Date: Wed, 5 Sep 2012 08:56:32 -0500 (CDT)
- Subject: Add a configure option to disable system header canonicalizations (issue6495088)
Add a configure option to disable system header canonicalizations.
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 <simonb@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 <simonb@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