summaryrefslogtreecommitdiff
path: root/CCache/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'CCache/debian/patches')
-rw-r--r--CCache/debian/patches/01_no_home.diff100
-rw-r--r--CCache/debian/patches/02_ccache-compressed.diff1026
-rw-r--r--CCache/debian/patches/03_long_options.diff133
-rw-r--r--CCache/debian/patches/04_ignore_profile.diff13
-rw-r--r--CCache/debian/patches/05_nfs_fix.diff45
-rw-r--r--CCache/debian/patches/06_md.diff77
-rw-r--r--CCache/debian/patches/07_cachedirtag.diff75
-rw-r--r--CCache/debian/patches/08_manpage_hyphens.diff89
-rw-r--r--CCache/debian/patches/09_respect_ldflags.diff11
-rw-r--r--CCache/debian/patches/10_lru_cleanup.diff23
-rw-r--r--CCache/debian/patches/11_utimes.diff85
-rw-r--r--CCache/debian/patches/12_cachesize_permissions.diff83
-rw-r--r--CCache/debian/patches/13_html_links.diff33
-rw-r--r--CCache/debian/patches/14_hardlink_doc.diff48
-rw-r--r--CCache/debian/patches/CREDITS47
15 files changed, 1888 insertions, 0 deletions
diff --git a/CCache/debian/patches/01_no_home.diff b/CCache/debian/patches/01_no_home.diff
new file mode 100644
index 000000000..019634c0c
--- /dev/null
+++ b/CCache/debian/patches/01_no_home.diff
@@ -0,0 +1,100 @@
+--- ccache.c
++++ ccache.c
+@@ -836,6 +836,13 @@
+ {
+ /* find the real compiler */
+ find_compiler(argc, argv);
++
++ /* use the real compiler if HOME is not set */
++ if (!cache_dir) {
++ cc_log("Unable to determine home directory\n");
++ cc_log("ccache is disabled\n");
++ failed();
++ }
+
+ /* we might be disabled */
+ if (getenv("CCACHE_DISABLE")) {
+@@ -895,6 +902,13 @@
+ printf("-V print version number\n");
+ }
+
++static void check_cache_dir(void)
++{
++ if (!cache_dir) {
++ fatal("Unable to determine home directory");
++ }
++}
++
+ /* the main program when not doing a compile */
+ static int ccache_main(int argc, char *argv[])
+ {
+@@ -914,31 +928,37 @@
+ exit(0);
+
+ case 's':
++ check_cache_dir();
+ stats_summary();
+ break;
+
+ case 'c':
++ check_cache_dir();
+ cleanup_all(cache_dir);
+ printf("Cleaned cache\n");
+ break;
+
+ case 'C':
++ check_cache_dir();
+ wipe_all(cache_dir);
+ printf("Cleared cache\n");
+ break;
+
+ case 'z':
++ check_cache_dir();
+ stats_zero();
+ printf("Statistics cleared\n");
+ break;
+
+ case 'F':
++ check_cache_dir();
+ v = atoi(optarg);
+ stats_set_limits(v, -1);
+ printf("Set cache file limit to %u\n", (unsigned)v);
+ break;
+
+ case 'M':
++ check_cache_dir();
+ v = value_units(optarg);
+ stats_set_limits(-1, v);
+ printf("Set cache size limit to %uk\n", (unsigned)v);
+@@ -983,7 +1003,10 @@
+
+ cache_dir = getenv("CCACHE_DIR");
+ if (!cache_dir) {
+- x_asprintf(&cache_dir, "%s/.ccache", get_home_directory());
++ const char *home_directory = get_home_directory();
++ if (home_directory) {
++ x_asprintf(&cache_dir, "%s/.ccache", home_directory);
++ }
+ }
+
+ temp_dir = getenv("CCACHE_TEMPDIR");
+@@ -1023,7 +1046,7 @@
+ }
+
+ /* make sure the cache dir exists */
+- if (create_dir(cache_dir) != 0) {
++ if (cache_dir && (create_dir(cache_dir) != 0)) {
+ fprintf(stderr,"ccache: failed to create %s (%s)\n",
+ cache_dir, strerror(errno));
+ exit(1);
+--- util.c
++++ util.c
+@@ -448,7 +448,7 @@
+ }
+ }
+ #endif
+- fatal("Unable to determine home directory");
++ cc_log("Unable to determine home directory");
+ return NULL;
+ }
+
diff --git a/CCache/debian/patches/02_ccache-compressed.diff b/CCache/debian/patches/02_ccache-compressed.diff
new file mode 100644
index 000000000..5740c2ca4
--- /dev/null
+++ b/CCache/debian/patches/02_ccache-compressed.diff
@@ -0,0 +1,1026 @@
+Index: ccache.1
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/ccache.1,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.6
+diff -u -r1.1.1.1.2.1 -r1.6
+--- ccache.1 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ ccache.1 21 Nov 2004 18:19:28 -0000 1.6
+@@ -210,7 +210,8 @@
+ CCACHE_HARDLINK then ccache will attempt to use hard links from the
+ cache directory when creating the compiler output rather than using a
+ file copy\&. Using hard links is faster, but can confuse programs like
+-\&'make\&' that rely on modification times\&.
++\&'make\&' that rely on modification times\&. Hard links are never made for
++compressed cache files\&.
+ .IP
+ .IP "\fBCCACHE_RECACHE\fP"
+ This forces ccache to not use any cached
+@@ -257,6 +258,11 @@
+ the default\&. On HP-UX set this environment variable to "i" if you use
+ the aCC compiler\&.
+ .IP
++.IP "\fBCCACHE_NOCOMPRESS\fP"
++If you set the environment variable
++CCACHE_NOCOMPRESS then there is no compression used on files that go
++into the cache\&.
++.IP
+ .PP
+ .SH "CACHE SIZE MANAGEMENT"
+ .PP
+@@ -269,6 +275,14 @@
+ below the numbers you specified in order to avoid doing the cache
+ clean operation too often\&.
+ .PP
++.SH "CACHE COMPRESSION"
++.PP
++By default ccache will compress all files it puts into the cache
++using the zlib compression\&. While this involves a negligible
++performance slowdown, it significantly increases the number of files
++that fit in the cache\&. You can turn off compression setting the
++CCACHE_NOCOMPRESS environment variable\&.
++.PP
+ .SH "HOW IT WORKS"
+ .PP
+ The basic idea is to detect when you are compiling exactly the same
+Index: ccache.c
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/ccache.c,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.9
+diff -u -r1.1.1.1.2.1 -r1.9
+--- ccache.c 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ ccache.c 21 Nov 2004 18:19:28 -0000 1.9
+@@ -199,7 +199,7 @@
+ fd = open(tmp_stderr, O_RDONLY | O_BINARY);
+ if (fd != -1) {
+ if (strcmp(output_file, "/dev/null") == 0 ||
+- rename(tmp_hashname, output_file) == 0 || errno == ENOENT) {
++ move_file(tmp_hashname, output_file) == 0 || errno == ENOENT) {
+ if (cpp_stderr) {
+ /* we might have some stderr from cpp */
+ int fd2 = open(cpp_stderr, O_RDONLY | O_BINARY);
+@@ -231,14 +231,25 @@
+ x_asprintf(&path_stderr, "%s.stderr", hashname);
+
+ if (stat(tmp_stderr, &st1) != 0 ||
+- stat(tmp_hashname, &st2) != 0 ||
+- rename(tmp_hashname, hashname) != 0 ||
+- rename(tmp_stderr, path_stderr) != 0) {
++ stat(tmp_hashname, &st2) != 0 ||
++ move_file(tmp_hashname, hashname) != 0 ||
++ move_file(tmp_stderr, path_stderr) != 0) {
+ cc_log("failed to rename tmp files - %s\n", strerror(errno));
+ stats_update(STATS_ERROR);
+ failed();
+ }
+
++#if ENABLE_ZLIB
++ /* do an extra stat on the cache files for
++ the size statistics */
++ if (stat(path_stderr, &st1) != 0 ||
++ stat(hashname, &st2) != 0) {
++ cc_log("failed to stat cache files - %s\n", strerror(errno));
++ stats_update(STATS_ERROR);
++ failed();
++ }
++#endif
++
+ cc_log("Placed %s into cache\n", output_file);
+ stats_tocache(file_size(&st1) + file_size(&st2));
+
+@@ -474,7 +485,13 @@
+ }
+
+ /* the user might be disabling cache hits */
++#ifndef ENABLE_ZLIB
++ /* if the cache file is compressed we must recache */
++ if ((first && getenv("CCACHE_RECACHE")) ||
++ test_if_compressed(hashname) == 1) {
++#else
+ if (first && getenv("CCACHE_RECACHE")) {
++#endif
+ close(fd_stderr);
+ unlink(stderr_file);
+ free(stderr_file);
+@@ -487,7 +504,9 @@
+ ret = 0;
+ } else {
+ unlink(output_file);
+- if (getenv("CCACHE_HARDLINK")) {
++ /* only make a hardlink if the cache file is uncompressed */
++ if (getenv("CCACHE_HARDLINK") &&
++ test_if_compressed(hashname) == 0) {
+ ret = link(hashname, output_file);
+ } else {
+ ret = copy_file(hashname, output_file);
+Index: ccache.h
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/ccache.h,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.7
+diff -u -r1.1.1.1.2.1 -r1.7
+--- ccache.h 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ ccache.h 21 Nov 2004 18:19:28 -0000 1.7
+@@ -23,6 +23,10 @@
+ #include <pwd.h>
+ #endif
+
++#ifdef ENABLE_ZLIB
++#include <zlib.h>
++#endif
++
+ #define STATUS_NOTFOUND 3
+ #define STATUS_FATAL 4
+ #define STATUS_NOCACHE 5
+@@ -36,6 +40,13 @@
+ #define DEFAULT_MAXSIZE (1000*1000)
+ #endif
+
++/* file copy mode */
++#ifdef ENABLE_ZLIB
++#define COPY_UNCOMPRESSED 0
++#define COPY_FROM_CACHE 1
++#define COPY_TO_CACHE 2
++#endif
++
+ enum stats {
+ STATS_NONE=0,
+ STATS_STDOUT,
+@@ -79,6 +90,8 @@
+
+ void copy_fd(int fd_in, int fd_out);
+ int copy_file(const char *src, const char *dest);
++int move_file(const char *src, const char *dest);
++int test_if_compressed(const char *filename);
+
+ int create_dir(const char *dir);
+ void x_asprintf(char **ptr, const char *format, ...);
+Index: ccache.yo
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/ccache.yo,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.5
+diff -u -r1.1.1.1.2.1 -r1.5
+--- ccache.yo 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ ccache.yo 21 Nov 2004 18:19:28 -0000 1.5
+@@ -169,6 +169,11 @@
+ this optimisation, in which case this option could allow ccache to be
+ used.
+
++dit(bf(CCACHE_NOCOMPRESS)) If you set the environment variable
++CCACHE_NOCOMPRESS then there is no compression used on files that go
++into the cache. However, this setting has no effect on how files are
++retrieved from the cache, compressed results will still be usable.
++
+ dit(bf(CCACHE_NOSTATS)) If you set the environment variable
+ CCACHE_NOSTATS then ccache will not update the statistics files on
+ each compile.
+@@ -181,7 +186,8 @@
+ CCACHE_HARDLINK then ccache will attempt to use hard links from the
+ cache directory when creating the compiler output rather than using a
+ file copy. Using hard links is faster, but can confuse programs like
+-'make' that rely on modification times.
++'make' that rely on modification times. Hard links are never made for
++compressed cache files.
+
+ dit(bf(CCACHE_RECACHE)) This forces ccache to not use any cached
+ results, even if it finds them. New results are still cached, but
+@@ -236,6 +242,14 @@
+ below the numbers you specified in order to avoid doing the cache
+ clean operation too often.
+
++manpagesection(CACHE COMPRESSION)
++
++By default ccache will compress all files it puts into the cache
++using the zlib compression. While this involves a negligible
++performance slowdown, it significantly increases the number of files
++that fit in the cache. You can turn off compression setting the
++CCACHE_NOCOMPRESS environment variable.
++
+ manpagesection(HOW IT WORKS)
+
+ The basic idea is to detect when you are compiling exactly the same
+@@ -294,6 +308,8 @@
+ cache. This tells the filesystem to inherit group ownership for new
+ directories. The command "chmod g+s `find $CCACHE_DIR -type d`" might
+ be useful for this.
++ it() Set bf(CCACHE_NOCOMPRESS) for all users, if there are users with
++ versions of ccache that do not support compression.
+ )
+
+ manpagesection(HISTORY)
+Index: config.h.in
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/config.h.in,v
+retrieving revision 1.1.1.1
+retrieving revision 1.2
+diff -u -r1.1.1.1 -r1.2
+--- config.h.in 30 Apr 2004 13:13:41 -0000 1.1.1.1
++++ config.h.in 4 May 2004 20:49:26 -0000 1.2
+@@ -98,3 +98,6 @@
+
+ /* Define _GNU_SOURCE so that we get all necessary prototypes */
+ #undef _GNU_SOURCE
++
++/* Define to 1 if you like to have zlib compression for the ccache. */
++#undef ENABLE_ZLIB
+Index: configure
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/configure,v
+retrieving revision 1.1.1.1.2.1
+diff -u -r1.1.1.1.2.1 configure
+--- configure 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ configure 21 Nov 2004 18:24:42 -0000
+@@ -836,6 +836,11 @@
+
+ cat <<\_ACEOF
+
++Optional Features:
++ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
++ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
++ --enable-zlib enable zlib support for ccache compression
++
+ Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+@@ -936,7 +941,7 @@
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+- cd "$ac_popdir"
++ cd $ac_popdir
+ done
+ fi
+
+@@ -1859,7 +1864,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -1917,7 +1923,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2033,7 +2040,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2087,7 +2095,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2132,7 +2141,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2176,7 +2186,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2609,7 +2620,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2681,7 +2693,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2735,7 +2748,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2806,7 +2820,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2860,7 +2875,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2927,7 +2943,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2997,7 +3014,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3078,7 +3096,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3248,7 +3267,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3319,7 +3339,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3509,7 +3530,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3611,7 +3633,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3676,7 +3699,8 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3775,6 +3799,229 @@
+
+ fi
+
++# Check whether --enable-zlib or --disable-zlib was given.
++if test "${enable_zlib+set}" = set; then
++ enableval="$enable_zlib"
++
++else
++ enable_zlib=yes
++fi;
++
++if test x"$enable_zlib" = x"yes"; then
++ if test "${ac_cv_header_zlib_h+set}" = set; then
++ echo "$as_me:$LINENO: checking for zlib.h" >&5
++echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6
++if test "${ac_cv_header_zlib_h+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
++echo "${ECHO_T}$ac_cv_header_zlib_h" >&6
++else
++ # Is the header compilable?
++echo "$as_me:$LINENO: checking zlib.h usability" >&5
++echo $ECHO_N "checking zlib.h usability... $ECHO_C" >&6
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++$ac_includes_default
++#include <zlib.h>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_header_compiler=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_header_compiler=no
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6
++
++# Is the header present?
++echo "$as_me:$LINENO: checking zlib.h presence" >&5
++echo $ECHO_N "checking zlib.h presence... $ECHO_C" >&6
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <zlib.h>
++_ACEOF
++if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
++ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } >/dev/null; then
++ if test -s conftest.err; then
++ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
++ else
++ ac_cpp_err=
++ fi
++else
++ ac_cpp_err=yes
++fi
++if test -z "$ac_cpp_err"; then
++ ac_header_preproc=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_header_preproc=no
++fi
++rm -f conftest.err conftest.$ac_ext
++echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6
++
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++ yes:no: )
++ { echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;}
++ ac_header_preproc=yes
++ ;;
++ no:yes:* )
++ { echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5
++echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;}
++ { echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;}
++ (
++ cat <<\_ASBOX
++## ------------------------------------------ ##
++## Report this to the AC_PACKAGE_NAME lists. ##
++## ------------------------------------------ ##
++_ASBOX
++ ) |
++ sed "s/^/$as_me: WARNING: /" >&2
++ ;;
++esac
++echo "$as_me:$LINENO: checking for zlib.h" >&5
++echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6
++if test "${ac_cv_header_zlib_h+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_cv_header_zlib_h=$ac_header_preproc
++fi
++echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5
++echo "${ECHO_T}$ac_cv_header_zlib_h" >&6
++
++fi
++if test $ac_cv_header_zlib_h = yes; then
++ echo "$as_me:$LINENO: checking for gzdopen in -lz" >&5
++echo $ECHO_N "checking for gzdopen in -lz... $ECHO_C" >&6
++if test "${ac_cv_lib_z_gzdopen+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lz $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++/* Override any gcc2 internal prototype to avoid an error. */
++#ifdef __cplusplus
++extern "C"
++#endif
++/* We use char because int might match the return type of a gcc2
++ builtin and then its argument prototype would still apply. */
++char gzdopen ();
++int
++main ()
++{
++gzdopen ();
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ (eval $ac_link) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_lib_z_gzdopen=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_cv_lib_z_gzdopen=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzdopen" >&5
++echo "${ECHO_T}$ac_cv_lib_z_gzdopen" >&6
++if test $ac_cv_lib_z_gzdopen = yes; then
++ LIBS="-lz $LIBS"; cat >>confdefs.h <<\_ACEOF
++#define ENABLE_ZLIB 1
++_ACEOF
++
++fi
++
++fi
++
++
++fi
++
+ ac_config_files="$ac_config_files Makefile"
+
+ cat >confcache <<\_ACEOF
+@@ -4568,6 +4815,11 @@
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
++ if test x"$ac_file" != x-; then
++ { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++ rm -f "$ac_file"
++ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+@@ -4606,12 +4858,6 @@
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+-
+- if test x"$ac_file" != x-; then
+- { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+- rm -f "$ac_file"
+- fi
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+Index: configure.in
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/configure.in,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.4
+diff -u -r1.1.1.1.2.1 -r1.4
+--- configure.in 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ configure.in 21 Nov 2004 18:19:28 -0000 1.4
+@@ -68,5 +68,14 @@
+ AC_DEFINE(HAVE_C99_VSNPRINTF, 1, [ ])
+ fi
+
++dnl Check for zlib.
++AC_ARG_ENABLE([zlib],
++ AS_HELP_STRING([--enable-zlib], [enable zlib support for ccache compression]),,
++ [enable_zlib=yes])
++
++if test x"$enable_zlib" = x"yes"; then
++ AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, gzdopen, LIBS="-lz $LIBS"; AC_DEFINE(ENABLE_ZLIB)))
++fi
++
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+Index: util.c
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/util.c,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.11
+diff -u -r1.1.1.1.2.1 -r1.11
+--- util.c 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ util.c 21 Nov 2004 18:19:28 -0000 1.11
+@@ -44,6 +44,7 @@
+ exit(1);
+ }
+
++#ifndef ENABLE_ZLIB
+ /* copy all data from one file descriptor to another */
+ void copy_fd(int fd_in, int fd_out)
+ {
+@@ -57,6 +58,11 @@
+ }
+ }
+
++/* move a file using rename */
++int move_file(const char *src, const char *dest) {
++ return rename(src, dest);
++}
++
+ /* copy a file - used when hard links don't work
+ the copy is done via a temporary file and atomic rename
+ */
+@@ -120,6 +126,174 @@
+ return 0;
+ }
+
++#else /* ENABLE_ZLIB */
++
++/* copy all data from one file descriptor to another
++ possibly decompressing it
++*/
++void copy_fd(int fd_in, int fd_out) {
++ char buf[10240];
++ int n;
++ gzFile gz_in;
++
++ gz_in = gzdopen(dup(fd_in), "rb");
++
++ if (!gz_in) {
++ fatal("Failed to copy fd");
++ }
++
++ while ((n = gzread(gz_in, buf, sizeof(buf))) > 0) {
++ if (write(fd_out, buf, n) != n) {
++ fatal("Failed to copy fd");
++ }
++ }
++}
++
++static int _copy_file(const char *src, const char *dest, int mode) {
++ int fd_in, fd_out;
++ gzFile gz_in, gz_out = NULL;
++ char buf[10240];
++ int n, ret;
++ char *tmp_name;
++ mode_t mask;
++ struct stat st;
++
++ x_asprintf(&tmp_name, "%s.XXXXXX", dest);
++
++ if (getenv("CCACHE_NOCOMPRESS")) {
++ mode = COPY_UNCOMPRESSED;
++ }
++
++ /* open source file */
++ fd_in = open(src, O_RDONLY);
++ if (fd_in == -1) {
++ return -1;
++ }
++
++ gz_in = gzdopen(fd_in, "rb");
++ if (!gz_in) {
++ close(fd_in);
++ return -1;
++ }
++
++ /* open destination file */
++ fd_out = mkstemp(tmp_name);
++ if (fd_out == -1) {
++ gzclose(gz_in);
++ free(tmp_name);
++ return -1;
++ }
++
++ if (mode == COPY_TO_CACHE) {
++ /* The gzip file format occupies at least 20 bytes. So
++ it will always occupy an entire filesystem block,
++ even for empty files.
++ Since most stderr files will be empty, we turn off
++ compression in this case to save space.
++ */
++ if (fstat(fd_in, &st) != 0) {
++ gzclose(gz_in);
++ close(fd_out);
++ free(tmp_name);
++ return -1;
++ }
++ if (file_size(&st) == 0) {
++ mode = COPY_UNCOMPRESSED;
++ }
++ }
++
++ if (mode == COPY_TO_CACHE) {
++ gz_out = gzdopen(dup(fd_out), "wb");
++ if (!gz_out) {
++ gzclose(gz_in);
++ close(fd_out);
++ free(tmp_name);
++ return -1;
++ }
++ }
++
++ while ((n = gzread(gz_in, buf, sizeof(buf))) > 0) {
++ if (mode == COPY_TO_CACHE) {
++ ret = gzwrite(gz_out, buf, n);
++ } else {
++ ret = write(fd_out, buf, n);
++ }
++ if (ret != n) {
++ gzclose(gz_in);
++ if (gz_out) {
++ gzclose(gz_out);
++ }
++ close(fd_out);
++ unlink(tmp_name);
++ free(tmp_name);
++ return -1;
++ }
++ }
++
++ gzclose(gz_in);
++ if (gz_out) {
++ gzclose(gz_out);
++ }
++
++ /* get perms right on the tmp file */
++ mask = umask(0);
++ fchmod(fd_out, 0666 & ~mask);
++ umask(mask);
++
++ /* the close can fail on NFS if out of space */
++ if (close(fd_out) == -1) {
++ unlink(tmp_name);
++ free(tmp_name);
++ return -1;
++ }
++
++ unlink(dest);
++
++ if (rename(tmp_name, dest) == -1) {
++ unlink(tmp_name);
++ free(tmp_name);
++ return -1;
++ }
++
++ free(tmp_name);
++
++ return 0;
++}
++
++/* move a file to the cache, compressing it */
++int move_file(const char *src, const char *dest) {
++ int ret;
++
++ ret = _copy_file(src, dest, COPY_TO_CACHE);
++ if (ret != -1) unlink(src);
++ return ret;
++}
++
++/* copy a file from the cache, decompressing it */
++int copy_file(const char *src, const char *dest) {
++ return _copy_file(src, dest, COPY_FROM_CACHE);
++}
++#endif /* ENABLE_ZLIB */
++
++/* test if a file is zlib compressed */
++int test_if_compressed(const char *filename) {
++ FILE *f;
++
++ f = fopen(filename, "rb");
++ if (!f) {
++ return 0;
++ }
++
++ /* test if file starts with 1F8B, which is zlib's
++ * magic number */
++ if ((fgetc(f) != 0x1f) || (fgetc(f) != 0x8b)) {
++ fclose(f);
++ return 0;
++ }
++
++ fclose(f);
++ return 1;
++}
+
+ /* make sure a directory exists */
+ int create_dir(const char *dir)
+Index: manage-cache.sh
+===================================================================
+RCS file: manage-cache.sh
+diff -N manage-cache.sh
+--- manage-cache.sh 1 Jan 1970 00:00:00 -0000
++++ manage-cache.sh-cache.sh 12 May 2004 19:22:20 -0000 1.1
+@@ -0,0 +1,68 @@
++#!/bin/bash
++#
++# 2004-05-12 lars@gustaebel.de
++
++CCACHE_DIR=${CCACHE_DIR:-$HOME/.ccache}
++
++echo "Do you want to compress or decompress the ccache in $CCACHE_DIR?"
++read -p "Type c or d: " mode
++
++if [ "$mode" != "c" ] && [ "$mode" != "d" ]
++then
++ exit 1
++fi
++
++is_compressed() {
++ test "$(head -c 2 $1)" = $'\x1f\x8b'
++ return $?
++}
++
++tmpfile=$(mktemp)
++
++for dir in 0 1 2 3 4 5 6 7 8 9 a b c d e f
++do
++ # process ccache subdir
++ echo -n "$dir "
++
++ # find cache files
++ find $CCACHE_DIR/$dir -type f -name '*-*' |
++ sort > $tmpfile
++
++ oldsize=$(cat $CCACHE_DIR/$dir/stats | cut -d ' ' -f 13)
++ newsize=0
++
++ while read file
++ do
++ # empty files will be ignored since compressing
++ # them makes them bigger
++ test $(stat -c %s $file) -eq 0 && continue
++
++ if [ $mode = c ]
++ then
++ if ! is_compressed $file
++ then
++ gzip $file
++ mv $file.gz $file
++ fi
++ else
++ if is_compressed $file
++ then
++ mv $file $file.gz
++ gzip -d $file.gz
++ fi
++ fi
++
++ # calculate new size statistic for this subdir
++ let newsize=$newsize+$(stat -c "%B*%b" $file)/1024
++ done < $tmpfile
++
++ # update statistic file
++ read -a numbers < $CCACHE_DIR/$dir/stats
++ numbers[12]=$newsize
++ echo "${numbers[*]} " > $CCACHE_DIR/$dir/stats
++done
++echo
++
++# clean up
++rm $tmpfile
++
+Index: Makefile.in
+===================================================================
+RCS file: /home/cvsroot/lars/ccache/Makefile.in,v
+retrieving revision 1.1.1.1.2.1
+retrieving revision 1.12
+diff -u -r1.1.1.1.2.1 -r1.12
+--- Makefile.in 21 Nov 2004 17:55:36 -0000 1.1.1.1.2.1
++++ Makefile.in 21 Nov 2004 18:19:28 -0000 1.12
+@@ -11,6 +11,7 @@
+ CFLAGS=@CFLAGS@ -I.
+ EXEEXT=@EXEEXT@
+
++LIBS= @LIBS@
+ OBJS= ccache.o mdfour.o hash.o execute.o util.o args.o stats.o \
+ cleanup.o snprintf.o unify.o
+ HEADERS = ccache.h mdfour.h
+@@ -20,7 +21,7 @@
+ docs: ccache.1 web/ccache-man.html
+
+ ccache$(EXEEXT): $(OBJS) $(HEADERS)
+- $(CC) $(CFLAGS) -o $@ $(OBJS)
++ $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
+
+ ccache.1: ccache.yo
+ -yodl2man -o ccache.1 ccache.yo
diff --git a/CCache/debian/patches/03_long_options.diff b/CCache/debian/patches/03_long_options.diff
new file mode 100644
index 000000000..3235c3806
--- /dev/null
+++ b/CCache/debian/patches/03_long_options.diff
@@ -0,0 +1,133 @@
+Index: ccache.c
+===================================================================
+--- ccache.c (révision 7695)
++++ ccache.c (copie de travail)
+@@ -22,6 +22,7 @@
+ */
+
+ #include "ccache.h"
++#include <getopt.h>
+
+ /* the base cache directory */
+ char *cache_dir = NULL;
+@@ -885,14 +886,14 @@
+ printf("\tcompiler [compile options] (via symbolic link)\n");
+ printf("\nOptions:\n");
+
+- printf("-s show statistics summary\n");
+- printf("-z zero statistics\n");
+- printf("-c run a cache cleanup\n");
+- printf("-C clear the cache completely\n");
+- printf("-F <maxfiles> set maximum files in cache\n");
+- printf("-M <maxsize> set maximum size of cache (use G, M or K)\n");
+- printf("-h this help page\n");
+- printf("-V print version number\n");
++ printf("-s, --show-stats show statistics summary\n");
++ printf("-z, --zero-stats zero statistics\n");
++ printf("-c, --cleanup run a cache cleanup\n");
++ printf("-C, --clear clear the cache completely\n");
++ printf("-F <n>, --max-files=<n> set maximum files in cache\n");
++ printf("-M <n>, --max-size=<n> set maximum size of cache (use G, M or K)\n");
++ printf("-h, --help this help page\n");
++ printf("-V, --version print version number\n");
+ }
+
+ /* the main program when not doing a compile */
+@@ -901,7 +902,21 @@
+ int c;
+ size_t v;
+
+- while ((c = getopt(argc, argv, "hszcCF:M:V")) != -1) {
++ static struct option long_options[] =
++ {
++ {"show-stats", no_argument, 0, 's'},
++ {"zero-stats", no_argument, 0, 'z'},
++ {"cleanup", no_argument, 0, 'c'},
++ {"clear", no_argument, 0, 'C'},
++ {"max-files", required_argument, 0, 'F'},
++ {"max-size", required_argument, 0, 'M'},
++ {"help", no_argument, 0, 'h'},
++ {"version", no_argument, 0, 'V'},
++ {0, 0, 0, 0}
++ };
++ int option_index = 0;
++
++ while ((c = getopt_long(argc, argv, "hszcCF:M:V", long_options, &option_index)) != -1) {
+ switch (c) {
+ case 'V':
+ printf("ccache version %s\n", CCACHE_VERSION);
+Index: ccache.1
+===================================================================
+--- ccache.1 (révision 7695)
++++ ccache.1 (copie de travail)
+@@ -23,14 +23,14 @@
+ .nf
+
+
+--s show statistics summary
+--z zero statistics
+--c run a cache cleanup
+--C clear the cache completely
+--F <maxfiles> set maximum files in cache
+--M <maxsize> set maximum size of cache (use G, M or K)
+--h this help page
+--V print version number
++\-s, \-\-show-stats show statistics summary
++\-z, \-\-zero-stats zero statistics
++\-c, \-\-cleanup run a cache cleanup
++\-C, \-\-clear clear the cache completely
++\-F <n>, \-\-max-files=<n> set maximum files in cache
++\-M <n>, \-\-max-size=<n> set maximum size of cache (use G, M or K)
++\-h, \-\-help this help page
++\-V, \-\-version print version number
+
+ .fi
+
+@@ -43,22 +43,22 @@
+ normal compiler options apply and you should refer to your compilers
+ documentation\&.
+ .PP
+-.IP "\fB-h\fP"
++.IP "\fB-h, --help\fP"
+ Print a options summary page
+ .IP
+-.IP "\fB-s\fP"
++.IP "\fB-s, --show-stats\fP"
+ Print the current statistics summary for the cache\&. The
+ statistics are stored spread across the subdirectories of the
+ cache\&. Using "ccache -s" adds up the statistics across all
+ subdirectories and prints the totals\&.
+ .IP
+-.IP "\fB-z\fP"
++.IP "\fB-z, --zero-stats\fP"
+ Zero the cache statistics\&.
+ .IP
+-.IP "\fB-V\fP"
++.IP "\fB-V, --version\fP"
+ Print the ccache version number
+ .IP
+-.IP "\fB-c\fP"
++.IP "\fB-c, --cleanup\fP"
+ Clean the cache and re-calculate the cache file count and
+ size totals\&. Normally the -c option should not be necessary as ccache
+ keeps the cache below the specified limits at runtime and keeps
+@@ -66,16 +66,16 @@
+ if you manually modify the cache contents or believe that the cache
+ size statistics may be inaccurate\&.
+ .IP
+-.IP "\fB-C\fP"
++.IP "\fB-C, --clear\fP"
+ Clear the entire cache, removing all cached files\&.
+ .IP
+-.IP "\fB-F maxfiles\fP"
++.IP "\fB-F <maxfiles>, --max-files=<maxfiles>\fP"
+ This sets the maximum number of files allowed in
+ the cache\&. The value is stored inside the cache directory and applies
+ to all future compiles\&. Due to the way the value is stored the actual
+ value used is always rounded down to the nearest multiple of 16\&.
+ .IP
+-.IP "\fB-M maxsize\fP"
++.IP "\fB-M <maxsize>, --max-size=<maxsize>\fP"
+ This sets the maximum cache size\&. You can specify
+ a value in gigabytes, megabytes or kilobytes by appending a G, M or K
+ to the value\&. The default is gigabytes\&. The actual value stored is
diff --git a/CCache/debian/patches/04_ignore_profile.diff b/CCache/debian/patches/04_ignore_profile.diff
new file mode 100644
index 000000000..568375092
--- /dev/null
+++ b/CCache/debian/patches/04_ignore_profile.diff
@@ -0,0 +1,13 @@
+diff -ru ccache-2.4/ccache.c ccache-2.4-tp/ccache.c
+--- ccache.c 2007-05-20 03:14:19.000000000 +1000
++++ ccache.c 2007-05-20 03:17:54.000000000 +1000
+@@ -641,6 +641,9 @@
+
+ /* these are too hard */
+ if (strcmp(argv[i], "-fbranch-probabilities")==0 ||
++ strcmp(argv[i], "-fprofile-arcs") == 0 ||
++ strcmp(argv[i], "-ftest-coverage") == 0 ||
++ strcmp(argv[i], "--coverage") == 0 ||
+ strcmp(argv[i], "-M") == 0 ||
+ strcmp(argv[i], "-MM") == 0 ||
+ strcmp(argv[i], "-x") == 0) {
diff --git a/CCache/debian/patches/05_nfs_fix.diff b/CCache/debian/patches/05_nfs_fix.diff
new file mode 100644
index 000000000..662d97639
--- /dev/null
+++ b/CCache/debian/patches/05_nfs_fix.diff
@@ -0,0 +1,45 @@
+--- ccache.1.orig 2007-05-20 17:30:57.000000000 +1200
++++ ccache.1 2007-05-20 17:31:27.000000000 +1200
+@@ -367,12 +367,6 @@
+ .IP o
+ ccache avoids a double call to cpp on a cache miss
+ .PP
+-.SH "BUGS"
+-.PP
+-When the cache is stored on an NFS filesystem, the filesystem must be
+-exported with the \fBno_subtree_check\fP option to make renames between
+-directories reliable\&.
+-.PP
+ .SH "CREDITS"
+ .PP
+ Thanks to the following people for their contributions to ccache
+--- util.c.patched 2007-05-20 18:19:11.000000000 +1200
++++ util.c 2007-05-20 18:20:55.000000000 +1200
+@@ -58,9 +58,26 @@
+ }
+ }
+
++static int safe_rename(const char* oldpath, const char* newpath)
++{
++ /* safe_rename is for creating entries in the cache.
++
++ Works like rename(), but it never overwrites an existing
++ cache entry. This avoids corruption on NFS. */
++ int status = link( oldpath, newpath );
++ if( status == 0 || errno == EEXIST )
++ {
++ return unlink( oldpath );
++ }
++ else
++ {
++ return -1;
++ }
++}
++
+ /* move a file using rename */
+ int move_file(const char *src, const char *dest) {
+- return rename(src, dest);
++ return safe_rename(src, dest);
+ }
+
+ /* copy a file - used when hard links don't work
diff --git a/CCache/debian/patches/06_md.diff b/CCache/debian/patches/06_md.diff
new file mode 100644
index 000000000..3f68850ca
--- /dev/null
+++ b/CCache/debian/patches/06_md.diff
@@ -0,0 +1,77 @@
+--- ccache.c Mon Sep 13 11:38:30 2004
++++ ccache.c Thu Jun 21 22:17:32 2007
+@@ -627,6 +627,13 @@ static void process_args(int argc, char
+ int found_S_opt = 0;
+ struct stat st;
+ char *e;
++ /* is gcc being asked to output dependencies? */
++ int generating_dependencies = 0;
++ /* is the dependency makefile name overridden with -MF? */
++ int dependency_filename_specified = 0;
++ /* is the dependency makefile target name specified with -MQ or -MF? */
++ int dependency_target_specified = 0;
++
+
+ stripped_args = args_init(0, NULL);
+
+@@ -702,6 +709,18 @@ static void process_args(int argc, char
+ continue;
+ }
+
++ /* These options require special handling, because they
++ behave differently with gcc -E, when the output
++ file is not specified. */
++
++ if (strcmp(argv[i], "-MD") == 0 || strcmp(argv[i], "-MMD") == 0) {
++ generating_dependencies = 1;
++ } else if (strcmp(argv[i], "-MF") == 0) {
++ dependency_filename_specified = 1;
++ } else if (strcmp(argv[i], "-MQ") == 0 || strcmp(argv[i], "-MT") == 0) {
++ dependency_target_specified = 1;
++ }
++
+ /* options that take an argument */
+ {
+ const char *opts[] = {"-I", "-include", "-imacros", "-iprefix",
+@@ -812,6 +831,41 @@ static void process_args(int argc, char
+ }
+ p[1] = found_S_opt ? 's' : 'o';
+ p[2] = 0;
++ }
++
++ /* If dependencies are generated, configure the preprocessor */
++
++ if (generating_dependencies && output_file) {
++ if (!dependency_filename_specified) {
++ char *default_depfile_name = x_strdup(output_file);
++ char *p = strrchr(default_depfile_name, '.');
++
++ if (p) {
++ if (strlen(p) < 2) {
++ stats_update(STATS_ARGS);
++ failed();
++ return;
++ }
++ *p = 0;
++ }
++ else {
++ int len = p - default_depfile_name;
++
++ p = x_malloc(len + 3);
++ strncpy(default_depfile_name, p, len - 1);
++ free(default_depfile_name);
++ default_depfile_name = p;
++ }
++
++ strcat(default_depfile_name, ".d");
++ args_add(stripped_args, "-MF");
++ args_add(stripped_args, default_depfile_name);
++ }
++
++ if (!dependency_target_specified) {
++ args_add(stripped_args, "-MT");
++ args_add(stripped_args, output_file);
++ }
+ }
+
+ /* cope with -o /dev/null */
diff --git a/CCache/debian/patches/07_cachedirtag.diff b/CCache/debian/patches/07_cachedirtag.diff
new file mode 100644
index 000000000..683b48d14
--- /dev/null
+++ b/CCache/debian/patches/07_cachedirtag.diff
@@ -0,0 +1,75 @@
+Index: ccache.c
+===================================================================
+--- ccache.c (révision 7695)
++++ ccache.c (copie de travail)
+@@ -1029,6 +1029,14 @@
+ exit(1);
+ }
+
++ if (!getenv("CCACHE_READONLY")) {
++ if (create_cachedirtag(cache_dir) != 0) {
++ fprintf(stderr,"ccache: failed to create %s/CACHEDIR.TAG (%s)\n",
++ cache_dir, strerror(errno));
++ exit(1);
++ }
++ }
++
+ ccache(argc, argv);
+ return 1;
+ }
+Index: ccache.h
+===================================================================
+--- ccache.h (révision 7695)
++++ ccache.h (copie de travail)
+@@ -81,6 +81,7 @@
+ int copy_file(const char *src, const char *dest);
+
+ int create_dir(const char *dir);
++int create_cachedirtag(const char *dir);
+ void x_asprintf(char **ptr, const char *format, ...);
+ char *x_strdup(const char *s);
+ void *x_realloc(void *ptr, size_t size);
+Index: util.c
+===================================================================
+--- util.c (révision 7695)
++++ util.c (copie de travail)
+@@ -138,6 +138,39 @@
+ return 0;
+ }
+
++char const CACHEDIR_TAG[] =
++ "Signature: 8a477f597d28d172789f06886806bc55\n"
++ "# This file is a cache directory tag created by ccache.\n"
++ "# For information about cache directory tags, see:\n"
++ "# http://www.brynosaurus.com/cachedir/\n";
++
++int create_cachedirtag(const char *dir)
++{
++ char *filename;
++ struct stat st;
++ FILE *f;
++ x_asprintf(&filename, "%s/CACHEDIR.TAG", dir);
++ if (stat(filename, &st) == 0) {
++ if (S_ISREG(st.st_mode)) {
++ goto success;
++ }
++ errno = EEXIST;
++ goto error;
++ }
++ f = fopen(filename, "w");
++ if (!f) goto error;
++ if (fwrite(CACHEDIR_TAG, sizeof(CACHEDIR_TAG)-1, 1, f) != 1) {
++ goto error;
++ }
++ if (fclose(f)) goto error;
++success:
++ free(filename);
++ return 0;
++error:
++ free(filename);
++ return 1;
++}
++
+ /*
+ this is like asprintf() but dies if the malloc fails
+ note that we use vsnprintf in a rather poor way to make this more portable
diff --git a/CCache/debian/patches/08_manpage_hyphens.diff b/CCache/debian/patches/08_manpage_hyphens.diff
new file mode 100644
index 000000000..55ced4a23
--- /dev/null
+++ b/CCache/debian/patches/08_manpage_hyphens.diff
@@ -0,0 +1,89 @@
+Index: ccache.1
+===================================================================
+--- ccache.1 (révision 7695)
++++ ccache.1 (copie de travail)
+@@ -49,7 +49,7 @@
+ .IP "\fB-s\fP"
+ Print the current statistics summary for the cache\&. The
+ statistics are stored spread across the subdirectories of the
+-cache\&. Using "ccache -s" adds up the statistics across all
++cache\&. Using "ccache \-s" adds up the statistics across all
+ subdirectories and prints the totals\&.
+ .IP
+ .IP "\fB-z\fP"
+@@ -60,7 +60,7 @@
+ .IP
+ .IP "\fB-c\fP"
+ Clean the cache and re-calculate the cache file count and
+-size totals\&. Normally the -c option should not be necessary as ccache
++size totals\&. Normally the \-c option should not be necessary as ccache
+ keeps the cache below the specified limits at runtime and keeps
+ statistics up to date on each compile\&. This option is mostly useful
+ if you manually modify the cache contents or believe that the cache
+@@ -100,9 +100,9 @@
+
+
+ cp ccache /usr/local/bin/
+- ln -s /usr/local/bin/ccache /usr/local/bin/gcc
+- ln -s /usr/local/bin/ccache /usr/local/bin/g++
+- ln -s /usr/local/bin/ccache /usr/local/bin/cc
++ ln \-s /usr/local/bin/ccache /usr/local/bin/gcc
++ ln \-s /usr/local/bin/ccache /usr/local/bin/g++
++ ln \-s /usr/local/bin/ccache /usr/local/bin/cc
+
+ .fi
+
+@@ -118,7 +118,7 @@
+ .PP
+ When run as a compiler front end ccache usually just takes the same
+ command line options as the compiler you are using\&. The only exception
+-to this is the option \&'--ccache-skip\&'\&. That option can be used to tell
++to this is the option \&'\-\-ccache-skip\&'\&. That option can be used to tell
+ ccache that the next option is definitely not a input filename, and
+ should be passed along to the compiler as-is\&.
+ .PP
+@@ -128,7 +128,7 @@
+ of the resulting object file (among other things)\&. The heuristic
+ ccache uses in this parse is that any string on the command line that
+ exists as a file is treated as an input file name (usually a C
+-file)\&. By using --ccache-skip you can force an option to not be
++file)\&. By using \-\-ccache-skip you can force an option to not be
+ treated as an input file name and instead be passed along to the
+ compiler as a command line option\&.
+ .PP
+@@ -238,7 +238,7 @@
+ .IP "\fBCCACHE_UNIFY\fP"
+ If you set the environment variable CCACHE_UNIFY
+ then ccache will use the C/C++ unifier when hashing the pre-processor
+-output if -g is not used in the compile\&. The unifier is slower than a
++output if \-g is not used in the compile\&. The unifier is slower than a
+ normal hash, so setting this environment variable loses a little bit
+ of speed, but it means that ccache can take advantage of not
+ recompiling when the changes to the source code consist of
+@@ -262,7 +262,7 @@
+ .PP
+ By default ccache has a one gigabyte limit on the cache size and no
+ maximum number of files\&. You can set a different limit using the
+-"ccache -M" and "ccache -F" options, which set the size and number of
++"ccache \-M" and "ccache \-F" options, which set the size and number of
+ files limits\&.
+ .PP
+ When these limits are reached ccache will reduce the cache to 20%
+@@ -276,7 +276,7 @@
+ that it is the same code by forming a hash of:
+ .PP
+ .IP o
+-the pre-processor output from running the compiler with -E
++the pre-processor output from running the compiler with \-E
+ .IP o
+ the command line options
+ .IP o
+@@ -331,7 +331,7 @@
+ .IP o
+ Make sure that the setgid bit is set on all directories in the
+ cache\&. This tells the filesystem to inherit group ownership for new
+-directories\&. The command "chmod g+s `find $CCACHE_DIR -type d`" might
++directories\&. The command "chmod g+s `find $CCACHE_DIR \-type d`" might
+ be useful for this\&.
+ .PP
+ .SH "HISTORY"
diff --git a/CCache/debian/patches/09_respect_ldflags.diff b/CCache/debian/patches/09_respect_ldflags.diff
new file mode 100644
index 000000000..0ce2c2de3
--- /dev/null
+++ b/CCache/debian/patches/09_respect_ldflags.diff
@@ -0,0 +1,11 @@
+--- Makefile.in.orig 2008-03-23 17:01:19.000000000 +1300
++++ Makefile.in 2008-03-23 17:03:03.000000000 +1300
+@@ -21,7 +21,7 @@
+ docs: ccache.1 web/ccache-man.html
+
+ ccache$(EXEEXT): $(OBJS) $(HEADERS)
+- $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+ ccache.1: ccache.yo
+ -yodl2man -o ccache.1 ccache.yo
diff --git a/CCache/debian/patches/10_lru_cleanup.diff b/CCache/debian/patches/10_lru_cleanup.diff
new file mode 100644
index 000000000..24463e529
--- /dev/null
+++ b/CCache/debian/patches/10_lru_cleanup.diff
@@ -0,0 +1,23 @@
+--- ccache.c (révision 8804)
++++ ccache.c (copie de travail)
+@@ -481,6 +481,9 @@
+ return;
+ }
+
++ /* update timestamps for LRU cleanup
++ also gives output_file a sensible mtime when hard-linking (for make) */
++ utime(hashname, NULL);
+ utime(stderr_file, NULL);
+
+ if (strcmp(output_file, "/dev/null") == 0) {
+@@ -513,10 +516,6 @@
+ failed();
+ }
+ }
+- if (ret == 0) {
+- /* update the mtime on the file so that make doesn't get confused */
+- utime(output_file, NULL);
+- }
+
+ /* get rid of the intermediate preprocessor file */
+ if (i_tmpfile) {
diff --git a/CCache/debian/patches/11_utimes.diff b/CCache/debian/patches/11_utimes.diff
new file mode 100644
index 000000000..2886bf3d6
--- /dev/null
+++ b/CCache/debian/patches/11_utimes.diff
@@ -0,0 +1,85 @@
+--- ccache.c 2004-09-13 03:38:30.000000000 -0700
++++ ccache.c 2006-06-09 16:29:16.695117780 -0700
+@@ -481,8 +481,13 @@
+
+ /* update timestamps for LRU cleanup
+ also gives output_file a sensible mtime when hard-linking (for make) */
++#ifdef HAVE_UTIMES
++ utimes(hashname, NULL);
++ utimes(stderr_file, NULL);
++#else
+ utime(hashname, NULL);
+ utime(stderr_file, NULL);
++#endif
+
+ if (strcmp(output_file, "/dev/null") == 0) {
+ ret = 0;
+--- ccache.h 2004-09-13 03:38:30.000000000 -0700
++++ ccache.h 2006-06-09 16:28:16.601658626 -0700
+@@ -22,6 +22,9 @@
+ #ifdef HAVE_PWD_H
+ #include <pwd.h>
+ #endif
++#ifdef HAVE_SYS_TIME_H
++#include <sys/time.h>
++#endif
+
+ #define STATUS_NOTFOUND 3
+ #define STATUS_FATAL 4
+--- config.h.in 2003-09-27 21:48:17.000000000 -0700
++++ config.h.in 2006-06-09 16:25:43.000000000 -0700
+@@ -19,6 +19,9 @@
+ /* Define to 1 if you have the `gethostname' function. */
+ #undef HAVE_GETHOSTNAME
+
++/* Define to 1 if you have the `getpwuid' function. */
++#undef HAVE_GETPWUID
++
+ /* Define to 1 if you have the <inttypes.h> header file. */
+ #undef HAVE_INTTYPES_H
+
+@@ -31,6 +34,9 @@
+ /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+ #undef HAVE_NDIR_H
+
++/* Define to 1 if you have the <pwd.h> header file. */
++#undef HAVE_PWD_H
++
+ /* Define to 1 if you have the `realpath' function. */
+ #undef HAVE_REALPATH
+
+@@ -60,6 +66,9 @@
+ /* Define to 1 if you have the <sys/stat.h> header file. */
+ #undef HAVE_SYS_STAT_H
+
++/* Define to 1 if you have the <sys/time.h> header file. */
++#undef HAVE_SYS_TIME_H
++
+ /* Define to 1 if you have the <sys/types.h> header file. */
+ #undef HAVE_SYS_TYPES_H
+
+@@ -69,6 +78,9 @@
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+
++/* Define to 1 if you have the `utimes' function. */
++#undef HAVE_UTIMES
++
+ /* Define to 1 if you have the `vasprintf' function. */
+ #undef HAVE_VASPRINTF
+
+--- configure.in 2004-09-13 03:38:30.000000000 -0700
++++ configure.in 2006-06-09 16:25:15.541288184 -0700
+@@ -27,10 +27,11 @@
+ AC_HEADER_TIME
+ AC_HEADER_SYS_WAIT
+
+-AC_CHECK_HEADERS(ctype.h strings.h stdlib.h string.h pwd.h)
++AC_CHECK_HEADERS(ctype.h strings.h stdlib.h string.h pwd.h sys/time.h)
+
+ AC_CHECK_FUNCS(realpath snprintf vsnprintf vasprintf asprintf mkstemp)
+ AC_CHECK_FUNCS(gethostname getpwuid)
++AC_CHECK_FUNCS(utimes)
+
+ AC_CACHE_CHECK([for compar_fn_t in stdlib.h],ccache_cv_COMPAR_FN_T, [
+ AC_TRY_COMPILE(
diff --git a/CCache/debian/patches/12_cachesize_permissions.diff b/CCache/debian/patches/12_cachesize_permissions.diff
new file mode 100644
index 000000000..28801b771
--- /dev/null
+++ b/CCache/debian/patches/12_cachesize_permissions.diff
@@ -0,0 +1,83 @@
+--- stats.c (révision 8804)
++++ stats.c (copie de travail)
+@@ -286,7 +286,7 @@
+
+
+ /* set the per directory limits */
+-void stats_set_limits(long maxfiles, long maxsize)
++int stats_set_limits(long maxfiles, long maxsize)
+ {
+ int dir;
+ unsigned counters[STATS_END];
+@@ -298,7 +298,9 @@
+ maxsize /= 16;
+ }
+
+- create_dir(cache_dir);
++ if (create_dir(cache_dir) != 0) {
++ return 1;
++ }
+
+ /* set the limits in each directory */
+ for (dir=0;dir<=0xF;dir++) {
+@@ -306,7 +308,9 @@
+ int fd;
+
+ x_asprintf(&cdir, "%s/%1x", cache_dir, dir);
+- create_dir(cdir);
++ if (create_dir(cdir) != 0) {
++ return 1;
++ }
+ x_asprintf(&fname, "%s/stats", cdir);
+ free(cdir);
+
+@@ -326,6 +330,8 @@
+ }
+ free(fname);
+ }
++
++ return 0;
+ }
+
+ /* set the per directory sizes */
+--- ccache.c (révision 8804)
++++ ccache.c (copie de travail)
+@@ -935,15 +934,23 @@
+ case 'F':
+ check_cache_dir();
+ v = atoi(optarg);
+- stats_set_limits(v, -1);
+- printf("Set cache file limit to %u\n", (unsigned)v);
++ if (stats_set_limits(v, -1) == 0) {
++ printf("Set cache file limit to %u\n", (unsigned)v);
++ } else {
++ printf("Could not set cache file limit.\n");
++ exit(1);
++ }
+ break;
+
+ case 'M':
+ check_cache_dir();
+ v = value_units(optarg);
+- stats_set_limits(-1, v);
+- printf("Set cache size limit to %uk\n", (unsigned)v);
++ if (stats_set_limits(-1, v) == 0) {
++ printf("Set cache size limit to %uk\n", (unsigned)v);
++ } else {
++ printf("Could not set cache size limit.\n");
++ exit(1);
++ }
+ break;
+
+ default:
+--- ccache.h (révision 8804)
++++ ccache.h (copie de travail)
+@@ -101,7 +101,7 @@
+ void stats_summary(void);
+ void stats_tocache(size_t size);
+ void stats_read(const char *stats_file, unsigned counters[STATS_END]);
+-void stats_set_limits(long maxfiles, long maxsize);
++int stats_set_limits(long maxfiles, long maxsize);
+ size_t value_units(const char *s);
+ void display_size(unsigned v);
+ void stats_set_sizes(const char *dir, size_t num_files, size_t total_size);
diff --git a/CCache/debian/patches/13_html_links.diff b/CCache/debian/patches/13_html_links.diff
new file mode 100644
index 000000000..dadf1b6c2
--- /dev/null
+++ b/CCache/debian/patches/13_html_links.diff
@@ -0,0 +1,33 @@
+--- web/index.html~ 2004-09-13 13:38:30.000000000 +0300
++++ web/index.html 2004-09-26 01:04:38.458008118 +0300
+@@ -29,10 +29,10 @@
+ <li>fixed handling of HOME environment variable
+ </ul>
+
+-See the <a href="/ccache/ccache-man.html">manual page</a> for details
++See the <a href="ccache-man.html">manual page</a> for details
+ on the new options.<p>
+
+-You can get this release from the <a href="/ftp/ccache/">download directory</a>
++You can get this release from the <a href="http://ccache.samba.org/ftp/ccache/">download directory</a>
+
+ <p>NOTE! This release changes the hash input slighly, so you will
+ probably find that you will not get any hits against your existing
+@@ -87,7 +87,7 @@
+
+ <h2>Documentation</h2>
+
+-See the <a href="/ccache/ccache-man.html">manual page</a>
++See the <a href="ccache-man.html">manual page</a>
+
+
+ <h2>Performance</h2>
+@@ -116,7 +116,7 @@
+ <h2>Download</h2>
+
+ You can download the latest release from the <a
+-href="/ftp/ccache/">download directory</a>.<p>
++href="http://ccache.samba.org/ftp/ccache/">download directory</a>.<p>
+
+ For the bleeding edge, you can fetch ccache via CVS or
+ rsync. To fetch via cvs use the following command:
diff --git a/CCache/debian/patches/14_hardlink_doc.diff b/CCache/debian/patches/14_hardlink_doc.diff
new file mode 100644
index 000000000..bd9e25ba6
--- /dev/null
+++ b/CCache/debian/patches/14_hardlink_doc.diff
@@ -0,0 +1,48 @@
+Index: ccache.1
+===================================================================
+RCS file: /cvsroot/ccache/ccache.1,v
+retrieving revision 1.26
+diff -u -r1.26 ccache.1
+--- ccache.1 24 Nov 2005 21:10:08 -0000 1.26
++++ ccache.1 21 Jul 2007 21:03:32 -0000
+@@ -330,7 +330,7 @@
+ .IP o
+ Use the same \fBCCACHE_DIR\fP environment variable setting
+ .IP o
+-Set the \fBCCACHE_NOLINK\fP environment variable
++Unset the \fBCCACHE_HARDLINK\fP environment variable
+ .IP o
+ Make sure everyone sets the CCACHE_UMASK environment variable
+ to 002, this ensures that cached files are accessible to everyone in
+Index: ccache.yo
+===================================================================
+RCS file: /cvsroot/ccache/ccache.yo,v
+retrieving revision 1.27
+diff -u -r1.27 ccache.yo
+--- ccache.yo 24 Nov 2005 21:54:09 -0000 1.27
++++ ccache.yo 21 Jul 2007 21:03:32 -0000
+@@ -289,7 +289,7 @@
+
+ itemize(
+ it() Use the same bf(CCACHE_DIR) environment variable setting
+- it() Set the bf(CCACHE_NOLINK) environment variable
++ it() Unset the bf(CCACHE_HARDLINK) environment variable
+ it() Make sure everyone sets the CCACHE_UMASK environment variable
+ to 002, this ensures that cached files are accessible to everyone in
+ the group.
+Index: web/ccache-man.html
+===================================================================
+RCS file: /cvsroot/ccache/web/ccache-man.html,v
+retrieving revision 1.25
+diff -u -r1.25 ccache-man.html
+--- web/ccache-man.html 13 Sep 2004 10:38:17 -0000 1.25
++++ web/ccache-man.html 21 Jul 2007 21:03:32 -0000
+@@ -256,7 +256,7 @@
+ following conditions need to be met:
+ <p><ul>
+ <li > Use the same <strong>CCACHE_DIR</strong> environment variable setting
+- <li > Set the <strong>CCACHE_NOLINK</strong> environment variable
++ <li > Unset the <strong>CCACHE_HARDLINK</strong> environment variable
+ <li > Make sure everyone sets the CCACHE_UMASK environment variable
+ to 002, this ensures that cached files are accessible to everyone in
+ the group.
diff --git a/CCache/debian/patches/CREDITS b/CCache/debian/patches/CREDITS
new file mode 100644
index 000000000..c4e323b7b
--- /dev/null
+++ b/CCache/debian/patches/CREDITS
@@ -0,0 +1,47 @@
+01_no_home.diff:
+ Francois Marier <francois@debian.org>
+ Made especially for the Debian package.
+
+02_ccache_compressed.diff:
+ Lars Gustäbel <lars@gustaebel.de>
+ http://www.gustaebel.de/lars/ccache/ (downloaded on 2007-05-20)
+
+03_long_options.diff:
+ Francois Marier <francois@debian.org>
+ Made especially for the Debian package.
+
+04_ignore_profile.diff:
+ Ted Percival <ted@midg3t.net>
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=20;filename=ccache-profile.patch;att=1;bug=215849
+
+05_nfs_fix.diff:
+ John Coiner <john.coiner@amd.com>
+ http://lists.samba.org/archive/ccache/2007q1/000265.html
+
+06_md.diff:
+ Andrea Bittau <a.bittau@cs.ucl.ac.uk>
+ http://darkircop.org/ccache/ccache-2.4-md.patch (downloaded on 2007-06-30)
+
+07_cachedirtag.diff:
+ Karl Chen <quarl@cs.berkeley.edu>
+ http://lists.samba.org/archive/ccache/2008q1/000316.html (downloaded on 2008-02-02)
+
+08_manpage_hyphens.diff:
+ Francois Marier <francois@debian.org>
+ Made especially for the Debian package.
+
+09_respect_ldflags.diff:
+ Lisa Seelye <lisa@gentoo.org>
+ http://sources.gentoo.org/viewcvs.py/gentoo-x86/dev-util/ccache/files/ccache-2.4-respectflags.patch?rev=1.1&view=markup
+
+10_lru_cleanup.diff:
+ RW <fbsd06@mlists.homeunix.com>
+ http://lists.samba.org/archive/ccache/2008q2/000339.html (downloaded on 2008-04-11)
+
+11_utimes.diff:
+ Robin H. Johnson <robbat2@gentoo.org>
+ http://sources.gentoo.org/viewcvs.py/gentoo-x86/dev-util/ccache/files/ccache-2.4-utimes.patch?rev=1.1&view=markup
+
+12_cachesize_permissions.diff:
+ Francois Marier <francois@debian.org>
+ Made especially for the Debian package to fix http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=332527