classification
Title: Python source code build fails with old mercurial
Type: compile error Stage: needs patch
Components: Build Versions: Python 3.3, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Arfrever, Graeme.Winter, Luke Erlacher, benjamin.peterson, eric.araujo, ezio.melotti, georg.brandl, r.david.murray, santoso.wijaya, schmir, vstinner
Priority: normal Keywords:

Created on 2011-06-16 08:14 by Graeme.Winter, last changed 2015-12-18 23:01 by r.david.murray. This issue is now closed.

Messages (15)
msg138417 - (view) Author: Graeme Winter (Graeme.Winter) Date: 2011-06-16 08:14
Trying to build 2.7.2 from source on RHEL5 32 bit get errors:

gcc -pthread -c -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes  -I. -IInclude -I./Include   -DPy_BUILD_CORE \
              -DSVNVERSION="\"`LC_ALL=C svnversion .`\"" \
              -DHGVERSION="\"`LC_ALL=C hg id -i .`\"" \
              -DHGTAG="\"`LC_ALL=C hg id -t .`\"" \
              -DHGBRANCH="\"`LC_ALL=C hg id -b .`\"" \
              -o Modules/getbuildinfo.o ./Modules/getbuildinfo.c
hg identify: option -i not recognized
hg identify: option -t not recognized
hg identify: option -b not recognized
./Modules/getbuildinfo.c: In function ‘Py_GetBuildInfo’:
./Modules/getbuildinfo.c:45: error: missing terminating " character
./Modules/getbuildinfo.c:45: error: expected expression before ‘)’ token
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:53: error: ‘buildinfo’ undeclared (first use in this function)
./Modules/getbuildinfo.c:53: error: (Each undeclared identifier is reported only once
./Modules/getbuildinfo.c:53: error: for each function it appears in.)
./Modules/getbuildinfo.c: In function ‘_Py_hgversion’:
./Modules/getbuildinfo.c:72: error: missing terminating " character
./Modules/getbuildinfo.c:72: warning: ‘return’ with no value, in function returning non-void
./Modules/getbuildinfo.c: In function ‘_Py_hgidentifier’:
./Modules/getbuildinfo.c:79: error: missing terminating " character
./Modules/getbuildinfo.c:79: error: expected expression before ‘;’ token
./Modules/getbuildinfo.c:83: error: missing terminating " character
./Modules/getbuildinfo.c:83: error: expected expression before ‘;’ token
make: *** [Modules/getbuildinfo.o] Error 1
gcc -pthread -c -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes  -I. -IInclude -I./Include   -DPy_BUILD_CORE \
              -DSVNVERSION="\"`LC_ALL=C svnversion .`\"" \
              -DHGVERSION="\"`LC_ALL=C hg id -i .`\"" \
              -DHGTAG="\"`LC_ALL=C hg id -t .`\"" \
              -DHGBRANCH="\"`LC_ALL=C hg id -b .`\"" \
              -o Modules/getbuildinfo.o ./Modules/getbuildinfo.c
hg identify: option -i not recognized
hg identify: option -t not recognized
hg identify: option -b not recognized
./Modules/getbuildinfo.c: In function ‘Py_GetBuildInfo’:
./Modules/getbuildinfo.c:45: error: missing terminating " character
./Modules/getbuildinfo.c:45: error: expected expression before ‘)’ token
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:46: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:47: error: missing terminating " character
./Modules/getbuildinfo.c:53: error: ‘buildinfo’ undeclared (first use in this function)
./Modules/getbuildinfo.c:53: error: (Each undeclared identifier is reported only once
./Modules/getbuildinfo.c:53: error: for each function it appears in.)
./Modules/getbuildinfo.c: In function ‘_Py_hgversion’:
./Modules/getbuildinfo.c:72: error: missing terminating " character
./Modules/getbuildinfo.c:72: warning: ‘return’ with no value, in function returning non-void
./Modules/getbuildinfo.c: In function ‘_Py_hgidentifier’:
./Modules/getbuildinfo.c:79: error: missing terminating " character
./Modules/getbuildinfo.c:79: error: expected expression before ‘;’ token
./Modules/getbuildinfo.c:83: error: missing terminating " character
./Modules/getbuildinfo.c:83: error: expected expression before ‘;’ token
make: *** [Modules/getbuildinfo.o] Error 1

Would assume it is bad form for a release source bundle to depend on mercurial?

Diffs against version of getbuildinfo.c from 2.7.1 indicate that this is a new dependency:

$ find . -name 'getbuildinfo.c'  | xargs diff -u
--- ./Python-2.7.2/Modules/getbuildinfo.c       2011-06-11 16:46:27.000000000 +0100
+++ ./Python-2.7.1/Modules/getbuildinfo.c       2010-05-09 15:46:46.000000000 +0100
@@ -28,30 +28,15 @@
 #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 + sizeof(HGVERSION) +
-                          ((sizeof(HGTAG) > sizeof(HGBRANCH)) ?
-                           sizeof(HGTAG) : sizeof(HGBRANCH))];
-    const char *revision = _Py_hgversion();
+    static char buildinfo[50];
+    const char *revision = Py_SubversionRevision();
     const char *sep = *revision ? ":" : "";
-    const char *hgid = _Py_hgidentifier();
-    if (!(*hgid))
-        hgid = "default";
+    const char *branch = Py_SubversionShortBranch();
     PyOS_snprintf(buildinfo, sizeof(buildinfo),
-                  "%s%s%s, %.20s, %.9s", hgid, sep, revision,
+                  "%s%s%s, %.20s, %.9s", branch, sep, revision,
                   DATE, TIME);
     return buildinfo;
 }
@@ -65,21 +50,3 @@
         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;
-}
msg138420 - (view) Author: Graeme Winter (Graeme.Winter) Date: 2011-06-16 10:41
Some more information:

It has picked up that I have mercurial installed:


[gw56@ws050 Python-2.7.2_cci]$ cat config.log | grep HG
ac_cv_prog_HAS_HG=found
HAS_HG='found'
HGBRANCH='hg id -b $(srcdir)'
HGTAG='hg id -t $(srcdir)'
HGVERSION='hg id -i $(srcdir)'


however it happens to be rather an old version:


[gw56@ws050 Python-2.7.2_cci]$ hg --version
Mercurial Distributed SCM (version 0.9.3)

Copyright (C) 2005, 2006 Matt Mackall <mpm@selenic.com>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


so does not recognise the command-line options that you are using.
msg138440 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-16 14:22
It used to be that the svn version info was pulled from embedded constants in Makefile.pre.in.  I agree that depending on having mercurial (and, presumably, a repo!) at build time is wrong.  These constants need to be pre-computed when a release tarball is built and the mercurial dependency removed from the generated Makefile.  I'm not sure how we make that work correctly in a development build, but I'm sure the release managers will figure something out.
msg138442 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-16 14:34
Indeed, I just confirmed that building with a recent version of mercurial installed from the release 2.7.2 source tarball from python.org, the make results in:

abort: repository . not found!
abort: repository . not found!
abort: repository . not found!

during the build of getbuildinfo.c.  Fortunately the only effect seems to be that sys._mercurial returns ('CPython, '', '') instead of the correct info.
msg138445 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-16 14:51
Ah.  For subversion there was a similar check, and the values were set to blank if the subversion binary was not found.  For hg it looks like we need to add additional checks on whether or not there is a repo.  (We can probably assume that if there is a repo the correct version of mercurial is installed).
msg138492 - (view) Author: Ralf Schmitt (schmir) Date: 2011-06-17 10:17
trunk configure.in contains code that checks for the existence of a .hg repository.
See rev 435eec7b41f0
msg138507 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-17 13:51
That needs to be ported to the other branches, then.

Ezio, on a completely unrelated note, notice what happened to Ralf's reference.  I think the regexes may need to be reordered.
msg138564 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2011-06-18 01:20
The regexes are now in the right order.
msg138640 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2011-06-19 16:24
So, it seems the problem is not actually that the build depends on mercurial, it's that it fails with ancient mercurials.
msg138642 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-19 16:36
Only if Ralf's patch is applied to all branches.  Otherwise the make step reports "abort: repository . not found!", which most users will ignore but a few will report here.  It looks from Ralf's quoted changeset like it was only applied to default, but frankly I'm not comfortable enough with mercurial yet to be able to tell.

If Ralf's patch is applied, then the lack of a repository would cause the old hg to not get called.  If someone *has* a repository in the build dir, I think we can assume they used a new enough hg to check it out...and if they didn't, that *is* a bug in their setup they should fix.
msg138643 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-06-19 16:38
Yes, it was committed to default.

> I think we can assume they used a new enough hg to check it out...and
> if they didn't, that *is* a bug in their setup they should fix.
Agreed.
msg139671 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2011-07-03 07:17
435eec7b41f0 transplanted to 3.2 in 4e0c1128cda2.
msg154900 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2012-03-04 15:02
Is there anything left to do here?  It doesn't appear to be a release blocker anymore.
msg254886 - (view) Author: Luke Erlacher (Luke Erlacher) Date: 2015-11-19 08:27
This is not fixed in 2.7.10.
msg256713 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2015-12-18 23:01
Luke: since this issue is closed, please open a new 2.7 only issue with a reference to this one.
History
Date User Action Args
2015-12-18 23:01:28r.david.murraysetmessages: + msg256713
2015-11-19 08:27:58Luke Erlachersetnosy: + Luke Erlacher
messages: + msg254886
2015-10-07 02:50:51benjamin.petersonsetstatus: pending -> closed
resolution: fixed
2015-10-06 17:44:14serhiy.storchakasetstatus: open -> pending
2012-03-04 15:02:20georg.brandlsetpriority: release blocker -> normal

messages: + msg154900
2011-07-03 07:17:58georg.brandlsetmessages: + msg139671
versions: - Python 3.2
2011-07-01 16:49:57Arfreversetnosy: + Arfrever
2011-07-01 16:26:04vstinnersetnosy: + vstinner
2011-06-19 16:38:55eric.araujosetnosy: + eric.araujo
messages: + msg138643
2011-06-19 16:36:45r.david.murraysetmessages: + msg138642
2011-06-19 16:24:50benjamin.petersonsetmessages: + msg138640
title: Python source code build (release) depends on mercurial -> Python source code build fails with old mercurial
2011-06-18 17:57:00r.david.murraysettitle: Python 2.7.2 source code build (release) depends on mercurial -> Python source code build (release) depends on mercurial
2011-06-18 01:20:36ezio.melottisetmessages: + msg138564
2011-06-17 18:55:59santoso.wijayasetnosy: + santoso.wijaya
2011-06-17 13:51:55r.david.murraysetnosy: + ezio.melotti
messages: + msg138507
2011-06-17 10:17:55schmirsetnosy: + schmir
messages: + msg138492
2011-06-16 14:51:28r.david.murraysetmessages: + msg138445
2011-06-16 14:34:53r.david.murraysetmessages: + msg138442
2011-06-16 14:22:56r.david.murraysetpriority: normal -> release blocker
versions: + Python 3.2, Python 3.3
nosy: + georg.brandl, r.david.murray, benjamin.peterson

messages: + msg138440

stage: needs patch
2011-06-16 10:41:36Graeme.Wintersetmessages: + msg138420
2011-06-16 08:14:24Graeme.Wintercreate