diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-opts.c | 4 | ||||
-rw-r--r-- | gcc/c-family/c.opt | 4 | ||||
-rw-r--r-- | gcc/doc/cppopts.texi | 4 | ||||
-rw-r--r-- | gcc/doc/install.texi | 8 | ||||
-rw-r--r-- | libcpp/ChangeLog | 10 | ||||
-rw-r--r-- | libcpp/config.in | 3 | ||||
-rwxr-xr-x | libcpp/configure | 16 | ||||
-rw-r--r-- | libcpp/configure.ac | 10 | ||||
-rw-r--r-- | libcpp/files.c | 2 | ||||
-rw-r--r-- | libcpp/include/cpplib.h | 3 | ||||
-rw-r--r-- | libcpp/init.c | 6 |
13 files changed, 80 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0f149c4eb68..e430af93a63 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-11-16 Simon Baldwin <simonb@google.com> + + * doc/cppopts.texi: Document -f[no-]canonical-system-headers. + * doc/install.texi: Document --enable-canonical-system-headers. + 2012-11-16 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/55330 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 85e113ca78e..29386629437 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2012-11-16 Simon Baldwin <simonb@google.com> + + * c.opt: Add f[no-]canonical-system-headers. + * c-opts.c (c_common_handle_option): Handle + OPT_fcanonical_system_headers. + 2012-11-09 Ed Smith-Rowland <3dw4rd@verizon.net> PR c++/54413 diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index d86a1651b93..488c085f4fb 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -456,6 +456,10 @@ c_common_handle_option (size_t scode, const char *arg, int value, handle_OPT_d (arg); break; + case OPT_fcanonical_system_headers: + cpp_opts->canonical_system_headers = value; + break; + case OPT_fcond_mismatch: if (!c_dialect_cxx ()) { diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 1b5c51a44c0..f5f086760ae 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -840,6 +840,10 @@ Recognize built-in functions fbuiltin- C ObjC C++ ObjC++ Joined +fcanonical-system-headers +C ObjC C++ ObjC++ +Where shorter, use canonicalized paths to systems headers. + fcheck-new C++ ObjC++ Var(flag_check_new) Check the return value of new diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index a2eb79d06f9..37e0b7b57ff 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -564,6 +564,10 @@ Accept universal character names in identifiers. This option is experimental; in a future version of GCC, it will be enabled by default for C99 and C++. +@item -fno-canonical-system-headers +@opindex fno-canonical-system-headers +When preprocessing, do not shorten system header paths with canonicalization. + @item -fpreprocessed @opindex fpreprocessed Indicate to the preprocessor that the input file has already been diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 7396158acea..b78d127a8c0 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1719,6 +1719,14 @@ link time when @option{-fuse-linker-plugin} is enabled. 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 diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4f78ecf761c..30cef77e3e3 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,13 @@ +2012-11-16 Simon Baldwin <simonb@google.com> + + * include/cpplib.h (struct cpp_options): Add canonical_system_headers. + * files.c (find_file_in_dir): Call maybe_shorter_path() only if + canonical_system_headers is set. + * init.c (cpp_create_reader): Initialize canonical_system_headers. + * configure.ac: Add new --enable-canonical-system-headers. + * configure: Regenerate. + * config.in: Regenerate. + 2012-11-09 Ed Smith-Rowland <3dw4rd@verizon.net> PR c++/54413 diff --git a/libcpp/config.in b/libcpp/config.in index 05542fe37d1..fca690cd306 100644 --- a/libcpp/config.in +++ b/libcpp/config.in @@ -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 diff --git a/libcpp/configure b/libcpp/configure index d33969b2b2d..d07aed3199c 100755 --- a/libcpp/configure +++ b/libcpp/configure @@ -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" >>confdefs.h 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 aarch64*-*-* | \ diff --git a/libcpp/configure.ac b/libcpp/configure.ac index e62da06ce27..34ae5c20622 100644 --- a/libcpp/configure.ac +++ b/libcpp/configure.ac @@ -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 aarch64*-*-* | \ diff --git a/libcpp/files.c b/libcpp/files.c index ecaa27414e1..a8288dc934d 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -389,7 +389,7 @@ find_file_in_dir (cpp_reader *pfile, _cpp_file *file, bool *invalid_pch) void **pp; /* We try to canonicalize system headers. */ - if (file->dir->sysp) + if (CPP_OPTION (pfile, canonical_system_headers) && file->dir->sysp) { char * canonical_path = maybe_shorter_path (path); if (canonical_path) diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 72415f0348a..85432a2faa4 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -493,6 +493,9 @@ struct cpp_options /* True disables tokenization outside of preprocessing directives. */ bool directives_only; + + /* True enables canonicalization of system header file paths. */ + bool canonical_system_headers; }; /* Callback for header lookup for HEADER, which is the name of a diff --git a/libcpp/init.c b/libcpp/init.c index ebe51c76c86..2ec5ecbce11 100644 --- a/libcpp/init.c +++ b/libcpp/init.c @@ -28,6 +28,10 @@ along with this program; see the file COPYING3. If not see #include "localedir.h" #include "filenames.h" +#ifndef ENABLE_CANONICAL_SYSTEM_HEADERS +#define ENABLE_CANONICAL_SYSTEM_HEADERS 0 +#endif + static void init_library (void); static void mark_named_operators (cpp_reader *, int); static void read_original_filename (cpp_reader *); @@ -182,6 +186,8 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table, CPP_OPTION (pfile, track_macro_expansion) = 2; CPP_OPTION (pfile, warn_normalize) = normalized_C; CPP_OPTION (pfile, warn_literal_suffix) = 1; + CPP_OPTION (pfile, canonical_system_headers) + = ENABLE_CANONICAL_SYSTEM_HEADERS; CPP_OPTION (pfile, ext_numeric_literals) = 1; /* Default CPP arithmetic to something sensible for the host for the |