[Reproducible-commits] [doxygen] 01/01: Honour $SOURCE_DATE_EPOCH

Maria Valentina Marin Rodrigues akira-guest at moszumanska.debian.org
Wed Jul 22 08:19:44 UTC 2015


This is an automated email from the git hooks/post-receive script.

akira-guest pushed a commit to branch pu/reproducible_builds
in repository doxygen.

commit e98e3b0ce36ebcb9a57d1e7e9a36a9150ac24d1e
Author: akira <marivalenm at gmail.com>
Date:   Sun Jul 5 22:06:00 2015 +0200

    Honour $SOURCE_DATE_EPOCH
---
 ...CE_DATE_EPOCH-environment-variable-for-re.patch | 150 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 2 files changed, 151 insertions(+)

diff --git a/debian/patches/0001-Honour-SOURCE_DATE_EPOCH-environment-variable-for-re.patch b/debian/patches/0001-Honour-SOURCE_DATE_EPOCH-environment-variable-for-re.patch
new file mode 100644
index 0000000..ce64aed
--- /dev/null
+++ b/debian/patches/0001-Honour-SOURCE_DATE_EPOCH-environment-variable-for-re.patch
@@ -0,0 +1,150 @@
+commit b31266c1076c6284116f17241d9e8aa048f88e60
+Author: Dimitri van Heesch <dimitri at stack.nl>
+Date:   Sun Jul 19 12:12:39 2015 +0200
+
+    Bug 751984 - PATCH: Honour SOURCE_DATE_EPOCH environment variable for reproducible output
+
+--- a/qtools/qcstring.cpp
++++ b/qtools/qcstring.cpp
+@@ -460,6 +460,12 @@ ulong QCString::toULong(bool *ok) const
+   return s.toULong(ok);
+ }
+ 
++uint64 QCString::toUInt64(bool *ok) const
++{
++  QString s(data());
++  return s.toUInt64(ok);
++}
++
+ QCString &QCString::setNum(short n)
+ {
+   return setNum((long)n);
+--- a/qtools/qcstring.h
++++ b/qtools/qcstring.h
+@@ -288,6 +288,7 @@ public:
+     uint toUInt( bool *ok=0 ) const;
+     long toLong( bool *ok=0 ) const;
+     ulong toULong( bool *ok=0 )	const;
++    uint64 toUInt64( bool *ok=0 ) const;
+     QCString &setNum(short n);
+     QCString &setNum(ushort n);
+     QCString &setNum(int n);
+--- a/qtools/qstring.cpp
++++ b/qtools/qstring.cpp
+@@ -13935,6 +13935,60 @@ bye:
+ }
+ 
+ /*!
++  Returns the string converted to an <code>unsigned long</code>
++  value.
++
++  If \a ok is non-null, \a *ok is set to TRUE if there are no
++  conceivable errors, and FALSE if the string is not a number at all,
++  or if it has trailing garbage.
++*/
++
++uint64 QString::toUInt64( bool *ok, int base ) const
++{
++    const QChar *p = unicode();
++    uint64 val=0;
++    int l = length();
++    const uint64 max_mult = 1844674407370955161ULL;  // ULLONG_MAX/10, rounded down
++    bool is_ok = FALSE;
++    if ( !p )
++	goto bye;
++    while ( l && p->isSpace() )			// skip leading space
++	l--,p++;
++    if ( *p == '+' )
++	l--,p++;
++
++    // NOTE: toULong() code is similar
++    if ( !l || !ok_in_base(*p,base) )
++	goto bye;
++    while ( l && ok_in_base(*p,base) ) {
++	l--;
++	uint dv;
++	if ( p->isDigit() ) {
++	    dv = p->digitValue();
++	} else {
++	    if ( *p >= 'a' && *p <= 'z' )
++		dv = *p - 'a' + 10;
++	    else
++		dv = *p - 'A' + 10;
++	}
++	if ( val > max_mult || (val == max_mult && dv > (ULLONG_MAX%base)) )
++	    goto bye;
++	val = base*val + dv;
++	p++;
++    }
++
++    while ( l && p->isSpace() )			// skip trailing space
++	l--,p++;
++    if ( !l )
++	is_ok = TRUE;
++bye:
++    if ( ok )
++	*ok = is_ok;
++    return is_ok ? val : 0;
++}
++
++
++/*!
+   Returns the string converted to a <code>short</code> value.
+ 
+   If \a ok is non-null, \a *ok is set to TRUE if there are no
+--- a/qtools/qstring.h
++++ b/qtools/qstring.h
+@@ -463,6 +463,7 @@ public:
+     uint	toUInt( bool *ok=0, int base=10 )	const;
+     long	toLong( bool *ok=0, int base=10 )	const;
+     ulong	toULong( bool *ok=0, int base=10 )	const;
++    uint64	toUInt64( bool *ok=0, int base=10 )	const;
+     float	toFloat( bool *ok=0 )	const;
+     double	toDouble( bool *ok=0 )	const;
+ 
+--- a/src/util.cpp
++++ b/src/util.cpp
+@@ -18,6 +18,7 @@
+ #include <ctype.h>
+ #include <errno.h>
+ #include <math.h>
++#include <limits.h>
+ 
+ #include "md5.h"
+ 
+@@ -2461,6 +2462,35 @@ QCString fileToString(const char *name,b
+ QCString dateToString(bool includeTime)
+ {
+   QDateTime current = QDateTime::currentDateTime();
++  QCString sourceDateEpoch = portable_getenv("SOURCE_DATE_EPOCH");
++  if (!sourceDateEpoch.isEmpty())
++  {
++    bool ok;
++    uint64 epoch = sourceDateEpoch.toUInt64(&ok);
++    if (!ok)
++    {
++      static bool warnedOnce=FALSE;
++      if (!warnedOnce)
++      {
++        warn_uncond("Environment variable SOURCE_DATE_EPOCH does not contain a valid number; value is '%s'\n",
++            sourceDateEpoch.data());
++        warnedOnce=TRUE;
++      }
++    }
++    else if (epoch>UINT_MAX)
++    {
++      static bool warnedOnce=FALSE;
++      if (!warnedOnce)
++      {
++        warn_uncond("Environment variable SOURCE_DATA_EPOCH must have a value smaller than or equal to %llu; actual value %llu\n",UINT_MAX,epoch);
++        warnedOnce=TRUE;
++      }
++    }
++    else // all ok, replace current time with epoch value
++    {
++      current.setTime_t((ulong)epoch); // TODO: add support for 64bit epoch value
++    }
++  }
+   return theTranslator->trDateTime(current.date().year(),
+                                    current.date().month(),
+                                    current.date().day(),
diff --git a/debian/patches/series b/debian/patches/series
index 91b64ab..86dcd2e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -10,3 +10,4 @@ sqlite3-configure.diff
 issue742427.diff
 no-timestamps.diff
 default-no-timestamp.diff
+0001-Honour-SOURCE_DATE_EPOCH-environment-variable-for-re.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/doxygen.git



More information about the Reproducible-commits mailing list