Home | History | Annotate | Download | only in Modules
      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 *
     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 *
     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 *
     70 _Py_hgversion(void)
     71 {
     72     return HGVERSION;
     73 }
     74 
     75 const char *
     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