]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Merge branch '3.2-maint' into 3.3-maint
authorJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Sep 2016 20:28:16 +0000 (22:28 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Sep 2016 20:28:16 +0000 (22:28 +0200)
* 3.2-maint:
  Prepare for v3.2.9
  Disable direct mode for "-Wp," with multiple preprocessor options

1  2 
NEWS.txt
ccache.c

diff --cc NEWS.txt
index c33cd1c2fab16085e15799cccec19d4ff23515c0,2cd2b32eb3fc94931ec8f8e956db187bfecce099..8d12214ae4dd6f74045ada1fa94fae37b794ca6e
+++ b/NEWS.txt
  ccache news
  ===========
  
 +Unreleased 3.3.2
 +----------------
 +
 +Bug fixes
 +~~~~~~~~~
 +
 +- Fixed a regression in ccache 3.3 related to potentially bad content of
 +  dependency files when compiling identical source code but with different
 +  source paths.
 +
++- Fixed a regression in ccache 3.3.1: ccache could get confused when using the
++  compiler option `-Wp,` to pass multiple options to the preprocessor,
++  resulting in missing dependency files from direct mode cache hits.
++
 +
 +ccache 3.3.1
 +------------
 +Release date: 2016-09-07
 +
 +Bug fixes
 +~~~~~~~~~
 +
 +- Fixed a problem in the ``multiple `-arch` options'' support introduced in
 +  3.3. When using the direct mode (the default), different combinations of
 +  `-arch` options were not detected properly.
 +
 +- Fixed an issue when compiler option `-Wp,-MT,path` is used instead of `-MT
 +  path` (and similar for `-MF`, `-MP` and `-MQ`) and `run_second_cpp`
 +  (`CCACHE_CPP2`) is enabled.
 +
 +
 +ccache 3.3
 +----------
 +Release date: 2016-08-27
 +
 +Notes
 +~~~~~
 +
 +- A C99-compatible compiler is now required to build ccache.
 +
 +
 +New features and improvements
 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +
 +- The configuration option `run_second_cpp` (`CCACHE_CPP2`) now defaults to
 +  true. This improves ccache's out-of-the-box experience for compilers that
 +  can't compile their own preprocessed output with the same outcome as if they
 +  compiled the real source code directly, e.g. newer versions of GCC and Clang.
 +
 +- The configuration option `hash_dir` (`CCACHE_HASHDIR`) now defaults to true.
 +
 +- Added a new `ignore_headers_in_manifest` configuration option, which
 +  specifies headers that should be ignored in the direct mode.
 +
 +- Added a new `prefix_command_cpp` (`CCACHE_PREFIX_CPP`) configuration option,
 +  which specifies one or several prefixes to add to the command line ccache
 +  uses when invoking the preprocessor.
 +
 +- Added a new `limit_multiple` (`CCACHE_LIMIT_MULTIPLE`) configuration option,
 +  which specifies how much of the cache to remove when cleaning.
 +
 +- Added a new `keep_comments_cpp` (`CCACHE_COMMENTS`) configuration option,
 +  which tells ccache not to discard the comments before hashing preprocessor
 +  output. This can be used to check documentation with *-Wdocumentation*.
 +
 +- Added a new sloppiness option `no_system_headers`, which tells ccache not to
 +  include system headers in manifest files.
 +
 +- Added a new statistics counter that tracks the number of performed cleanups
 +  due to the cache size being over the limit. The value is shown in the output
 +  of ``ccache -s''.
 +
 +- Added support for relocating debug info directory using `-fdebug-prefix-map`.
 +  This allows for cache hits even when `hash_dir` is used in combination with
 +  `base_dir`.
 +
 +- Added a new ``cache hit rate'' field to the output of ``ccache -s''.
 +
 +- Added support for caching compilation of assembler code produced by e.g.
 +  ``gcc -S file.c''.
 +
 +- Added support for cuda including the -optf/--options-file option.
 +
 +- Added support for Fortran 77.
 +
 +- Added support for multiple `-arch` options to produce "fat binaries".
 +
 +- Multiple identical `-arch` arguments are now handled without bailing.
 +
 +- The concatenated form of some long compiler options is now recognized, for
 +  example when using `-isystemPATH` instead of `-isystem PATH`.
 +
 +- If hard-linking is enabled and but fails (e.g. due to cross-device linking),
 +  ccache now falls back to copying instead of running the compiler.
 +
 +- Made the `hash_dir` option only have effect when generating debug info.
 +
 +- ccache now knows how to convert absolute paths to relative paths inside
 +  dependency files when using `base_dir`.
 +
 +- Improved parsing of `-g*` options.
 +
 +- Made ccache understand `-Wp,-D*` options.
 +
 +- ccache now understands the undocumented `-coverage` (only one dash) GCC
 +  option.
 +
 +- Names of included files are no longer included in the hash of the compiler's
 +  preprocessed output. This leads to more potential cache hits when not using
 +  the direct mode.
 +
 +- Increased buffer size used when reading file data. This improves performance
 +  slightly.
 +
 +
 +Bug fixes
 +~~~~~~~~~
 +
 +- Bail out on too hard compiler option `-P`.
 +
 +- Fixed clang test suite when running on Linux.
 +
 +- Fixed build and test for MinGW32 and Windows.
 +
 +
+ ccache 3.2.9
+ ----------------
+ Release date: 2016-09-28
+ Bug fixes
+ ~~~~~~~~~
+ - Fixed a regression in ccache 3.2.8: ccache could get confused when using the
+   compiler option `-Wp,` to pass multiple options to the preprocessor,
+   resulting in missing dependency files from direct mode cache hits.
  ccache 3.2.8
  ------------
  Release date: 2016-09-07
diff --cc ccache.c
index d91ecc3c9663267ba7d3c6ee6a9c9b009b78bf3f,ddbc822ec61b3113669ad5f71b995cb53c7d818c..c4070adee98be20ad036a7d988dc3eecb6880774
+++ b/ccache.c
@@@ -2440,13 -2249,15 +2440,20 @@@ cc_process_args(struct args *args, stru
                                output_dep = make_relative_path(x_strdup(argv[i] + 9));
                                args_add(dep_args, argv[i]);
                                continue;
-                       } else if (str_startswith(argv[i], "-Wp,-M")) {
-                               // -MF, -MP, -MQ, -MT, etc. TODO: Make argument to MF/MQ/MT relative.
 +                      } else if (str_startswith(argv[i], "-Wp,-D")
 +                                 && !strchr(argv[i] + 6, ',')) {
 +                              // Treat it like -D.
 +                              args_add(cpp_args, argv[i] + 4);
 +                              continue;
 -                              /* TODO: Make argument to MF/MQ/MT relative. */
+                       } else if (str_eq(argv[i], "-Wp,-MP")
+                                  || (strlen(argv[i]) > 8
+                                      && str_startswith(argv[i], "-Wp,-M")
+                                      && argv[i][7] == ','
+                                      && (argv[i][6] == 'F'
+                                          || argv[i][6] == 'Q'
+                                          || argv[i][6] == 'T')
+                                      && !strchr(argv[i] + 8, ','))) {
++                              // TODO: Make argument to MF/MQ/MT relative.
                                args_add(dep_args, argv[i]);
                                continue;
                        } else if (conf->direct_mode) {