setup.py
changeset 13637 4e976235c985
parent 13619 fd09c3aeae20
parent 13636 4bfff063aed6
child 13734 16118b4859a1
equal deleted inserted replaced
13634:15470463f932 13637:4e976235c985
   103 
   103 
   104 def runcmd(cmd, env):
   104 def runcmd(cmd, env):
   105     p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
   105     p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
   106                          stderr=subprocess.PIPE, env=env)
   106                          stderr=subprocess.PIPE, env=env)
   107     out, err = p.communicate()
   107     out, err = p.communicate()
       
   108     return out, err
       
   109 
       
   110 def runhg(cmd, env):
       
   111     out, err = runcmd(cmd, env)
   108     # If root is executing setup.py, but the repository is owned by
   112     # If root is executing setup.py, but the repository is owned by
   109     # another user (as in "sudo python setup.py install") we will get
   113     # another user (as in "sudo python setup.py install") we will get
   110     # trust warnings since the .hg/hgrc file is untrusted. That is
   114     # trust warnings since the .hg/hgrc file is untrusted. That is
   111     # fine, we don't want to load it anyway.  Python may warn about
   115     # fine, we don't want to load it anyway.  Python may warn about
   112     # a missing __init__.py in mercurial/locale, we also ignore that.
   116     # a missing __init__.py in mercurial/locale, we also ignore that.
   133         # Copy SystemRoot into the custom environment for Python 2.6
   137         # Copy SystemRoot into the custom environment for Python 2.6
   134         # under Windows. Otherwise, the subprocess will fail with
   138         # under Windows. Otherwise, the subprocess will fail with
   135         # error 0xc0150004. See: http://bugs.python.org/issue3440
   139         # error 0xc0150004. See: http://bugs.python.org/issue3440
   136         env['SystemRoot'] = os.environ['SystemRoot']
   140         env['SystemRoot'] = os.environ['SystemRoot']
   137     cmd = [sys.executable, 'hg', 'id', '-i', '-t']
   141     cmd = [sys.executable, 'hg', 'id', '-i', '-t']
   138     l = runcmd(cmd, env).split()
   142     l = runhg(cmd, env).split()
   139     while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
   143     while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
   140         l.pop()
   144         l.pop()
   141     if len(l) > 1: # tag found
   145     if len(l) > 1: # tag found
   142         version = l[-1]
   146         version = l[-1]
   143         if l[0].endswith('+'): # propagate the dirty status to the tag
   147         if l[0].endswith('+'): # propagate the dirty status to the tag
   144             version += '+'
   148             version += '+'
   145     elif len(l) == 1: # no tag found
   149     elif len(l) == 1: # no tag found
   146         cmd = [sys.executable, 'hg', 'parents', '--template',
   150         cmd = [sys.executable, 'hg', 'parents', '--template',
   147                '{latesttag}+{latesttagdistance}-']
   151                '{latesttag}+{latesttagdistance}-']
   148         version = runcmd(cmd, env) + l[0]
   152         version = runhg(cmd, env) + l[0]
   149     if version.endswith('+'):
   153     if version.endswith('+'):
   150         version += time.strftime('%Y%m%d')
   154         version += time.strftime('%Y%m%d')
   151 elif os.path.exists('.hg_archival.txt'):
   155 elif os.path.exists('.hg_archival.txt'):
   152     kw = dict([[t.strip() for t in l.split(':', 1)]
   156     kw = dict([[t.strip() for t in l.split(':', 1)]
   153                for l in open('.hg_archival.txt')])
   157                for l in open('.hg_archival.txt')])
   359     setupversion = version.split('+', 1)[0]
   363     setupversion = version.split('+', 1)[0]
   360 
   364 
   361 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'):
   365 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'):
   362     # XCode 4.0 dropped support for ppc architecture, which is hardcoded in
   366     # XCode 4.0 dropped support for ppc architecture, which is hardcoded in
   363     # distutils.sysconfig
   367     # distutils.sysconfig
   364     version = runcmd(['/usr/bin/xcodebuild', '-version'], {}).splitlines()[0]
   368     version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines()[0]
   365     # Also parse only first digit, because 3.2.1 can't be parsed nicely
   369     # Also parse only first digit, because 3.2.1 can't be parsed nicely
   366     if (version.startswith('Xcode') and
   370     if (version.startswith('Xcode') and
   367         StrictVersion(version.split()[1]) >= StrictVersion('4.0')):
   371         StrictVersion(version.split()[1]) >= StrictVersion('4.0')):
   368         os.environ['ARCHFLAGS'] = '-arch i386 -arch x86_64'
   372         os.environ['ARCHFLAGS'] = '-arch i386 -arch x86_64'
   369 
   373