This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[google/integration] Add a configure option to disable system header canonicalizations (issue6489063)
- 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: Fri, 31 Aug 2012 07:20:44 -0500 (CDT)
- Subject: [google/integration] Add a configure option to disable system header canonicalizations (issue6489063)
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.
Tested with bootstrap builds of C and C++, both with and without configure
--disable-canonical-system-headers. Okay for google/integration?
libcpp/ChangeLog.google-integration
2012-08-31 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-08-31 Simon Baldwin <simonb@google.com>
* doc/install.texi: Document --enable-canonical-system-headers.
Index: gcc/doc/install.texi
===================================================================
--- gcc/doc/install.texi (revision 190830)
+++ gcc/doc/install.texi (working copy)
@@ -1747,6 +1747,14 @@ and may be disabled using @option{--disa
See @option{-canonical-prefixes} or @option{-no-canonical-prefixes} for
more details, including how to override this configuration option when
compiling.
+
+@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 190830)
+++ libcpp/configure (working copy)
@@ -703,6 +703,7 @@ enable_rpath
with_libiconv_prefix
enable_maintainer_mode
enable_checking
+enable_canonical_system_headers
'
ac_precious_vars='build_alias
host_alias
@@ -1337,6 +1338,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]
@@ -7366,6 +7369,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 190830)
+++ 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 190830)
+++ libcpp/configure.ac (working copy)
@@ -146,6 +146,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 190830)
+++ 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/6489063