1 #include "Python.h"
2
3 #ifndef DONT_HAVE_STDIO_H
4 #include <stdio.h>
5 #endif
6
7 #ifndef DATE
8 #ifdef __DATE__
9 #define DATE __DATE__
10 #else
11 #define DATE "xx/xx/xx"
12 #endif
13 #endif
14
15 #ifndef TIME
16 #ifdef __TIME__
17 #define TIME __TIME__
18 #else
19 #define TIME "xx:xx:xx"
20 #endif
21 #endif
22
23 /* on unix, SVNVERSION is passed on the command line.
24 * on Windows, the string is interpolated using
25 * subwcrev.exe
26 */
27 #ifndef SVNVERSION
28 #define SVNVERSION "$WCRANGE$$WCMODS?M:$"
29 #endif
30
31 /* XXX Only unix build process has been tested */
32 #ifndef HGVERSION
33 #define HGVERSION ""
34 #endif
35 #ifndef HGTAG
36 #define HGTAG ""
37 #endif
38 #ifndef HGBRANCH
39 #define HGBRANCH ""
40 #endif
41
42 const char *
Py_GetBuildInfo(void)43 Py_GetBuildInfo(void)
44 {
45 static char buildinfo[50 + sizeof(HGVERSION) +
46 ((sizeof(HGTAG) > sizeof(HGBRANCH)) ?
47 sizeof(HGTAG) : sizeof(HGBRANCH))];
48 const char *revision = _Py_hgversion();
49 const char *sep = *revision ? ":" : "";
50 const char *hgid = _Py_hgidentifier();
51 if (!(*hgid))
52 hgid = "default";
53 PyOS_snprintf(buildinfo, sizeof(buildinfo),
54 "%s%s%s, %.20s, %.9s", hgid, sep, revision,
55 DATE, TIME);
56 return buildinfo;
57 }
58
59 const char *
_Py_svnversion(void)60 _Py_svnversion(void)
61 {
62 /* the following string can be modified by subwcrev.exe */
63 static const char svnversion[] = SVNVERSION;
64 if (svnversion[0] != '$')
65 return svnversion; /* it was interpolated, or passed on command line */
66 return "Unversioned directory";
67 }
68
69 const char *
_Py_hgversion(void)70 _Py_hgversion(void)
71 {
72 return HGVERSION;
73 }
74
75 const char *
_Py_hgidentifier(void)76 _Py_hgidentifier(void)
77 {
78 const char *hgtag, *hgid;
79 hgtag = HGTAG;
80 if ((*hgtag) && strcmp(hgtag, "tip") != 0)
81 hgid = hgtag;
82 else
83 hgid = HGBRANCH;
84 return hgid;
85 }
86