Skip to content

Commit 3c5f9dc

Browse files
committed
Convert DIFFPY_VERSION macro back to integer.
C preprocessor cannot compare floating point values, DIFFPY_VERSION as a float would cause compilation failures. - multiply DIFFPY_VERSION by 1000 so it is now integer - add macro DIFFPY_VERSION_PATCH - change type of libdiffpy_version_info::version back to long long. Ensure it can fit full version even for date-based scheme. - check DIFFPY_VERSION formulas described in version.tpl.
1 parent da5cf95 commit 3c5f9dc

4 files changed

Lines changed: 32 additions & 16 deletions

File tree

site_scons/libdiffpybuildutils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def gitinfo():
3030
rv['minor'] = int(mx.group(2))
3131
rv['micro'] = int(mx.group(3) or 0)
3232
rv['prerelease'] = mx.group(4)
33-
rv['number'] = vnum
33+
rv['patchnumber'] = vnum
3434
rv['version'] = vtag
3535
if vnum:
3636
rv['version'] += '.post' + str(vnum)

src/diffpy/SConscript.version

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,25 @@ def parsemajorminor(hcode):
1616

1717
def build_VersionCode(target, source, env):
1818
tplcode = source[0].get_contents()
19-
numversion = (1000000 * ginfo['major'] +
20-
1000 * ginfo['minor'] + ginfo['micro'] +
21-
0.0001 * ginfo['number'])
22-
libversion = "%.0f" % numversion
23-
if ginfo['number']:
24-
libversion = "%.4f" % numversion
19+
numversion = ginfo['major']
20+
numversion = 1000 * numversion + ginfo['minor']
21+
numversion = 1000 * numversion + ginfo['micro']
22+
numversion = 1000 * numversion + ginfo['patchnumber']
23+
# verify that formulas in version.tpl work as advertised
24+
emsg = "Inconsistent value of DIFFPY_VERSION = %i" % numversion
25+
assert numversion // 1000000000 == ginfo['major'], emsg
26+
assert numversion // 1000000 % 1000 == ginfo['minor'], emsg
27+
assert numversion // 1000 % 1000 == ginfo['micro'], emsg
28+
assert numversion % 500 == ginfo['patchnumber'], emsg
29+
libversion = str(numversion)
2530
if ginfo['prerelease']:
26-
libversion = "(-0.5 + %s)" % libversion
31+
libversion = "(-500 + %s)" % libversion
2732
flds = {
2833
'DIFFPY_VERSION' : libversion,
2934
'DIFFPY_VERSION_MAJOR' : ginfo['major'],
3035
'DIFFPY_VERSION_MINOR' : ginfo['minor'],
3136
'DIFFPY_VERSION_MICRO' : ginfo['micro'],
37+
'DIFFPY_VERSION_PATCH' : ginfo['patchnumber'],
3238
'DIFFPY_VERSION_STR' : ginfo['version'],
3339
'DIFFPY_VERSION_DATE' : ginfo['date'],
3440
'DIFFPY_GIT_SHA' : ginfo['commit'],

src/diffpy/version.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,16 @@
1818

1919
#include <diffpy/version.hpp>
2020

21-
const double libdiffpy_version_info::version = DIFFPY_VERSION;
21+
// Append LL suffix to the DIFFPY_VERSION number.
22+
#define APPEND(x, y) x ## y
23+
#define LL(x) APPEND(x, LL)
24+
25+
const long long libdiffpy_version_info::version = LL(DIFFPY_VERSION);
2226
const char* libdiffpy_version_info::version_str = DIFFPY_VERSION_STR;
2327
const int libdiffpy_version_info::major = DIFFPY_VERSION_MAJOR;
2428
const int libdiffpy_version_info::minor = DIFFPY_VERSION_MINOR;
2529
const int libdiffpy_version_info::micro = DIFFPY_VERSION_MICRO;
30+
const int libdiffpy_version_info::patch = DIFFPY_VERSION_PATCH;
2631
const char* libdiffpy_version_info::date = DIFFPY_VERSION_DATE;
2732
const char* libdiffpy_version_info::git_sha = DIFFPY_GIT_SHA;
2833

src/diffpy/version.tpl

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
* DIFFPY_VERSION_MAJOR,
1818
* DIFFPY_VERSION_MINOR,
1919
* DIFFPY_VERSION_MICRO,
20+
* DIFFPY_VERSION_PATCH,
2021
* DIFFPY_VERSION_STR,
2122
* DIFFPY_VERSION_DATE
2223
* DIFFPY_GIT_SHA
@@ -32,15 +33,18 @@
3233
#define DIFFPY_VERSION_MAJOR ${DIFFPY_VERSION_MAJOR}
3334
#define DIFFPY_VERSION_MINOR ${DIFFPY_VERSION_MINOR}
3435
#define DIFFPY_VERSION_MICRO ${DIFFPY_VERSION_MICRO}
36+
// number of git commits since the last release tag
37+
#define DIFFPY_VERSION_PATCH ${DIFFPY_VERSION_PATCH}
3538

36-
// round(DIFFPY_VERSION) / 1000000 is the major version
37-
// round(DIFFPY_VERSION) / 1000 % 1000 is the minor version
38-
// round(DIFFPY_VERSION) % 1000 is the micro version
39-
// round(DIFFPY_VERSION * 10000) % 1000
40-
// is number of git commits since the last tag
39+
// DIFFPY_VERSION is an integer representation of a full version:
40+
//
41+
// DIFFPY_VERSION / 1000000000 is the major version number
42+
// DIFFPY_VERSION / 1000000 % 1000 is the minor version number
43+
// DIFFPY_VERSION / 1000 % 1000 is the micro version number
44+
// DIFFPY_VERSION % 500 is the patch number
4145
//
4246
// alpha and beta releases have smaller DIFFPY_VERSION than
43-
// a completed release. Numerical comparison of DIFFPY_VERSION
47+
// a finalized release. Numerical comparisons of DIFFPY_VERSION
4448
// values from two pre-releases may be inaccurate.
4549

4650
#define DIFFPY_VERSION ${DIFFPY_VERSION}
@@ -62,11 +66,12 @@
6266

6367
struct libdiffpy_version_info {
6468

65-
static const double version;
69+
static const long long version;
6670
static const char* version_str;
6771
static const int major;
6872
static const int minor;
6973
static const int micro;
74+
static const int patch;
7075
static const char* date;
7176
static const char* git_sha;
7277

0 commit comments

Comments
 (0)