overhead.
+Common hashed information
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+For both modes, the following information is included in the hash:
+
+* the extension used by the compiler for a file with preprocessor output
+ (normally *.i* for C code and *.ii* for C++ code)
+* the compiler's size and modification time (or other compiler-specific
+ information specified by *CCACHE_COMPILERCHECK*)
+* the name of the compiler
+* the current directory (if *CCACHE_HASHDIR* is set)
+* contents of files specified by *CCACHE_EXTRAFILES* (if any)
+
+
The direct mode
~~~~~~~~~~~~~~~
-In the direct mode, the hash is formed of:
+In the direct mode, the hash is formed of the common information and:
* the input source file
* the command line options
-* the real compiler's size and modification time (unless *CCACHE_COMPILERCHECK*
- says something else)
Based on the hash, a data structure called ``manifest'' is looked up in the
cache. The manifest contains:
The preprocessor mode
~~~~~~~~~~~~~~~~~~~~~
-In the preprocessor mode, the hash is formed of:
+In the preprocessor mode, the hash is formed of the common information and:
* the preprocessor output from running the compiler with *-E*
* the command line options except options that affect include files (*-I*,
*-include*, *-D*, etc; the theory is that these options will change the
preprocessor output if they have any effect at all)
-* the real compiler's size and modification time (unless *CCACHE_COMPILERCHECK*
- says something else)
* any standard error output generated by the preprocessor
Based on the hash, the cached compilation result can be looked up directly in