[ccache] Configuration file plan

Owen Mann owen-javanet at rcn.com
Wed Apr 6 15:25:28 MDT 2011

FWIW, it sounds pretty sexy to me! :-)

Question: for an NFS-mounted cache, wouldn't different users' CCACHE_MAXxxxx values conflict? It seems to me it's better as a one-time or per-cache setting. I can definitely see how it would have value in a single-user setup, though.

---- Original message ----
>Date: Wed, 06 Apr 2011 22:12:55 +0200
>From: ccache-bounces at lists.samba.org (on behalf of Joel Rosdahl <joel at rosdahl.net>)
>Subject: [ccache] Configuration file plan  
>To: ccache list <ccache at lists.samba.org>
>I would like to improve ccache's configurability. As you know, configuration of
>ccache is today done by setting a bunch of environment variables, but that's
>becoming increasingly messy; there are currently 24 CCACHE_* variables in the
>development version of ccache. I think it's time to move settings to a
>configuration file while keeping the ability to override configuration by
>setting environment variables.
>I actually envision two configuration files:
>- <sysconfdir>/ccache.conf (typically /etc/ccache.conf)
>- <ccachedir>/ccache.conf (typically $HOME/.ccache/ccache.conf)
>ccache reads both (if they exist) each time it's run. Settings then have the
>following priority:
>1. Environment variables.
>2. <ccachedir>/ccache.conf
>3. <sysconfdir>/ccache.conf
>4. Compile-time defaults.
>This means that:
>- The administrator can choose default settings for the system by editing
>  <sysconfdir>/ccache.conf.
>- The user can override the system settings with his/her own default settings
>  by editing <ccachedir>/ccache.conf. (If <ccachedir> is shared by several
>  users, the settings are of course also shared.)
>- The user can override the default settings temporarily by setting environment
>  variables.
>- It's backwards compatible with the existing environment variables.
>I expect that the overhead of reading the configuration file(s) will be
>The "max files" and "max size" settings (set by command-line options
>-F/--max-files and -M/--max-size) are today stored in the "stats" files in the
>cache, but these will find a much better place in <ccachedir>/ccache.conf.
>I think the configuration file syntax should be a simple text format like this:
>    # A comment.
>    key = value
>No quotes around strings (at least not mandatory). Whitespace is trimmed at the
>beginning and end of values.
>Mapping between environment variables and keys in the configuration files:
>    Environment variable   Config key           Type     Default       Note
>    -----------------------------------------------------------------------
>    CCACHE_BASEDIR         base_dir             string   ""            [1]
>    CCACHE_CC              compiler             string   ""            [2]
>    CCACHE_COMPILERCHECK   compiler_check       string   mtime
>    CCACHE_COMPRESS        compression          boolean  false
>    CCACHE_CPP2            run_second_cpp       boolean  false
>    CCACHE_DETECT_SHEBANG  detect_shebang       boolean  false
>    CCACHE_DIR             cache_dir            string   $HOME/.ccache
>    CCACHE_DIRECT          direct_mode          boolean  true
>    CCACHE_DISABLE         disable              boolean  false
>    CCACHE_EXTENSION       cpp_extension        string   ""            [3]
>    CCACHE_EXTRAFILES      extra_files_to_hash  string   ""
>    CCACHE_HARDLINK        hard_link            boolean  false
>    CCACHE_HASHDIR         hash_dir             boolean  false
>    CCACHE_LOGFILE         log_file             string   ""            [4]
>NEW CCACHE_MAXFILES        max_files            integer  0             [5]
>NEW CCACHE_MAXSIZE         max_size             integer  1G            [6]
>    CCACHE_NLEVELS         cache_dir_levels     integer  2
>    CCACHE_PATH            path                 string   ""            [7]
>    CCACHE_PREFIX          prefix_command       string   ""            [8]
>    CCACHE_READONLY        read_only            boolean  false
>    CCACHE_RECACHE         recache              boolean  false
>    CCACHE_SLOPPINESS      sloppiness           string   ""
>    CCACHE_STATS           stats                boolean  true
>    CCACHE_TEMPDIR         temporary_dir        string   ""            [9]
>    CCACHE_UMASK           umask                integer  -             [10]
>    CCACHE_UNIFY           unify                boolean  false
>String and integer settings are handled in a straight-forward manner, but
>boolean settings are a bit special for backward-compatibility reasons:
>  - A boolean CCACHE_FOO set to any value (even the empty string) means true;
>    unset means false.
>  - For each boolean CCACHE_FOO, there is also a CCACHE_NOFOO with the inverse
>    logic. CCACHE_FOO (if set) has higher priority than CCACHE_NOFOO. (Some
>    settings are quite silly in their NO variant, but I think it's worth it for
>    consistency.)
>  - The possible values of a boolean setting in the configuration file are
>    spelled "true" and "false".
>$VARIABLE and ${VARIABLE} references will be expanded as expected in variables
>that specify paths.
>[1] The empty string means "don't rewrite absolute paths".
>[2] The empty string means find compiler from the command line.
>[3] The empty string means auto-detect.
>[4] The empty string means no logging.
>[5] New setting corresponding to the old -F command-line option. 0 means
>    unlimited.
>[6] New setting corresponding to the old -M command-line option. 0 means
>    unlimited. Suffix G, M or K may be used; default suffix: G.
>[7] The empty string means use the normal PATH.
>[8] The empty string means no prefix.
>[9] The empty string means "use <cache_dir>/tmp".
>[10] Not set means "don't change the umask". The integer is interpreted as an
>     octal number.
>New command-line options to ccache:
>  -o, --set-option=K=V     set configuration setting K to V
>  -p, --print-config       print current configuration settings
>The -F and -M command-line options will update the configuration file instead
>of the stats file (and those entries in the stats files will become obsolete).
>What do you think? Comments are welcome!
>-- Joel
>ccache mailing list
>ccache at lists.samba.org

More information about the ccache mailing list