Mercurial > hgsubversion
annotate setup.py @ 720:a19a208c085b
test_util: new requiresmodule decorator for tests that require a feature
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Mon, 04 Oct 2010 23:03:12 -0500 |
parents | 26b85c0cf48a |
children | 050f03a3bdf5 |
rev | line source |
---|---|
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
320
1ba8ed29148e
Fix package name, use README for long_description
Augie Fackler <durin42@gmail.com>
parents:
318
diff
changeset
|
3 import os |
562
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
4 import re |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
5 import subprocess |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
6 import sys |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
7 import time |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
8 if not hasattr(sys, 'version_info') or sys.version_info < (2, 4, 0, 'final'): |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
9 raise SystemExit("Mercurial requires python 2.4 or later.") |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
10 |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
11 try: |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
12 from distutils.command.build_py import build_py_2to3 as build_py |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
13 except ImportError: |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
14 from distutils.command.build_py import build_py |
353
1ad05cffb20f
setup.py: Use setuptools if available.
Augie Fackler <durin42@gmail.com>
parents:
347
diff
changeset
|
15 try: |
1ad05cffb20f
setup.py: Use setuptools if available.
Augie Fackler <durin42@gmail.com>
parents:
347
diff
changeset
|
16 from setuptools import setup |
1ad05cffb20f
setup.py: Use setuptools if available.
Augie Fackler <durin42@gmail.com>
parents:
347
diff
changeset
|
17 except ImportError: |
1ad05cffb20f
setup.py: Use setuptools if available.
Augie Fackler <durin42@gmail.com>
parents:
347
diff
changeset
|
18 from distutils.core import setup |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
19 |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
20 def runcmd(cmd, env): |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
21 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
22 stderr=subprocess.PIPE, env=env) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
23 out, err = p.communicate() |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
24 # If root is executing setup.py, but the repository is owned by |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
25 # another user (as in "sudo python setup.py install") we will get |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
26 # trust warnings since the .hg/hgrc file is untrusted. That is |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
27 # fine, we don't want to load it anyway. |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
28 err = [e for e in err.splitlines() |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
29 if not e.startswith('Not trusting file')] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
30 if err: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
31 return '' |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
32 return out |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
33 |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
34 |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
35 version = '' |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
36 |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
37 if os.path.isdir('.hg'): |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
38 # Execute hg out of this directory with a custom environment which |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
39 # includes the pure Python modules in mercurial/pure. We also take |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
40 # care to not use any hgrc files and do no localization. |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
41 env = {'HGRCPATH': '', |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
42 'LANGUAGE': 'C'} |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
43 for copyenv in ('LD_LIBRARY_PATH', 'PYTHONPATH', 'PATH'): |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
44 if copyenv in os.environ: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
45 env[copyenv] = os.environ[copyenv] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
46 if 'SystemRoot' in os.environ: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
47 # Copy SystemRoot into the custom environment for Python 2.6 |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
48 # under Windows. Otherwise, the subprocess will fail with |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
49 # error 0xc0150004. See: http://bugs.python.org/issue3440 |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
50 env['SystemRoot'] = os.environ['SystemRoot'] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
51 cmd = ['hg', 'id', '-i', '-t'] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
52 l = runcmd(cmd, env).split() |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
53 while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
54 l.pop() |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
55 if len(l) > 1: # tag found |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
56 version = l[-1] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
57 if l[0].endswith('+'): # propagate the dirty status to the tag |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
58 version += '+' |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
59 elif len(l) == 1: # no tag found |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
60 cmd = ['hg', 'parents', '--template', |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
61 '{latesttag}+{latesttagdistance}-'] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
62 version = runcmd(cmd, env) + l[0] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
63 if not version: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
64 version = runcmd(['hg', 'parents', '--template' '{node|short}\n'], |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
65 env) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
66 if version: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
67 version = version.split()[0] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
68 if version.endswith('+'): |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
69 version += time.strftime('%Y%m%d') |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
70 elif os.path.exists('.hg_archival.txt'): |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
71 kw = dict([t.strip() for t in l.split(':', 1)] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
72 for l in open('.hg_archival.txt')) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
73 if 'tag' in kw: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
74 version = kw['tag'] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
75 elif 'latesttag' in kw: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
76 version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
77 else: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
78 version = kw.get('node', '')[:12] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
79 |
562
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
80 verfile = os.path.join("hgsubversion", "__version__.py") |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
81 if version: |
562
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
82 f = open(verfile, "w") |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
83 f.write('# this file is autogenerated by setup.py\n') |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
84 f.write('version = "%s"\n' % version) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
85 f.close() |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
86 |
562
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
87 if os.path.exists(verfile): |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
88 # scrape the version out with a regex because setuptools |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
89 # needlessly swaps out file() for some non-object thing |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
90 # and breaks importing hgsubversion entirely |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
91 mat = re.findall('.*"(.*)"', open(verfile).read()) |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
92 version = mat[0] |
c538229d02ca
setup: work around easy_install by getting version with a regex
Augie Fackler <durin42@gmail.com>
parents:
553
diff
changeset
|
93 if not version: |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
94 version = 'unknown' |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
95 |
563
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
96 requires = [] |
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
97 try: |
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
98 import mercurial |
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
99 except ImportError: |
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
100 requires.append('mercurial') |
553
97f2079e3778
setup: updates for release
Augie Fackler <durin42@gmail.com>
parents:
526
diff
changeset
|
101 |
681
26b85c0cf48a
setup: require Subvertpy when the SWIG bindings are unavailable.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
659
diff
changeset
|
102 # If the Subversion SWIG bindings aren't present, require Subvertpy |
26b85c0cf48a
setup: require Subvertpy when the SWIG bindings are unavailable.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
659
diff
changeset
|
103 try: |
26b85c0cf48a
setup: require Subvertpy when the SWIG bindings are unavailable.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
659
diff
changeset
|
104 from hgsubversion.svnwrap import svn_swig_wrapper |
26b85c0cf48a
setup: require Subvertpy when the SWIG bindings are unavailable.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
659
diff
changeset
|
105 except ImportError: |
26b85c0cf48a
setup: require Subvertpy when the SWIG bindings are unavailable.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
659
diff
changeset
|
106 requires.append('subvertpy>=0.7.3') |
612
2c15e4c50a54
setup: check for Subversion by importing the `svnwrap' module.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
563
diff
changeset
|
107 |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
108 setup( |
320
1ba8ed29148e
Fix package name, use README for long_description
Augie Fackler <durin42@gmail.com>
parents:
318
diff
changeset
|
109 name = 'hgsubversion', |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
353
diff
changeset
|
110 version = version, |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
111 url = 'http://bitbucket.org/durin42/hgsubversion', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
112 license = 'GNU GPL', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
113 author = 'Augie Fackler, others', |
553
97f2079e3778
setup: updates for release
Augie Fackler <durin42@gmail.com>
parents:
526
diff
changeset
|
114 author_email = 'durin42@gmail.com', |
318 | 115 description = ('hgsubversion is a Mercurial extension for working with ' |
116 'Subversion repositories.'), | |
320
1ba8ed29148e
Fix package name, use README for long_description
Augie Fackler <durin42@gmail.com>
parents:
318
diff
changeset
|
117 long_description = open(os.path.join(os.path.dirname(__file__), |
1ba8ed29148e
Fix package name, use README for long_description
Augie Fackler <durin42@gmail.com>
parents:
318
diff
changeset
|
118 'README')).read(), |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
119 keywords = 'mercurial', |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
120 packages = ('hgsubversion', 'hgsubversion.svnwrap'), |
659
55d6697b975a
help: add an rst file containing some helpful instructions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
612
diff
changeset
|
121 package_data = { 'hgsubversion': ['help/subversion.rst'] }, |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
122 platforms = 'any', |
563
09c016174e33
setup: work around easy_intall overzealously installing mercurial
Augie Fackler <durin42@gmail.com>
parents:
562
diff
changeset
|
123 install_requires=requires, |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
124 classifiers = [ |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
125 'License :: OSI Approved :: GNU General Public License (GPL)', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
126 'Intended Audience :: Developers', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
127 'Topic :: Software Development :: Version Control', |
553
97f2079e3778
setup: updates for release
Augie Fackler <durin42@gmail.com>
parents:
526
diff
changeset
|
128 'Development Status :: 4 - Beta', |
308
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
129 'Programming Language :: Python', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
130 'Operating System :: OS Independent', |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
131 ], |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
132 cmdclass = {'build_py': build_py}, |
41aa4c3f789e
A quick stab at a distutils installation script.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
diff
changeset
|
133 ) |