From 1ca2e7965c52525684bb517401c513158a8af989 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 5 Mar 2011 20:51:24 +0100 Subject: [PATCH 1/2] Commit the hg build identification patch from the pymigr repo. --- Include/pythonrun.h | 2 ++ Makefile.pre.in | 10 +++++++- Modules/getbuildinfo.c | 37 ++++++++++++++++++++++++--- Python/sysmodule.c | 3 +++ configure | 58 +++++++++++++++++++++++++++++++++++++++++- configure.in | 15 +++++++++++ 6 files changed, 120 insertions(+), 5 deletions(-) diff --git a/Include/pythonrun.h b/Include/pythonrun.h index 0c380e6be99..96a0e232f9d 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -120,6 +120,8 @@ PyAPI_FUNC(const char *) Py_GetBuildInfo(void); PyAPI_FUNC(const char *) _Py_svnversion(void); PyAPI_FUNC(const char *) Py_SubversionRevision(void); PyAPI_FUNC(const char *) Py_SubversionShortBranch(void); +PyAPI_FUNC(const char *) _Py_hgidentifier(void); +PyAPI_FUNC(const char *) _Py_hgversion(void); /* Internal -- various one-time initializations */ PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); diff --git a/Makefile.pre.in b/Makefile.pre.in index 7788cba62f8..211a70354f7 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -35,6 +35,9 @@ LINKCC= @LINKCC@ AR= @AR@ RANLIB= @RANLIB@ SVNVERSION= @SVNVERSION@ +HGVERSION= @HGVERSION@ +HGTAG= @HGTAG@ +HGBRANCH= @HGBRANCH@ GNULD= @GNULD@ @@ -525,7 +528,12 @@ Modules/getbuildinfo.o: $(PARSER_OBJS) \ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - $(CC) -c $(PY_CFLAGS) -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) \ + -DSVNVERSION="\"`LC_ALL=C $(SVNVERSION)`\"" \ + -DHGVERSION="\"`LC_ALL=C $(HGVERSION)`\"" \ + -DHGTAG="\"`LC_ALL=C $(HGTAG)`\"" \ + -DHGBRANCH="\"`LC_ALL=C $(HGBRANCH)`\"" \ + -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c index 3bac1c50c44..c70126d5841 100644 --- a/Modules/getbuildinfo.c +++ b/Modules/getbuildinfo.c @@ -28,15 +28,28 @@ #define SVNVERSION "$WCRANGE$$WCMODS?M:$" #endif +/* XXX Only unix build process has been tested */ +#ifndef HGVERSION +#define HGVERSION "" +#endif +#ifndef HGTAG +#define HGTAG "" +#endif +#ifndef HGBRANCH +#define HGBRANCH "" +#endif + const char * Py_GetBuildInfo(void) { static char buildinfo[50]; - const char *revision = Py_SubversionRevision(); + const char *revision = _Py_hgversion(); const char *sep = *revision ? ":" : ""; - const char *branch = Py_SubversionShortBranch(); + const char *hgid = _Py_hgidentifier(); + if (!(*hgid)) + hgid = "default"; PyOS_snprintf(buildinfo, sizeof(buildinfo), - "%s%s%s, %.20s, %.9s", branch, sep, revision, + "%s%s%s, %.20s, %.9s", hgid, sep, revision, DATE, TIME); return buildinfo; } @@ -50,3 +63,21 @@ _Py_svnversion(void) return svnversion; /* it was interpolated, or passed on command line */ return "Unversioned directory"; } + +const char * +_Py_hgversion(void) +{ + return HGVERSION; +} + +const char * +_Py_hgidentifier(void) +{ + const char *hgtag, *hgid; + hgtag = HGTAG; + if ((*hgtag) && strcmp(hgtag, "tip") != 0) + hgid = hgtag; + else + hgid = HGBRANCH; + return hgid; +} diff --git a/Python/sysmodule.c b/Python/sysmodule.c index e33047308d1..f85cc55ad1d 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1358,6 +1358,9 @@ _PySys_Init(void) SET_SYS_FROM_STRING("subversion", Py_BuildValue("(UUU)", "CPython", branch, svn_revision)); + SET_SYS_FROM_STRING("_mercurial", + Py_BuildValue("(szz)", "CPython", _Py_hgidentifier(), + _Py_hgversion())); SET_SYS_FROM_STRING("dont_write_bytecode", PyBool_FromLong(Py_DontWriteBytecodeFlag)); SET_SYS_FROM_STRING("api_version", diff --git a/configure b/configure index cc86b96926a..1ef57d06bc7 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 88561 . +# From configure.in Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for python 3.1. # @@ -639,6 +639,10 @@ LN INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM +HAS_HG +HGBRANCH +HGTAG +HGVERSION SVNVERSION ARFLAGS AR @@ -5089,6 +5093,58 @@ else SVNVERSION="echo Unversioned directory" fi + + + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAS_HG+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAS_HG"; then + ac_cv_prog_HAS_HG="$HAS_HG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_HAS_HG="found" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAS_HG" && ac_cv_prog_HAS_HG="not-found" +fi +fi +HAS_HG=$ac_cv_prog_HAS_HG +if test -n "$HAS_HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_HG" >&5 +$as_echo "$HAS_HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test $HAS_HG = found +then + HGVERSION="hg id -i \$(srcdir)" + HGTAG="hg id -t \$(srcdir)" + HGBRANCH="hg id -b \$(srcdir)" +else + HGVERSION="" + HGTAG="" + HGBRANCH="" +fi + case $MACHDEP in bsdos*|hp*|HP*) # install -d does not work on BSDI or HP-UX diff --git a/configure.in b/configure.in index d1833be836b..3c6bd6f1a90 100644 --- a/configure.in +++ b/configure.in @@ -785,6 +785,21 @@ else SVNVERSION="echo Unversioned directory" fi +AC_SUBST(HGVERSION) +AC_SUBST(HGTAG) +AC_SUBST(HGBRANCH) +AC_CHECK_PROG(HAS_HG, hg, found, not-found) +if test $HAS_HG = found +then + HGVERSION="hg id -i \$(srcdir)" + HGTAG="hg id -t \$(srcdir)" + HGBRANCH="hg id -b \$(srcdir)" +else + HGVERSION="" + HGTAG="" + HGBRANCH="" +fi + case $MACHDEP in bsdos*|hp*|HP*) # install -d does not work on BSDI or HP-UX From 8256242b30005b8a1b52e79149558ad36f1307d6 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sat, 5 Mar 2011 21:09:22 +0100 Subject: [PATCH 2/2] Adapt platform and test_platform to the build identification changes. --- Lib/platform.py | 4 +++- Lib/test/test_platform.py | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Lib/platform.py b/Lib/platform.py index 7fba1436420..780301d264f 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -1373,7 +1373,9 @@ def _sys_version(sys_version=None): name = 'CPython' builddate = builddate + ' ' + buildtime - if hasattr(sys, 'subversion'): + if hasattr(sys, '_mercurial'): + _, branch, revision = sys._mercurial + elif hasattr(sys, 'subversion'): # sys.subversion was added in Python 2.5 _, branch, revision = sys.subversion else: diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 4fd286abad0..2f688a4f187 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -51,11 +51,13 @@ class PlatformTest(unittest.TestCase): def setUp(self): self.save_version = sys.version self.save_subversion = sys.subversion + self.save_mercurial = sys._mercurial self.save_platform = sys.platform def tearDown(self): sys.version = self.save_version sys.subversion = self.save_subversion + sys._mercurial = self.save_mercurial sys.platform = self.save_platform def test_sys_version(self): @@ -103,10 +105,12 @@ class PlatformTest(unittest.TestCase): sys_versions.items(): sys.version = version_tag if subversion is None: + if hasattr(sys, "_mercurial"): + del sys._mercurial if hasattr(sys, "subversion"): del sys.subversion else: - sys.subversion = subversion + sys._mercurial = subversion if sys_platform is not None: sys.platform = sys_platform self.assertEqual(platform.python_implementation(), info[0])