Imported Upstream version 3.1.8 upstream/3.1.8
authorJinWang An <jinwang.an@samsung.com>
Tue, 3 Aug 2021 06:48:31 +0000 (15:48 +0900)
committerJinWang An <jinwang.an@samsung.com>
Tue, 3 Aug 2021 06:48:31 +0000 (15:48 +0900)
19 files changed:
AUTHORS.html
AUTHORS.txt
INSTALL.html
LICENSE.html
MANUAL.html
Makefile.in
NEWS.html
NEWS.txt
README.html
ccache.1
ccache.c
configure
hashutil.c
manifest.c
test.sh
test/test_hashutil.c
test/test_util.c
util.c
version.c

index 1279356..6167306 100644 (file)
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>ccache authors</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>ccache authors</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -577,6 +781,11 @@ Clemens Rabe &lt;<a href="mailto:crabe@gmx.de">crabe@gmx.de</a>&gt;
 </li>\r
 <li>\r
 <p>\r
+Eric Blau &lt;<a href="mailto:Eric.Blau@tekelec.com">Eric.Blau@tekelec.com</a>&gt;\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 Francois Marier &lt;<a href="mailto:francois@debian.org">francois@debian.org</a>&gt;\r
 </p>\r
 </li>\r
@@ -602,11 +811,21 @@ Kovarththanan Rajaratnam &lt;<a href="mailto:kovarththanan.rajaratnam@gmail.com"
 </li>\r
 <li>\r
 <p>\r
+Lalit Chhabra &lt;<a href="mailto:lchhabra@linuxmail.org">lchhabra@linuxmail.org</a>&gt;\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 Lars Gustäbel &lt;<a href="mailto:lars@gustaebel.de">lars@gustaebel.de</a>&gt;\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
+Lubos Lunak &lt;<a href="mailto:l.lunak@suse.cz">l.lunak@suse.cz</a>&gt;\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 Martin Pool &lt;<a href="mailto:mbp@sourcefrog.net">mbp@sourcefrog.net</a>&gt;\r
 </p>\r
 </li>\r
@@ -617,22 +836,27 @@ Owen Mann &lt;<a href="mailto:owen@mann.org">owen@mann.org</a>&gt;
 </li>\r
 <li>\r
 <p>\r
+Patrick von Reth &lt;<a href="mailto:vonreth@kde.org">vonreth@kde.org</a>&gt;\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
 Paul Griffith &lt;<a href="mailto:paulg@cse.yorku.ca">paulg@cse.yorku.ca</a>&gt;\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-Ramiro Polla &lt;<a href="mailto:ramiro.polla@gmail.com">ramiro.polla@gmail.com</a>&gt;\r
+RW &lt;<a href="mailto:fbsd06@mlists.homeunix.com">fbsd06@mlists.homeunix.com</a>&gt;\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-Robin H. Johnson &lt;<a href="mailto:robbat2@gentoo.org">robbat2@gentoo.org</a>&gt;\r
+Ramiro Polla &lt;<a href="mailto:ramiro.polla@gmail.com">ramiro.polla@gmail.com</a>&gt;\r
 </p>\r
 </li>\r
 <li>\r
 <p>\r
-RW &lt;<a href="mailto:fbsd06@mlists.homeunix.com">fbsd06@mlists.homeunix.com</a>&gt;\r
+Robin H. Johnson &lt;<a href="mailto:robbat2@gentoo.org">robbat2@gentoo.org</a>&gt;\r
 </p>\r
 </li>\r
 <li>\r
@@ -668,8 +892,8 @@ Wilson Snyder &lt;<a href="mailto:wsnyder@wsnyder.org">wsnyder@wsnyder.org</a>&g
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2012-01-08 15:29:34 CET\r
+Version 3.1.8<br />\r
+Last updated 2012-08-11 10:57:17 CEST\r
 </div>\r
 </div>\r
 </body>\r
index db7a4b0..22d0707 100644 (file)
@@ -12,18 +12,22 @@ ccache is a collective work with contributions from many people, including:
 * Björn Jacke <bj@sernet.de>
 * Bo Rydberg <bolry@hotmail.com>
 * Clemens Rabe <crabe@gmx.de>
+* Eric Blau <Eric.Blau@tekelec.com>
 * Francois Marier <francois@debian.org>
 * Joel Rosdahl <joel@rosdahl.net>
 * John Coiner <john.coiner@amd.com>
 * Karl Chen <quarl@cs.berkeley.edu>
 * Kovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>
+* Lalit Chhabra <lchhabra@linuxmail.org>
 * Lars Gustäbel <lars@gustaebel.de>
+* Lubos Lunak <l.lunak@suse.cz>
 * Martin Pool <mbp@sourcefrog.net>
 * Owen Mann <owen@mann.org>
+* Patrick von Reth <vonreth@kde.org>
 * Paul Griffith <paulg@cse.yorku.ca>
+* RW <fbsd06@mlists.homeunix.com>
 * Ramiro Polla <ramiro.polla@gmail.com>
 * Robin H. Johnson <robbat2@gentoo.org>
-* RW <fbsd06@mlists.homeunix.com>
 * Tim Potter <tpot@samba.org>
 * Tor Arne Vestbø <torarnv@gmail.com>
 * Ville Skyttä <ville.skytta@iki.fi>
index dcbf37c..6d3316e 100644 (file)
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>ccache installation</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>ccache installation</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -641,8 +845,8 @@ above.</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2010-04-28 20:58:43 CEST\r
+Version 3.1.8<br />\r
+Last updated 2012-01-09 20:53:18 CET\r
 </div>\r
 </div>\r
 </body>\r
index 07623a9..c05d7f3 100644 (file)
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>ccache copyright and license</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>ccache copyright and license</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -1008,8 +1212,8 @@ following license:</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2012-01-08 15:29:34 CET\r
+Version 3.1.8<br />\r
+Last updated 2012-08-11 10:57:17 CEST\r
 </div>\r
 </div>\r
 </body>\r
index 141dfdb..2076988 100644 (file)
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>CCACHE(1)</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>CCACHE(1)</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -1798,8 +2002,8 @@ maintained by Joel Rosdahl. See AUTHORS.txt or AUTHORS.html and
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2012-01-08 15:29:34 CET\r
+Version 3.1.8<br />\r
+Last updated 2012-08-11 10:57:17 CEST\r
 </div>\r
 </div>\r
 </body>\r
index e3f6e51..08c162f 100644 (file)
@@ -73,6 +73,10 @@ test: ccache$(EXEEXT) test/main$(EXEEXT)
        test/main$(EXEEXT)
        CC='$(CC)' $(srcdir)/test.sh
 
+.PHONY: quicktest
+quicktest: test/main$(EXEEXT)
+       test/main$(EXEEXT)
+
 test/main$(EXEEXT): $(base_objs) $(test_objs) @extra_deps@
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(base_objs) $(test_objs) $(libs)
 
index 4589164..d95929c 100644 (file)
--- a/NEWS.html
+++ b/NEWS.html
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>ccache news</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>ccache news</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -540,11 +744,81 @@ footnotes: function () {
 </div>\r
 <div id="content">\r
 <div class="sect1">\r
+<h2 id="_ccache_3_1_8">ccache 3.1.8</h2>\r
+<div class="sectionbody">\r
+<div class="paragraph"><p>Release date: 2012-08-11</p></div>\r
+<div class="sect2">\r
+<h3 id="_new_features_and_improvements">New features and improvements</h3>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+Made paths to dependency files relative in order to increase cache hits.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added work-around to make ccache work with buggy GCC 4.1 when creating a\r
+      pre-compiled header.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Clang plugins are now hashed to catch plugin upgrades.\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_bug_fixes">Bug fixes</h3>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+Fixed crash when the current working directory has been removed.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Fixed crash when stderr is closed.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Corrected a corner case when parsing backslash escapes in string\r
+      literals.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Paths are now correctly canonicalized when computing paths relative to\r
+      the base directory.\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+<div class="sect2">\r
+<h3 id="_other">Other</h3>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+Made git version macro work when compiling outside of the source\r
+      directory.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Fixed <tt>static_assert</tt> macro definition clash with GCC 4.7.\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
 <h2 id="_ccache_3_1_7">ccache 3.1.7</h2>\r
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2012-01-08</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes">Bug fixes</h3>\r
+<h3 id="_bug_fixes_2">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -597,7 +871,7 @@ Reverted the GCC bug compatibility introduced in ccache 3.1.5 for
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_other">Other</h3>\r
+<h3 id="_other_2">Other</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -618,7 +892,7 @@ Improved documentation on how to fix bad object files in the cache.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2011-08-21</p></div>\r
 <div class="sect2">\r
-<h3 id="_new_features_and_improvements">New features and improvements</h3>\r
+<h3 id="_new_features_and_improvements_2">New features and improvements</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -628,7 +902,7 @@ Rewrite argument to <tt>--sysroot</tt> if <tt>CCACHE_BASEDIR</tt> is used.
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_2">Bug fixes</h3>\r
+<h3 id="_bug_fixes_3">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -649,7 +923,7 @@ Fixed alignment of &#8220;called for preprocessing&#8221; counter.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2011-05-29</p></div>\r
 <div class="sect2">\r
-<h3 id="_new_features_and_improvements_2">New features and improvements</h3>\r
+<h3 id="_new_features_and_improvements_3">New features and improvements</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -681,7 +955,7 @@ Improved order of statistics counters in <tt>ccache -s</tt> output.
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_3">Bug fixes</h3>\r
+<h3 id="_bug_fixes_4">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -715,7 +989,7 @@ Systems that lack (and don&#8217;t need to be linked with) libm are now
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2011-01-09</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_4">Bug fixes</h3>\r
+<h3 id="_bug_fixes_5">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -748,7 +1022,7 @@ The file handle in now correctly closed on write error when trying to
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2010-11-28</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_5">Bug fixes</h3>\r
+<h3 id="_bug_fixes_6">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -759,7 +1033,7 @@ The -MFarg, -MTarg and -MQarg compiler options (i.e, without space
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_other_2">Other</h3>\r
+<h3 id="_other_3">Other</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -775,7 +1049,7 @@ Portability fixes for HP-UX 11.00 and other esoteric systems.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2010-11-21</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_6">Bug fixes</h3>\r
+<h3 id="_bug_fixes_7">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -796,7 +1070,7 @@ Fixed issue when parsing precompiler output on AIX.
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_other_3">Other</h3>\r
+<h3 id="_other_4">Other</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -823,7 +1097,7 @@ The test suite now also works on systems that lack a /dev/zero.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2010-11-07</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_7">Bug fixes</h3>\r
+<h3 id="_bug_fixes_8">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -862,7 +1136,7 @@ ccache development version (set by dev.mk) now works with gits whose
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_other_4">Other</h3>\r
+<h3 id="_other_5">Other</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -878,7 +1152,7 @@ Minor debug log message improvements.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2010-09-16</p></div>\r
 <div class="sect2">\r
-<h3 id="_new_features_and_improvements_3">New features and improvements</h3>\r
+<h3 id="_new_features_and_improvements_4">New features and improvements</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -947,7 +1221,7 @@ Added <tt>-install_name</tt> as an option known to take an argument. (This
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_8">Bug fixes</h3>\r
+<h3 id="_bug_fixes_9">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -973,7 +1247,7 @@ EINTR is now handled correctly.
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_other_5">Other</h3>\r
+<h3 id="_other_6">Other</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -1035,7 +1309,7 @@ New <tt>HACKING.txt</tt> file with some notes about ccache code conventions.
 <div class="sectionbody">\r
 <div class="paragraph"><p>Release date: 2010-07-15</p></div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_9">Bug fixes</h3>\r
+<h3 id="_bug_fixes_10">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -1082,7 +1356,7 @@ The way the hashes are calculated has changed, so you won&#8217;t get cache
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_new_features_and_improvements_4">New features and improvements</h3>\r
+<h3 id="_new_features_and_improvements_5">New features and improvements</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -1229,7 +1503,7 @@ The following options are no longer hashed in the preprocessor mode:
 </ul></div>\r
 </div>\r
 <div class="sect2">\r
-<h3 id="_bug_fixes_10">Bug fixes</h3>\r
+<h3 id="_bug_fixes_11">Bug fixes</h3>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -1374,8 +1648,8 @@ Statistics counters are now correctly updated for -E option failures and
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2012-01-08 15:37:31 CET\r
+Version 3.1.8<br />\r
+Last updated 2012-08-11 10:57:17 CEST\r
 </div>\r
 </div>\r
 </body>\r
index c966f72..1ffa0a2 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -2,6 +2,39 @@ ccache news
 ===========
 
 
+ccache 3.1.8
+------------
+Release date: 2012-08-11
+
+
+New features and improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    - Made paths to dependency files relative in order to increase cache hits.
+    - Added work-around to make ccache work with buggy GCC 4.1 when creating a
+      pre-compiled header.
+    - Clang plugins are now hashed to catch plugin upgrades.
+
+
+Bug fixes
+~~~~~~~~~
+
+    - Fixed crash when the current working directory has been removed.
+    - Fixed crash when stderr is closed.
+    - Corrected a corner case when parsing backslash escapes in string
+      literals.
+    - Paths are now correctly canonicalized when computing paths relative to
+      the base directory.
+
+
+Other
+~~~~~
+
+    - Made git version macro work when compiling outside of the source
+      directory.
+    - Fixed `static_assert` macro definition clash with GCC 4.7.
+
+
 ccache 3.1.7
 ------------
 Release date: 2012-01-08
index 53773cc..486d851 100644 (file)
@@ -3,29 +3,26 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r
 <head>\r
 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />\r
-<meta name="generator" content="AsciiDoc 8.6.3" />\r
+<meta name="generator" content="AsciiDoc 8.6.6" />\r
 <title>ccache README</title>\r
 <style type="text/css">\r
-/* Sans-serif font. */\r
+/* Shared CSS for AsciiDoc xhtml11 and html5 backends */\r
+\r
+/* Default font. */\r
+body {\r
+  font-family: Georgia,serif;\r
+}\r
+\r
+/* Title font. */\r
 h1, h2, h3, h4, h5, h6,\r
 div.title, caption.title,\r
 thead, p.table.header,\r
-div#toctitle,\r
-span#author, span#revnumber, span#revdate, span#revremark,\r
-div#footer {\r
+#toctitle,\r
+#author, #revnumber, #revdate, #revremark,\r
+#footer {\r
   font-family: Arial,Helvetica,sans-serif;\r
 }\r
 \r
-/* Serif font. */\r
-div.sectionbody {\r
-  font-family: Georgia,"Times New Roman",Times,serif;\r
-}\r
-\r
-/* Monospace font. */\r
-tt {\r
-  font-size: inherit;\r
-}\r
-\r
 body {\r
   margin: 1em 5% 1em 5%;\r
 }\r
@@ -48,11 +45,6 @@ strong {
   color: #083194;\r
 }\r
 \r
-tt {\r
-  font-size: inherit;\r
-  color: navy;\r
-}\r
-\r
 h1, h2, h3, h4, h5, h6 {\r
   color: #527bbd;\r
   margin-top: 1.2em;\r
@@ -72,6 +64,9 @@ h3 {
 h3 + * {\r
   clear: left;\r
 }\r
+h5 {\r
+  font-size: 1.0em;\r
+}\r
 \r
 div.sectionbody {\r
   margin-left: 0;\r
@@ -97,36 +92,36 @@ pre {
   margin: 0;\r
 }\r
 \r
-span#author {\r
+#author {\r
   color: #527bbd;\r
   font-weight: bold;\r
   font-size: 1.1em;\r
 }\r
-span#email {\r
+#email {\r
 }\r
-span#revnumber, span#revdate, span#revremark {\r
+#revnumber, #revdate, #revremark {\r
 }\r
 \r
-div#footer {\r
+#footer {\r
   font-size: small;\r
   border-top: 2px solid silver;\r
   padding-top: 0.5em;\r
   margin-top: 4.0em;\r
 }\r
-div#footer-text {\r
+#footer-text {\r
   float: left;\r
   padding-bottom: 0.5em;\r
 }\r
-div#footer-badges {\r
+#footer-badges {\r
   float: right;\r
   padding-bottom: 0.5em;\r
 }\r
 \r
-div#preamble {\r
+#preamble {\r
   margin-top: 1.5em;\r
   margin-bottom: 1.5em;\r
 }\r
-div.tableblock, div.imageblock, div.exampleblock, div.verseblock,\r
+div.imageblock, div.exampleblock, div.verseblock,\r
 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,\r
 div.admonitionblock {\r
   margin-top: 1.0em;\r
@@ -184,7 +179,7 @@ div.quoteblock, div.verseblock {
   margin-left: 1.0em;\r
   margin-right: 10%;\r
   border-left: 5px solid #f0f0f0;\r
-  color: #777777;\r
+  color: #888;\r
 }\r
 \r
 div.quoteblock > div.attribution {\r
@@ -267,35 +262,12 @@ div.compact div, div.compact div {
   margin-bottom: 0.1em;\r
 }\r
 \r
-div.tableblock > table {\r
-  border: 3px solid #527bbd;\r
-}\r
-thead, p.table.header {\r
-  font-weight: bold;\r
-  color: #527bbd;\r
-}\r
 tfoot {\r
   font-weight: bold;\r
 }\r
 td > div.verse {\r
   white-space: pre;\r
 }\r
-p.table {\r
-  margin-top: 0;\r
-}\r
-/* Because the table frame attribute is overriden by CSS in most browsers. */\r
-div.tableblock > table[frame="void"] {\r
-  border-style: none;\r
-}\r
-div.tableblock > table[frame="hsides"] {\r
-  border-left-style: none;\r
-  border-right-style: none;\r
-}\r
-div.tableblock > table[frame="vsides"] {\r
-  border-top-style: none;\r
-  border-bottom-style: none;\r
-}\r
-\r
 \r
 div.hdlist {\r
   margin-top: 0.8em;\r
@@ -362,14 +334,14 @@ div.colist td img {
 }\r
 \r
 @media print {\r
-  div#footer-badges { display: none; }\r
+  #footer-badges { display: none; }\r
 }\r
 \r
-div#toc {\r
+#toc {\r
   margin-bottom: 2.5em;\r
 }\r
 \r
-div#toctitle {\r
+#toctitle {\r
   color: #527bbd;\r
   font-size: 1.1em;\r
   font-weight: bold;\r
@@ -394,10 +366,180 @@ div.toclevel4 {
   font-size: 0.9em;\r
 }\r
 \r
+span.aqua { color: aqua; }\r
+span.black { color: black; }\r
+span.blue { color: blue; }\r
+span.fuchsia { color: fuchsia; }\r
+span.gray { color: gray; }\r
+span.green { color: green; }\r
+span.lime { color: lime; }\r
+span.maroon { color: maroon; }\r
+span.navy { color: navy; }\r
+span.olive { color: olive; }\r
+span.purple { color: purple; }\r
+span.red { color: red; }\r
+span.silver { color: silver; }\r
+span.teal { color: teal; }\r
+span.white { color: white; }\r
+span.yellow { color: yellow; }\r
+\r
+span.aqua-background { background: aqua; }\r
+span.black-background { background: black; }\r
+span.blue-background { background: blue; }\r
+span.fuchsia-background { background: fuchsia; }\r
+span.gray-background { background: gray; }\r
+span.green-background { background: green; }\r
+span.lime-background { background: lime; }\r
+span.maroon-background { background: maroon; }\r
+span.navy-background { background: navy; }\r
+span.olive-background { background: olive; }\r
+span.purple-background { background: purple; }\r
+span.red-background { background: red; }\r
+span.silver-background { background: silver; }\r
+span.teal-background { background: teal; }\r
+span.white-background { background: white; }\r
+span.yellow-background { background: yellow; }\r
+\r
+span.big { font-size: 2em; }\r
+span.small { font-size: 0.6em; }\r
+\r
+span.underline { text-decoration: underline; }\r
+span.overline { text-decoration: overline; }\r
+span.line-through { text-decoration: line-through; }\r
+\r
+\r
+/*\r
+ * xhtml11 specific\r
+ *\r
+ * */\r
+\r
+tt {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+div.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+div.tableblock > table {\r
+  border: 3px solid #527bbd;\r
+}\r
+thead, p.table.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.table {\r
+  margin-top: 0;\r
+}\r
+/* Because the table frame attribute is overriden by CSS in most browsers. */\r
+div.tableblock > table[frame="void"] {\r
+  border-style: none;\r
+}\r
+div.tableblock > table[frame="hsides"] {\r
+  border-left-style: none;\r
+  border-right-style: none;\r
+}\r
+div.tableblock > table[frame="vsides"] {\r
+  border-top-style: none;\r
+  border-bottom-style: none;\r
+}\r
+\r
+\r
+/*\r
+ * html5 specific\r
+ *\r
+ * */\r
+\r
+.monospaced {\r
+  font-family: monospace;\r
+  font-size: inherit;\r
+  color: navy;\r
+}\r
+\r
+table.tableblock {\r
+  margin-top: 1.0em;\r
+  margin-bottom: 1.5em;\r
+}\r
+thead, p.tableblock.header {\r
+  font-weight: bold;\r
+  color: #527bbd;\r
+}\r
+p.tableblock {\r
+  margin-top: 0;\r
+}\r
+table.tableblock {\r
+  border-width: 3px;\r
+  border-spacing: 0px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+  border-collapse: collapse;\r
+}\r
+th.tableblock, td.tableblock {\r
+  border-width: 1px;\r
+  padding: 4px;\r
+  border-style: solid;\r
+  border-color: #527bbd;\r
+}\r
+\r
+table.tableblock.frame-topbot {\r
+  border-left-style: hidden;\r
+  border-right-style: hidden;\r
+}\r
+table.tableblock.frame-sides {\r
+  border-top-style: hidden;\r
+  border-bottom-style: hidden;\r
+}\r
+table.tableblock.frame-none {\r
+  border-style: hidden;\r
+}\r
+\r
+th.tableblock.halign-left, td.tableblock.halign-left {\r
+  text-align: left;\r
+}\r
+th.tableblock.halign-center, td.tableblock.halign-center {\r
+  text-align: center;\r
+}\r
+th.tableblock.halign-right, td.tableblock.halign-right {\r
+  text-align: right;\r
+}\r
+\r
+th.tableblock.valign-top, td.tableblock.valign-top {\r
+  vertical-align: top;\r
+}\r
+th.tableblock.valign-middle, td.tableblock.valign-middle {\r
+  vertical-align: middle;\r
+}\r
+th.tableblock.valign-bottom, td.tableblock.valign-bottom {\r
+  vertical-align: bottom;\r
+}\r
+\r
+\r
+/*\r
+ * manpage specific\r
+ *\r
+ * */\r
+\r
+body.manpage h1 {\r
+  padding-top: 0.5em;\r
+  padding-bottom: 0.5em;\r
+  border-top: 2px solid silver;\r
+  border-bottom: 2px solid silver;\r
+}\r
+body.manpage h2 {\r
+  border-style: none;\r
+}\r
+body.manpage div.sectionbody {\r
+  margin-left: 3em;\r
+}\r
+\r
+@media print {\r
+  body.manpage div#toc { display: none; }\r
+}\r
 </style>\r
 <script type="text/javascript">\r
 /*<![CDATA[*/\r
-window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}\r
 var asciidoc = {  // Namespace.\r
 \r
 /////////////////////////////////////////////////////////////////////\r
@@ -459,6 +601,25 @@ toc: function (toclevels) {
   }\r
 \r
   var toc = document.getElementById("toc");\r
+  if (!toc) {\r
+    return;\r
+  }\r
+\r
+  // Delete existing TOC entries in case we're reloading the TOC.\r
+  var tocEntriesToRemove = [];\r
+  var i;\r
+  for (i = 0; i < toc.childNodes.length; i++) {\r
+    var entry = toc.childNodes[i];\r
+    if (entry.nodeName == 'div'\r
+     && entry.getAttribute("class")\r
+     && entry.getAttribute("class").match(/^toclevel/))\r
+      tocEntriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < tocEntriesToRemove.length; i++) {\r
+    toc.removeChild(tocEntriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild TOC entries.\r
   var entries = tocEntries(document.getElementById("content"), toclevels);\r
   for (var i = 0; i < entries.length; ++i) {\r
     var entry = entries[i];\r
@@ -486,24 +647,44 @@ toc: function (toclevels) {
  */\r
 \r
 footnotes: function () {\r
-  var cont = document.getElementById("content");\r
+  // Delete existing footnote entries in case we're reloading the footnodes.\r
+  var i;\r
   var noteholder = document.getElementById("footnotes");\r
+  if (!noteholder) {\r
+    return;\r
+  }\r
+  var entriesToRemove = [];\r
+  for (i = 0; i < noteholder.childNodes.length; i++) {\r
+    var entry = noteholder.childNodes[i];\r
+    if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")\r
+      entriesToRemove.push(entry);\r
+  }\r
+  for (i = 0; i < entriesToRemove.length; i++) {\r
+    noteholder.removeChild(entriesToRemove[i]);\r
+  }\r
+\r
+  // Rebuild footnote entries.\r
+  var cont = document.getElementById("content");\r
   var spans = cont.getElementsByTagName("span");\r
   var refs = {};\r
   var n = 0;\r
   for (i=0; i<spans.length; i++) {\r
     if (spans[i].className == "footnote") {\r
       n++;\r
-      // Use [\s\S] in place of . so multi-line matches work.\r
-      // Because JavaScript has no s (dotall) regex flag.\r
-      note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+      var note = spans[i].getAttribute("data-note");\r
+      if (!note) {\r
+        // Use [\s\S] in place of . so multi-line matches work.\r
+        // Because JavaScript has no s (dotall) regex flag.\r
+        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];\r
+        spans[i].innerHTML =\r
+          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
+          "' title='View footnote' class='footnote'>" + n + "</a>]";\r
+        spans[i].setAttribute("data-note", note);\r
+      }\r
       noteholder.innerHTML +=\r
         "<div class='footnote' id='_footnote_" + n + "'>" +\r
         "<a href='#_footnoteref_" + n + "' title='Return to text'>" +\r
         n + "</a>. " + note + "</div>";\r
-      spans[i].innerHTML =\r
-        "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +\r
-        "' title='View footnote' class='footnote'>" + n + "</a>]";\r
       var id =spans[i].getAttribute("id");\r
       if (id != null) refs["#"+id] = n;\r
     }\r
@@ -523,16 +704,39 @@ footnotes: function () {
       }\r
     }\r
   }\r
+},\r
+\r
+install: function(toclevels) {\r
+  var timerId;\r
+\r
+  function reinstall() {\r
+    asciidoc.footnotes();\r
+    if (toclevels) {\r
+      asciidoc.toc(toclevels);\r
+    }\r
+  }\r
+\r
+  function reinstallAndRemoveTimer() {\r
+    clearInterval(timerId);\r
+    reinstall();\r
+  }\r
+\r
+  timerId = setInterval(reinstall, 500);\r
+  if (document.addEventListener)\r
+    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);\r
+  else\r
+    window.onload = reinstallAndRemoveTimer;\r
 }\r
 \r
 }\r
+asciidoc.install(2);\r
 /*]]>*/\r
 </script>\r
 </head>\r
 <body class="article">\r
 <div id="header">\r
 <h1>ccache README</h1>\r
-<span id="revnumber">version 3.1.7</span>\r
+<span id="revnumber">version 3.1.8</span>\r
 <div id="toc">
   <div id="toctitle">Table of Contents</div>
   <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
@@ -628,8 +832,8 @@ Thiele&#8217;s &#8220;compilercache&#8221; (see <a href="http://www.erikyyy.de/c
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Version 3.1.7<br />\r
-Last updated 2011-09-17 23:53:29 CEST\r
+Version 3.1.8<br />\r
+Last updated 2012-01-09 20:53:18 CET\r
 </div>\r
 </div>\r
 </body>\r
index 0c16eea..c2c106a 100644 (file)
--- a/ccache.1
+++ b/ccache.1
@@ -1,13 +1,13 @@
 '\" t
 .\"     Title: ccache
 .\"    Author: [see the "Author" section]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 01/08/2012
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 08/11/2012
 .\"    Manual: ccache Manual
-.\"    Source: ccache 3.1.7
+.\"    Source: ccache 3.1.8
 .\"  Language: English
 .\"
-.TH "CCACHE" "1" "01/08/2012" "ccache 3\&.1\&.7" "ccache Manual"
+.TH "CCACHE" "1" "08/11/2012" "ccache 3\&.1\&.8" "ccache Manual"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
index e41af13..738c022 100644 (file)
--- a/ccache.c
+++ b/ccache.c
@@ -380,18 +380,39 @@ ignore:
 }
 
 /*
- * Make a relative path from CCACHE_BASEDIR to path. Takes over ownership of
- * path. Caller frees.
+ * Make a relative path from current working directory to path if CCACHE_PREFIX
+ * is a prefix of path. Takes over ownership of path. Caller frees.
  */
 static char *
 make_relative_path(char *path)
 {
-       char *relpath;
+       char *relpath, *canon_path;
 
        if (!base_dir || !str_startswith(path, base_dir)) {
                return path;
        }
 
+       if (!current_working_dir) {
+               char *cwd = get_cwd();
+               if (cwd) {
+                       current_working_dir = x_realpath(cwd);
+                       free(cwd);
+               }
+               if (!current_working_dir) {
+                       cc_log("Unable to determine current working directory: %s",
+                              strerror(errno));
+                       failed();
+               }
+       }
+
+       canon_path = x_realpath(path);
+       if (canon_path) {
+               free(path);
+               path = canon_path;
+       } else {
+               /* path doesn't exist, so leave it as it is. */
+       }
+
        relpath = get_relative_path(current_working_dir, path);
        free(path);
        return relpath;
@@ -951,6 +972,16 @@ calculate_object_hash(struct args *args, struct mdfour *hash, int direct_mode)
                        continue;
                }
 
+               if (str_eq(args->argv[i], "-Xclang")
+                   && i + 3 < args->argc
+                   && str_eq(args->argv[i+1], "-load")
+                   && str_eq(args->argv[i+2], "-Xclang")
+                   && stat(args->argv[i+3], &st) == 0) {
+                       hash_delimiter(hash, "plugin");
+                       hash_compiler(hash, &st, args->argv[i+3], false);
+                       continue;
+               }
+
                /* All other arguments are included in the hash. */
                hash_delimiter(hash, "arg");
                hash_string(hash, args->argv[i]);
@@ -1371,14 +1402,14 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
                                result = false;
                                goto out;
                        }
-                       output_obj = argv[i+1];
+                       output_obj = make_relative_path(x_strdup(argv[i+1]));
                        i++;
                        continue;
                }
 
                /* alternate form of -o, with no space */
                if (str_startswith(argv[i], "-o")) {
-                       output_obj = &argv[i][2];
+                       output_obj = make_relative_path(x_strdup(&argv[i][2]));
                        continue;
                }
 
@@ -1412,10 +1443,10 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
                }
                if (str_startswith(argv[i], "-MF")) {
                        char *arg;
+                       bool separate_argument = (strlen(argv[i]) == 3);
                        dependency_filename_specified = true;
                        free(output_dep);
-                       args_add(dep_args, argv[i]);
-                       if (strlen(argv[i]) == 3) {
+                       if (separate_argument) {
                                /* -MF arg */
                                if (i >= argc - 1) {
                                        cc_log("Missing argument to %s", argv[i]);
@@ -1424,18 +1455,26 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
                                        goto out;
                                }
                                arg = argv[i + 1];
-                               args_add(dep_args, argv[i + 1]);
                                i++;
                        } else {
                                /* -MFarg */
                                arg = &argv[i][3];
                        }
                        output_dep = make_relative_path(x_strdup(arg));
+                       /* Keep the format of the args the same */
+                       if (separate_argument) {
+                               args_add(dep_args, "-MF");
+                               args_add(dep_args, output_dep);
+                       } else {
+                               char *option = format("-MF%s", output_dep);
+                               args_add(dep_args, option);
+                               free(option);
+                       }
                        continue;
                }
                if (str_startswith(argv[i], "-MQ") || str_startswith(argv[i], "-MT")) {
+                       char *relpath;
                        dependency_target_specified = true;
-                       args_add(dep_args, argv[i]);
                        if (strlen(argv[i]) == 3) {
                                /* -MQ arg or -MT arg */
                                if (i >= argc - 1) {
@@ -1444,8 +1483,21 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
                                        result = false;
                                        goto out;
                                }
-                               args_add(dep_args, argv[i + 1]);
+                               args_add(dep_args, argv[i]);
+                               relpath = make_relative_path(x_strdup(argv[i + 1]));
+                               args_add(dep_args, relpath);
+                               free(relpath);
                                i++;
+                       } else {
+                               char *arg_opt;
+                               char *option;
+                               arg_opt = x_strndup(argv[i], 3);
+                               relpath = make_relative_path(x_strdup(argv[i] + 3));
+                               option = format("%s%s", arg_opt, relpath);
+                               args_add(dep_args, option);
+                               free(arg_opt);
+                               free(relpath);
+                               free(option);
                        }
                        continue;
                }
@@ -1630,17 +1682,21 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args,
        output_is_precompiled_header =
                actual_language && strstr(actual_language, "-header") != NULL;
 
-       if (!found_c_opt && !output_is_precompiled_header) {
-               cc_log("No -c option found");
-               /* I find that having a separate statistic for autoconf tests is useful,
-                  as they are the dominant form of "called for link" in many cases */
-               if (strstr(input_file, "conftest.")) {
-                       stats_update(STATS_CONFTEST);
+       if (!found_c_opt) {
+               if (output_is_precompiled_header) {
+                       args_add(stripped_args, "-c");
                } else {
-                       stats_update(STATS_LINK);
+                       cc_log("No -c option found");
+                       /* I find that having a separate statistic for autoconf tests is useful,
+                          as they are the dominant form of "called for link" in many cases */
+                       if (strstr(input_file, "conftest.")) {
+                               stats_update(STATS_CONFTEST);
+                       } else {
+                               stats_update(STATS_LINK);
+                       }
+                       result = false;
+                       goto out;
                }
-               result = false;
-               goto out;
        }
 
        if (!actual_language) {
@@ -1782,7 +1838,7 @@ cc_reset(void)
        base_dir = NULL;
        args_free(orig_args); orig_args = NULL;
        free(input_file); input_file = NULL;
-       output_obj = NULL;
+       free(output_obj); output_obj = NULL;
        free(output_dep); output_dep = NULL;
        free(cached_obj_hash); cached_obj_hash = NULL;
        free(cached_obj); cached_obj = NULL;
@@ -1838,6 +1894,29 @@ parse_sloppiness(char *p)
        return result;
 }
 
+/* Make a copy of stderr that will not be cached, so things like
+   distcc can send networking errors to it. */
+static void
+setup_uncached_err(void)
+{
+       char *buf;
+       int uncached_fd;
+
+       uncached_fd = dup(2);
+       if (uncached_fd == -1) {
+               cc_log("dup(2) failed: %s", strerror(errno));
+               failed();
+       }
+
+       /* leak a pointer to the environment */
+       buf = format("UNCACHED_ERR_FD=%d", uncached_fd);
+
+       if (putenv(buf) == -1) {
+               cc_log("putenv failed: %s", strerror(errno));
+               failed();
+       }
+}
+
 /* the main ccache driver function */
 static void
 ccache(int argc, char *argv[])
@@ -1857,6 +1936,7 @@ ccache(int argc, char *argv[])
        struct args *compiler_args;
 
        find_compiler(argc, argv);
+       setup_uncached_err();
 
        if (getenv("CCACHE_DISABLE")) {
                cc_log("ccache is disabled");
@@ -2111,30 +2191,6 @@ ccache_main_options(int argc, char *argv[])
        return 0;
 }
 
-
-/* Make a copy of stderr that will not be cached, so things like
-   distcc can send networking errors to it. */
-static void
-setup_uncached_err(void)
-{
-       char *buf;
-       int uncached_fd;
-
-       uncached_fd = dup(2);
-       if (uncached_fd == -1) {
-               cc_log("dup(2) failed: %s", strerror(errno));
-               failed();
-       }
-
-       /* leak a pointer to the environment */
-       buf = format("UNCACHED_ERR_FD=%d", uncached_fd);
-
-       if (putenv(buf) == -1) {
-               cc_log("putenv failed: %s", strerror(errno));
-               failed();
-       }
-}
-
 int
 ccache_main(int argc, char *argv[])
 {
@@ -2160,11 +2216,6 @@ ccache_main(int argc, char *argv[])
                }
        }
 
-       current_working_dir = get_cwd();
-       if (!current_working_dir) {
-               cc_log("Could not determine current working directory");
-               failed();
-       }
        cache_dir = getenv("CCACHE_DIR");
        if (cache_dir) {
                cache_dir = x_strdup(cache_dir);
@@ -2205,8 +2256,6 @@ ccache_main(int argc, char *argv[])
 
        compile_preprocessed_source_code = !getenv("CCACHE_CPP2");
 
-       setup_uncached_err();
-
        /* make sure the cache dir exists */
        if (create_dir(cache_dir) != 0) {
                fprintf(stderr,
index d77051a..fe04f27 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67.
+# Generated by GNU Autoconf 2.68.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -89,6 +89,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -214,11 +215,18 @@ IFS=$as_save_IFS
   # We cannot yet assume a decent shell, so we have to provide a
        # neutralization value for shells without unset; and this also
        # works around shells that cannot unset nonexistent variables.
+       # Preserve -v and -x to the replacement shell.
        BASH_ENV=/dev/null
        ENV=/dev/null
        (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
        export CONFIG_SHELL
-       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       case $- in # ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -1066,7 +1074,7 @@ Try \`$0 --help' for more information"
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1344,7 +1352,7 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.67
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1390,7 +1398,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1427,7 +1435,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1473,7 +1481,7 @@ fi
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1487,7 +1495,7 @@ ac_fn_c_check_type ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -1528,7 +1536,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -1569,7 +1577,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1583,7 +1591,7 @@ ac_fn_c_check_header_compile ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1601,7 +1609,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1613,10 +1621,10 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1679,7 +1687,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1688,7 +1696,7 @@ eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1700,7 +1708,7 @@ ac_fn_c_check_func ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1755,7 +1763,7 @@ fi
 eval ac_res=\$$3
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -1768,7 +1776,7 @@ ac_fn_c_check_member ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
 $as_echo_n "checking for $2.$3... " >&6; }
-if eval "test \"\${$4+set}\"" = set; then :
+if eval \${$4+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1812,7 +1820,7 @@ fi
 eval ac_res=\$$4
               { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
 cat >config.log <<_ACEOF
@@ -1820,7 +1828,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2078,7 +2086,7 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2191,7 +2199,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2231,7 +2239,7 @@ if test -z "$ac_cv_prog_CC"; then
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2284,7 +2292,7 @@ if test -z "$CC"; then
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2324,7 +2332,7 @@ if test -z "$CC"; then
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2383,7 +2391,7 @@ if test -z "$CC"; then
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2427,7 +2435,7 @@ do
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2482,7 +2490,7 @@ fi
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -2597,7 +2605,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -2640,7 +2648,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -2699,7 +2707,7 @@ $as_echo "$ac_try_echo"; } >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -2710,7 +2718,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2751,7 +2759,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -2761,7 +2769,7 @@ OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2798,7 +2806,7 @@ ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -2876,7 +2884,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -2983,7 +2991,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -3099,7 +3107,7 @@ else
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -3154,7 +3162,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -3235,7 +3243,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -3275,7 +3283,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -3327,7 +3335,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -3367,7 +3375,7 @@ if test -z "$ac_cv_prog_AR"; then
 set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -3588,7 +3596,7 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
   as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval "test \"\${$as_ac_Header+set}\"" = set; then :
+if eval \${$as_ac_Header+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3628,7 +3636,7 @@ done
 if test $ac_header_dirent = dirent.h; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
 $as_echo_n "checking for library containing opendir... " >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -3662,11 +3670,11 @@ for ac_lib in '' dir; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_opendir+set}" = set; then :
+  if ${ac_cv_search_opendir+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
 
 else
   ac_cv_search_opendir=no
@@ -3685,7 +3693,7 @@ fi
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
 $as_echo_n "checking for library containing opendir... " >&6; }
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -3719,11 +3727,11 @@ for ac_lib in '' x; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_opendir+set}" = set; then :
+  if ${ac_cv_search_opendir+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_opendir+set}" = set; then :
+if ${ac_cv_search_opendir+:} false; then :
 
 else
   ac_cv_search_opendir=no
@@ -3743,7 +3751,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3779,7 +3787,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -3842,7 +3850,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -3909,7 +3917,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4038,7 +4046,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if test "${ac_cv_header_stdbool_h+set}" = set; then :
+if ${ac_cv_header_stdbool_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4070,7 +4078,7 @@ else
        char b[false == 0 ? 1 : -1];
        char c[__bool_true_false_are_defined == 1 ? 1 : -1];
        char d[(bool) 0.5 == true ? 1 : -1];
-       bool e = &s;
+       /* See body of main program for 'e'.  */
        char f[(_Bool) 0.0 == false ? 1 : -1];
        char g[true];
        char h[sizeof (_Bool)];
@@ -4081,25 +4089,6 @@ else
        _Bool n[m];
        char o[sizeof n == m * sizeof n[0] ? 1 : -1];
        char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-#      if defined __xlc__ || defined __GNUC__
-        /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
-           reported by James Lemley on 2005-10-05; see
-           http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-           This test is not quite right, since xlc is allowed to
-           reject this program, as the initializer for xlcbug is
-           not one of the forms that C requires support for.
-           However, doing the test right would require a runtime
-           test, and that would make cross-compilation harder.
-           Let us hope that IBM fixes the xlc bug, and also adds
-           support for this kind of constant expression.  In the
-           meantime, this test will reject xlc, which is OK, since
-           our stdbool.h substitute should suffice.  We also test
-           this with GCC, where it should work, to detect more
-           quickly whether someone messes up the test in the
-           future.  */
-        char digs[] = "0123456789";
-        int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
-#      endif
        /* Catch a bug in an HP-UX C compiler.  See
           http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
           http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
@@ -4111,6 +4100,7 @@ int
 main ()
 {
 
+       bool e = &s;
        *pq |= q;
        *pq |= ! q;
        /* Refer to every declared value, to avoid compiler optimizations.  */
@@ -4131,7 +4121,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
 $as_echo "$ac_cv_header_stdbool_h" >&6; }
 ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = x""yes; then :
+if test "x$ac_cv_type__Bool" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE__BOOL 1
@@ -4148,7 +4138,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if test "${ac_cv_header_sys_wait_h+set}" = set; then :
+if ${ac_cv_header_sys_wait_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4204,7 +4194,7 @@ done
 for ac_header in termios.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default"
-if test "x$ac_cv_header_termios_h" = x""yes; then :
+if test "x$ac_cv_header_termios_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_TERMIOS_H 1
 _ACEOF
@@ -4217,7 +4207,7 @@ done
 for ac_func in gethostname
 do :
   ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
-if test "x$ac_cv_func_gethostname" = x""yes; then :
+if test "x$ac_cv_func_gethostname" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETHOSTNAME 1
 _ACEOF
@@ -4228,7 +4218,7 @@ done
 for ac_func in getopt_long
 do :
   ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long"
-if test "x$ac_cv_func_getopt_long" = x""yes; then :
+if test "x$ac_cv_func_getopt_long" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETOPT_LONG 1
 _ACEOF
@@ -4239,7 +4229,7 @@ done
 for ac_func in getpwuid
 do :
   ac_fn_c_check_func "$LINENO" "getpwuid" "ac_cv_func_getpwuid"
-if test "x$ac_cv_func_getpwuid" = x""yes; then :
+if test "x$ac_cv_func_getpwuid" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETPWUID 1
 _ACEOF
@@ -4250,7 +4240,7 @@ done
 for ac_func in gettimeofday
 do :
   ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
-if test "x$ac_cv_func_gettimeofday" = x""yes; then :
+if test "x$ac_cv_func_gettimeofday" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETTIMEOFDAY 1
 _ACEOF
@@ -4261,7 +4251,7 @@ done
 for ac_func in mkstemp
 do :
   ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
-if test "x$ac_cv_func_mkstemp" = x""yes; then :
+if test "x$ac_cv_func_mkstemp" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_MKSTEMP 1
 _ACEOF
@@ -4272,7 +4262,7 @@ done
 for ac_func in realpath
 do :
   ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath"
-if test "x$ac_cv_func_realpath" = x""yes; then :
+if test "x$ac_cv_func_realpath" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_REALPATH 1
 _ACEOF
@@ -4283,7 +4273,7 @@ done
 for ac_func in strndup
 do :
   ac_fn_c_check_func "$LINENO" "strndup" "ac_cv_func_strndup"
-if test "x$ac_cv_func_strndup" = x""yes; then :
+if test "x$ac_cv_func_strndup" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STRNDUP 1
 _ACEOF
@@ -4294,7 +4284,7 @@ done
 for ac_func in utimes
 do :
   ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes"
-if test "x$ac_cv_func_utimes" = x""yes; then :
+if test "x$ac_cv_func_utimes" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_UTIMES 1
 _ACEOF
@@ -4305,7 +4295,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compar_fn_t in stdlib.h" >&5
 $as_echo_n "checking for compar_fn_t in stdlib.h... " >&6; }
-if test "${ccache_cv_COMPAR_FN_T+set}" = set; then :
+if ${ccache_cv_COMPAR_FN_T+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4432,7 +4422,7 @@ done
 
 
       ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
-if test "x$ac_cv_func_vsnprintf" = x""yes; then :
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
   hw_cv_func_vsnprintf=yes
 else
   hw_cv_func_vsnprintf=no
@@ -4441,7 +4431,7 @@ fi
   if test "$hw_cv_func_vsnprintf" = yes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf is C99 compliant" >&5
 $as_echo_n "checking whether vsnprintf is C99 compliant... " >&6; }
-if test "${hw_cv_func_vsnprintf_c99+set}" = set; then :
+if ${hw_cv_func_vsnprintf_c99+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -4509,7 +4499,7 @@ done
 
     ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h>
 "
-if test "x$ac_cv_member_struct_lconv_decimal_point" = x""yes; then :
+if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_LCONV_DECIMAL_POINT 1
@@ -4519,7 +4509,7 @@ _ACEOF
 fi
 ac_fn_c_check_member "$LINENO" "struct lconv" "thousands_sep" "ac_cv_member_struct_lconv_thousands_sep" "#include <locale.h>
 "
-if test "x$ac_cv_member_struct_lconv_thousands_sep" = x""yes; then :
+if test "x$ac_cv_member_struct_lconv_thousands_sep" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_LCONV_THOUSANDS_SEP 1
@@ -4531,7 +4521,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
 $as_echo_n "checking for long long int... " >&6; }
-if test "${ac_cv_type_long_long_int+set}" = set; then :
+if ${ac_cv_type_long_long_int+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4622,7 +4612,7 @@ $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
 $as_echo_n "checking for unsigned long long int... " >&6; }
-if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then :
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4674,7 +4664,7 @@ $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
   fi
 
     ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -4687,7 +4677,7 @@ fi
 
 
   ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_intmax_t" = x""yes; then :
+if test "x$ac_cv_type_intmax_t" = xyes; then :
 
 $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
 
@@ -4706,7 +4696,7 @@ fi
 
 
   ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintmax_t" = x""yes; then :
+if test "x$ac_cv_type_uintmax_t" = xyes; then :
 
 $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
@@ -4724,7 +4714,7 @@ fi
 
 
   ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintptr_t" = x""yes; then :
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
 
 $as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
 
@@ -4759,7 +4749,7 @@ fi
 
 
     ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = x""yes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_PTRDIFF_T 1
@@ -4771,7 +4761,7 @@ fi
     for ac_func in localeconv
 do :
   ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
-if test "x$ac_cv_func_localeconv" = x""yes; then :
+if test "x$ac_cv_func_localeconv" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LOCALECONV 1
 _ACEOF
@@ -4783,7 +4773,7 @@ done
   if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4877,7 +4867,7 @@ fi
 
 
     ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = x""yes; then :
+if test "x$ac_cv_func_snprintf" = xyes; then :
   hw_cv_func_snprintf=yes
 else
   hw_cv_func_snprintf=no
@@ -4886,7 +4876,7 @@ fi
   if test "$hw_cv_func_snprintf" = yes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf is C99 compliant" >&5
 $as_echo_n "checking whether snprintf is C99 compliant... " >&6; }
-if test "${hw_cv_func_snprintf_c99+set}" = set; then :
+if ${hw_cv_func_snprintf_c99+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -4931,7 +4921,7 @@ else
   if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5032,7 +5022,7 @@ fi
     for ac_func in vasprintf
 do :
   ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
-if test "x$ac_cv_func_vasprintf" = x""yes; then :
+if test "x$ac_cv_func_vasprintf" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_VASPRINTF 1
 _ACEOF
@@ -5046,7 +5036,7 @@ done
   for ac_header in stdlib.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_STDLIB_H 1
 _ACEOF
@@ -5058,7 +5048,7 @@ done
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
 $as_echo_n "checking for va_copy... " >&6; }
-if test "${hw_cv_func_va_copy+set}" = set; then :
+if ${hw_cv_func_va_copy+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -5101,7 +5091,7 @@ fi
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __va_copy" >&5
 $as_echo_n "checking for __va_copy... " >&6; }
-if test "${hw_cv_func___va_copy+set}" = set; then :
+if ${hw_cv_func___va_copy+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -5145,7 +5135,7 @@ fi
   if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5241,7 +5231,7 @@ fi
     for ac_func in asprintf
 do :
   ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
-if test "x$ac_cv_func_asprintf" = x""yes; then :
+if test "x$ac_cv_func_asprintf" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_ASPRINTF 1
 _ACEOF
@@ -5256,7 +5246,7 @@ done
   if test "x$_hw_cv_func_xprintf_replace_done" != xyes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5351,7 +5341,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cos" >&5
 $as_echo_n "checking for library containing cos... " >&6; }
-if test "${ac_cv_search_cos+set}" = set; then :
+if ${ac_cv_search_cos+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -5385,11 +5375,11 @@ for ac_lib in '' m; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_cos+set}" = set; then :
+  if ${ac_cv_search_cos+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_cos+set}" = set; then :
+if ${ac_cv_search_cos+:} false; then :
 
 else
   ac_cv_search_cos=no
@@ -5408,7 +5398,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib >= 1.2.3" >&5
 $as_echo_n "checking for zlib >= 1.2.3... " >&6; }
-if test "${ccache_cv_zlib_1_2_3+set}" = set; then :
+if ${ccache_cv_zlib_1_2_3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5438,7 +5428,7 @@ fi
 $as_echo "$ccache_cv_zlib_1_2_3" >&6; }
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzdopen in -lz" >&5
 $as_echo_n "checking for gzdopen in -lz... " >&6; }
-if test "${ac_cv_lib_z_gzdopen+set}" = set; then :
+if ${ac_cv_lib_z_gzdopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -5472,7 +5462,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzdopen" >&5
 $as_echo "$ac_cv_lib_z_gzdopen" >&6; }
-if test "x$ac_cv_lib_z_gzdopen" = x""yes; then :
+if test "x$ac_cv_lib_z_gzdopen" = xyes; then :
   true
 fi
 
@@ -5488,7 +5478,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
 $as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then :
+if ${ac_cv_c_inline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
@@ -5531,7 +5521,7 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extern inline" >&5
 $as_echo_n "checking for extern inline... " >&6; }
-if test "${ac_cv_c_extern_inline+set}" = set; then :
+if ${ac_cv_c_extern_inline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5570,7 +5560,7 @@ $as_echo "$as_me: Enabling developer mode" >&6;}
     ac_config_files="$ac_config_files dev.mk"
 
     include_dev_mk='include dev.mk'
-    version=`(git describe --dirty 2>/dev/null || echo vunknown) | sed -e 's/v//' -e 's/-/+/' -e 's/-/_/g'`
+    version=`(git --git-dir=$srcdir/.git describe --dirty 2>/dev/null || echo vunknown) | sed -e 's/v//' -e 's/-/+/' -e 's/-/_/g'`
     echo "const char CCACHE_VERSION[] = \"$version\";" >version.c
 elif test ! -f $srcdir/version.c; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine ccache version" >&5
@@ -5649,10 +5639,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+       cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+         mv -f confcache "$cache_file"$$ &&
+         mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+         mv -f confcache "$cache_file" ;;
+       esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -5684,7 +5685,7 @@ LTLIBOBJS=$ac_ltlibobjs
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -5785,6 +5786,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -6092,7 +6094,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -6154,7 +6156,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.67,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -6279,7 +6281,7 @@ do
     "dev.mk") CONFIG_FILES="$CONFIG_FILES dev.mk" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -6301,9 +6303,10 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -6311,12 +6314,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -6338,7 +6342,7 @@ else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -6366,7 +6370,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -6414,7 +6418,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
 
@@ -6446,7 +6450,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
   || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
@@ -6480,7 +6484,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -6492,8 +6496,8 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -6594,7 +6598,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -6613,7 +6617,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
         # (if the path is not absolute).  The absolute path cannot be DOS-style,
         # because $ac_f cannot contain `:'.
@@ -6622,7 +6626,7 @@ do
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -6648,8 +6652,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -6779,21 +6783,22 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
   || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
@@ -6804,20 +6809,20 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
        || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
index d935c5f..6cc9e6c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009-2010 Joel Rosdahl
+ * Copyright (C) 2009-2010, 2012 Joel Rosdahl
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
@@ -69,6 +69,7 @@ hash_source_code_string(
        size_t hashbuflen = 0;
        int result = HASH_SOURCE_CODE_OK;
        extern unsigned sloppiness;
+       bool seen_backslash;
 
        p = str;
        end = str + len;
@@ -86,8 +87,7 @@ hash_source_code_string(
                        case '*':
                                HASH(' '); /* Don't paste tokens together when removing the comment. */
                                p += 2;
-                               while (p+1 < end
-                                      && (*p != '*' || *(p+1) != '/')) {
+                               while (p+1 < end && (*p != '*' || *(p+1) != '/')) {
                                        if (*p == '\n') {
                                                /* Keep line numbers. */
                                                HASH('\n');
@@ -102,8 +102,7 @@ hash_source_code_string(
 
                        case '/':
                                p += 2;
-                               while (p < end
-                                      && (*p != '\n' || *(p-1) == '\\')) {
+                               while (p < end && (*p != '\n' || *(p-1) == '\\')) {
                                        p++;
                                }
                                continue;
@@ -117,7 +116,18 @@ hash_source_code_string(
                case '"':
                        HASH(*p);
                        p++;
-                       while (p < end && (*p != '"' || *(p-1) == '\\')) {
+                       seen_backslash = false;
+                       while (p < end) {
+                               if (seen_backslash) {
+                                       seen_backslash = false;
+                               } else if (*p == '"') {
+                                       /* Found end of string. */
+                                       HASH(*p);
+                                       p++;
+                                       break;
+                               } else if (*p == '\\') {
+                                       seen_backslash = true;
+                               }
                                HASH(*p);
                                p++;
                        }
index 335874b..7f02ede 100644 (file)
@@ -66,7 +66,8 @@ static const uint32_t MAGIC = 0x63436d46U;
 static const uint8_t  VERSION = 0;
 static const uint32_t MAX_MANIFEST_ENTRIES = 100;
 
-#define static_assert(e) do { enum { static_assert__ = 1/(e) }; } while (0)
+#define ccache_static_assert(e) \
+       do { enum { ccache_static_assert__ = 1/(e) }; } while (0)
 
 struct file_info {
        /* Index to n_files. */
@@ -106,7 +107,7 @@ struct manifest {
 static unsigned int
 hash_from_file_info(void *key)
 {
-       static_assert(sizeof(struct file_info) == 24); /* No padding. */
+       ccache_static_assert(sizeof(struct file_info) == 24); /* No padding. */
        return murmurhashneutral2(key, sizeof(struct file_info), 0);
 }
 
diff --git a/test.sh b/test.sh
index 5f33a67..372c188 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -1324,6 +1324,27 @@ EOF
     if grep `pwd` stderr.txt >/dev/null 2>&1; then
         test_failed "Base dir (`pwd`) found in stderr:\n`cat stderr.txt`"
     fi
+
+    ##################################################################
+    # Check that -MF, -MQ and -MT arguments with absolute paths are rewritten
+    # to relative.
+    testname="-MF/-MQ/-MT with absolute paths"
+    for option in MF "MF " MQ "MQ " MT "MT "; do
+        $CCACHE -Cz >/dev/null
+        cd dir1
+        CCACHE_BASEDIR="`pwd`" $CCACHE $COMPILER -I`pwd`/include -MD -${option}`pwd`/test.d -c src/test.c
+        checkstat 'cache hit (direct)' 0
+        checkstat 'cache hit (preprocessed)' 0
+        checkstat 'cache miss' 1
+        cd ..
+
+        cd dir2
+        CCACHE_BASEDIR="`pwd`" $CCACHE $COMPILER -I`pwd`/include -MD -${option}`pwd`/test.d -c src/test.c
+        checkstat 'cache hit (direct)' 1
+        checkstat 'cache hit (preprocessed)' 0
+        checkstat 'cache miss' 1
+        cd ..
+    done
 }
 
 compression_suite() {
@@ -1686,7 +1707,7 @@ EOF
     fi
 
     testname="create .gch, no -c, -o"
-    $CCACHE -z >/dev/null
+    $CCACHE -Cz >/dev/null
     $CCACHE $COMPILER pch.h -o pch.gch
     checkstat 'cache hit (direct)' 0
     checkstat 'cache hit (preprocessed)' 0
index 225841a..6ee9d4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Joel Rosdahl
+ * Copyright (C) 2010, 2012 Joel Rosdahl
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
@@ -99,4 +99,93 @@ TEST(hash_multicommand_output_error_handling)
        CHECK(!hash_multicommand_output(&h2, "false; true", "not used"));
 }
 
+TEST(hash_source_code_simple_case)
+{
+       struct mdfour h;
+       char input[] = "abc";
+       size_t input_len = strlen(input);
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("a448017aaf21d8525fc10ae87aa6729d-3", hash_result(&h));
+}
+
+TEST(hash_source_code_with_c_style_comment)
+{
+       struct mdfour h;
+       char input[] = "a/*b*/c";
+       size_t input_len = strlen(input);
+
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("1c2c87080ee03418fb1279e3b1f09a68-3", hash_result(&h));
+
+       input[3] = 'd';
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("1c2c87080ee03418fb1279e3b1f09a68-3", hash_result(&h));
+}
+
+TEST(hash_source_code_with_cplusplus_style_comment)
+{
+       struct mdfour h;
+       char input[] = "a//b\nc";
+       size_t input_len = strlen(input);
+
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("4a3fbbe3c140fa193227dba3814db6e6-3", hash_result(&h));
+
+       input[3] = 'd';
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("4a3fbbe3c140fa193227dba3814db6e6-3", hash_result(&h));
+}
+
+TEST(hash_source_code_with_comment_inside_string)
+{
+       struct mdfour h;
+       char input[] = "a\"//b\"c";
+       size_t input_len = strlen(input);
+
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("4c2fa74b0843d8f93df5c04c98ccb0a4-7", hash_result(&h));
+
+       input[4] = 'd';
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("f0069218ec640008cbfa2d150c1061bb-7", hash_result(&h));
+}
+
+TEST(hash_source_code_with_quote_in_string)
+{
+       struct mdfour h;
+       char input[] = "a\"\\\"b//c\""; /* a"\"b//c" */
+       size_t input_len = strlen(input);
+
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("c4e45e7a7f6f29b000a51f187dc4cf06-9", hash_result(&h));
+
+       hash_start(&h);
+       input[7] = 'd';
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("bef8fb852dddcee189b91b068a621c55-9", hash_result(&h));
+}
+
+TEST(hash_source_code_with_backslash_at_string_end)
+{
+       struct mdfour h;
+       char input[] = "a\"\\\\\"b//c"; /* a"\\"b//c */
+       size_t input_len = strlen(input);
+
+       hash_start(&h);
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("7f3ccf27edadad1b90cb2cffb59775d6-6", hash_result(&h));
+
+       input[input_len - 1] = 'd';
+       hash_source_code_string(&h, input, input_len, "");
+       CHECK_STR_EQ_FREE2("7f3ccf27edadad1b90cb2cffb59775d6-6", hash_result(&h));
+}
+
 TEST_SUITE_END
index b8d24be..10478ba 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Joel Rosdahl
+ * Copyright (C) 2010, 2012 Joel Rosdahl
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
@@ -41,4 +41,32 @@ TEST(dirname)
        CHECK_STR_EQ_FREE2("dir1/dir2", dirname("dir1/dir2/"));
 }
 
+TEST(common_dir_prefix_length)
+{
+       CHECK_UNS_EQ(0, common_dir_prefix_length("", ""));
+       CHECK_UNS_EQ(0, common_dir_prefix_length("/", "/"));
+       CHECK_UNS_EQ(0, common_dir_prefix_length("/", "/b"));
+       CHECK_UNS_EQ(0, common_dir_prefix_length("/a", "/b"));
+       CHECK_UNS_EQ(2, common_dir_prefix_length("/a", "/a"));
+       CHECK_UNS_EQ(2, common_dir_prefix_length("/a", "/a/b"));
+       CHECK_UNS_EQ(2, common_dir_prefix_length("/a/b", "/a/c"));
+       CHECK_UNS_EQ(4, common_dir_prefix_length("/a/b", "/a/b"));
+}
+
+TEST(get_relative_path)
+{
+       CHECK_STR_EQ_FREE2("a", get_relative_path("/doesn't matter", "a"));
+       CHECK_STR_EQ_FREE2("a/b", get_relative_path("/doesn't matter", "a/b"));
+       CHECK_STR_EQ_FREE2(".", get_relative_path("/a", "/a"));
+       CHECK_STR_EQ_FREE2("..", get_relative_path("/a/b", "/a"));
+       CHECK_STR_EQ_FREE2("b", get_relative_path("/a", "/a/b"));
+       CHECK_STR_EQ_FREE2("b/c", get_relative_path("/a", "/a/b/c"));
+       CHECK_STR_EQ_FREE2("../c", get_relative_path("/a/b", "/a/c"));
+       CHECK_STR_EQ_FREE2("../c/d", get_relative_path("/a/b", "/a/c/d"));
+       CHECK_STR_EQ_FREE2("../../c/d", get_relative_path("/a/b/c", "/a/c/d"));
+       CHECK_STR_EQ_FREE2("../..", get_relative_path("/a/b", "/"));
+       CHECK_STR_EQ_FREE2("../../c", get_relative_path("/a/b", "/c"));
+       CHECK_STR_EQ_FREE2("a/b", get_relative_path("/", "/a/b"));
+}
+
 TEST_SUITE_END
diff --git a/util.c b/util.c
index 3086b2c..b489800 100644 (file)
--- a/util.c
+++ b/util.c
@@ -964,7 +964,7 @@ same_executable_name(const char *s1, const char *s2)
 
 /*
  * Compute the length of the longest directory path that is common to two
- * strings.
+ * paths. s1 is assumed to be the path to a directory.
  */
 size_t
 common_dir_prefix_length(const char *s1, const char *s2)
@@ -976,7 +976,21 @@ common_dir_prefix_length(const char *s1, const char *s2)
                ++p1;
                ++p2;
        }
-       while (p1 > s1 && ((*p1 && *p1 != '/' ) || (*p2 && *p2 != '/'))) {
+       if (*p2 == '/') {
+               /* s2 starts with "s1/". */
+               return p1 - s1;
+       }
+       if (!*p2) {
+               /* s2 is equal to s1. */
+               if (p2 == s2 + 1) {
+                       /* Special case for s1 and s2 both being "/". */
+                       return 0;
+               } else {
+                       return p1 - s1;
+               }
+       }
+       /* Compute the common directory prefix */
+       while (p1 > s1 && *p1 != '/') {
                p1--;
                p2--;
        }
@@ -984,7 +998,9 @@ common_dir_prefix_length(const char *s1, const char *s2)
 }
 
 /*
- * Compute a relative path from from to to. Caller frees.
+ * Compute a relative path from from (an absolute path to a directory) to to (a
+ * path). Assumes that both from and to are well-formed and canonical. Caller
+ * frees.
  */
 char *
 get_relative_path(const char *from, const char *to)
@@ -994,23 +1010,24 @@ get_relative_path(const char *from, const char *to)
        const char *p;
        char *result;
 
+       assert(from && from[0] == '/');
+       assert(to);
+
        if (!*to || *to != '/') {
                return x_strdup(to);
        }
 
        result = x_strdup("");
        common_prefix_len = common_dir_prefix_length(from, to);
-       for (p = from + common_prefix_len; *p; p++) {
-               if (*p == '/') {
-                       x_asprintf2(&result, "../%s", result);
+       if (common_prefix_len > 0 || !str_eq(from, "/")) {
+               for (p = from + common_prefix_len; *p; p++) {
+                       if (*p == '/') {
+                               x_asprintf2(&result, "../%s", result);
+                       }
                }
        }
        if (strlen(to) > common_prefix_len) {
-               p = to + common_prefix_len + 1;
-               while (*p == '/') {
-                       p++;
-               }
-               x_asprintf2(&result, "%s%s", result, p);
+               x_asprintf2(&result, "%s%s", result, to + common_prefix_len + 1);
        }
        i = strlen(result) - 1;
        while (i >= 0 && result[i] == '/') {
index 1f031ea..d845ba9 100644 (file)
--- a/version.c
+++ b/version.c
@@ -1 +1 @@
-const char CCACHE_VERSION[] = "3.1.7";
+const char CCACHE_VERSION[] = "3.1.8";