Mercurial > hg
annotate setup.py @ 39827:a6088d10d5f2
py3: ensure _start_response() is called with system string
This was preventing HTTP 500's from being sent in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D4730
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 24 Sep 2018 20:10:01 -0700 |
parents | ae531f5e583c |
children | 138e2d6d3b53 |
rev | line source |
---|---|
575 | 1 # |
2 # This is the mercurial setup script. | |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
3 # |
4816
c10d3bc05a8d
setup.py not executable: change instructions at beginning of file
Christian Ebert <blacktrash@gmx.net>
parents:
4628
diff
changeset
|
4 # 'python setup.py install', or |
c10d3bc05a8d
setup.py not executable: change instructions at beginning of file
Christian Ebert <blacktrash@gmx.net>
parents:
4628
diff
changeset
|
5 # 'python setup.py --help' for more options |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
6 |
33591
ee11d18fcd3c
setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents:
33589
diff
changeset
|
7 import os |
ee11d18fcd3c
setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents:
33589
diff
changeset
|
8 |
33587
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
9 supportedpy = '~= 2.7' |
33591
ee11d18fcd3c
setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents:
33589
diff
changeset
|
10 if os.environ.get('HGALLOWPYTHON3', ''): |
33587
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
11 # Mercurial will never work on Python 3 before 3.5 due to a lack |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
12 # of % formatting on bytestrings, and can't work on 3.6.0 or 3.6.1 |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
13 # due to a bug in % formatting in bytestrings. |
39572
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
14 # We cannot support Python 3.5.0, 3.5.1, 3.5.2 because of bug in |
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
15 # codecs.escape_encode() where it raises SystemError on empty bytestring |
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
16 # bug link: https://bugs.python.org/issue25270 |
33587
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
17 # |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
18 # TODO: when we actually work on Python 3, use this string as the |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
19 # actual supportedpy string. |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
20 supportedpy = ','.join([ |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
21 '>=2.7', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
22 '!=3.0.*', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
23 '!=3.1.*', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
24 '!=3.2.*', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
25 '!=3.3.*', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
26 '!=3.4.*', |
39572
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
27 '!=3.5.0', |
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
28 '!=3.5.1', |
b6b9488aae4c
setup: don't support py 3.5.0, 3.5.1, 3.5.2 because of bug in codecs
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39329
diff
changeset
|
29 '!=3.5.2', |
33587
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
30 '!=3.6.0', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
31 '!=3.6.1', |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
32 ]) |
e0bbe32d8b55
setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents:
33119
diff
changeset
|
33 |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
34 import sys, platform |
11532
f3732ab1149f
setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents:
11468
diff
changeset
|
35 if sys.version_info[0] >= 3: |
20696
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
36 printf = eval('print') |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
37 libdir_escape = 'unicode_escape' |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
38 def sysstr(s): |
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
39 return s.decode('latin-1') |
11532
f3732ab1149f
setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents:
11468
diff
changeset
|
40 else: |
20696
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
41 libdir_escape = 'string_escape' |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
42 def printf(*args, **kwargs): |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
43 f = kwargs.get('file', sys.stdout) |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
44 end = kwargs.get('end', '\n') |
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
45 f.write(b' '.join(args) + end) |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
46 def sysstr(s): |
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
47 return s |
11532
f3732ab1149f
setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents:
11468
diff
changeset
|
48 |
33588
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
49 # Attempt to guide users to a modern pip - this means that 2.6 users |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
50 # should have a chance of getting a 4.2 release, and when we ratchet |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
51 # the version requirement forward again hopefully everyone will get |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
52 # something that works for them. |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
53 if sys.version_info < (2, 7, 0, 'final'): |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
54 pip_message = ('This may be due to an out of date pip. ' |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
55 'Make sure you have pip >= 9.0.1.') |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
56 try: |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
57 import pip |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
58 pip_version = tuple([int(x) for x in pip.__version__.split('.')[:3]]) |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
59 if pip_version < (9, 0, 1) : |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
60 pip_message = ( |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
61 'Your pip version is out of date, please install ' |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
62 'pip >= 9.0.1. pip {} detected.'.format(pip.__version__)) |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
63 else: |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
64 # pip is new enough - it must be something else |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
65 pip_message = '' |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
66 except Exception: |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
67 pass |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
68 error = """ |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
69 Mercurial does not support Python older than 2.7. |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
70 Python {py} detected. |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
71 {pip} |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
72 """.format(py=sys.version_info, pip=pip_message) |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
73 printf(error, file=sys.stderr) |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
74 sys.exit(1) |
025017423e53
setup: add extra logic to try and recommend a new pip on bad Python
Augie Fackler <augie@google.com>
parents:
33587
diff
changeset
|
75 |
36386
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
76 # We don't yet officially support Python 3. But we want to allow developers to |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
77 # hack on. Detect and disallow running on Python 3 by default. But provide a |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
78 # backdoor to enable working on Python 3. |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
79 if sys.version_info[0] != 2: |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
80 badpython = True |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
81 |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
82 # Allow Python 3 from source checkouts. |
38721
dbbe45ae5ad1
setup: allow to run setup.py with python 3 without a mercurial checkout
Mike Hommey <mh@glandium.org>
parents:
38207
diff
changeset
|
83 if os.path.isdir('.hg') or 'HGPYTHON3' in os.environ: |
36386
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
84 badpython = False |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
85 |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
86 if badpython: |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
87 error = """ |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
88 Mercurial only supports Python 2.7. |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
89 Python {py} detected. |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
90 Please re-run with Python 2.7. |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
91 """.format(py=sys.version_info) |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
92 |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
93 printf(error, file=sys.stderr) |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
94 sys.exit(1) |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
95 |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
96 # Solaris Python packaging brain damage |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
97 try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
98 import hashlib |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
99 sha = hashlib.sha1() |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
100 except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
101 try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
102 import sha |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
103 sha.sha # silence unused import warning |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
104 except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
105 raise SystemExit( |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
106 "Couldn't import standard hashlib (incomplete Python install).") |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
107 |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
108 try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
109 import zlib |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
110 zlib.compressobj # silence unused import warning |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
111 except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
112 raise SystemExit( |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
113 "Couldn't import standard zlib (incomplete Python install).") |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
114 |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
115 # The base IronPython distribution (as of 2.7.1) doesn't support bz2 |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
116 isironpython = False |
10761
16a13fdb4b36
setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10521
diff
changeset
|
117 try: |
16683 | 118 isironpython = (platform.python_implementation() |
119 .lower().find("ironpython") != -1) | |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
120 except AttributeError: |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
121 pass |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
122 |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
123 if isironpython: |
15492
36f076d03b34
setup: make script executable with python3
Simon Heimberg <simohe@besonet.ch>
parents:
15460
diff
changeset
|
124 sys.stderr.write("warning: IronPython detected (no bz2 support)\n") |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
125 else: |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
126 try: |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
127 import bz2 |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
128 bz2.BZ2Compressor # silence unused import warning |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
129 except ImportError: |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
130 raise SystemExit( |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
131 "Couldn't import standard bz2 (incomplete Python install).") |
10761
16a13fdb4b36
setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10521
diff
changeset
|
132 |
24192
390410a6545d
setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents:
24191
diff
changeset
|
133 ispypy = "PyPy" in sys.version |
390410a6545d
setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents:
24191
diff
changeset
|
134 |
29020
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
135 import ctypes |
33591
ee11d18fcd3c
setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents:
33589
diff
changeset
|
136 import stat, subprocess, time |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
137 import re |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
138 import shutil |
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
139 import tempfile |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
140 from distutils import log |
31289
718a57e95a89
setup: use setuptools on Windows (issue5400)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30907
diff
changeset
|
141 # We have issues with setuptools on some platforms and builders. Until |
718a57e95a89
setup: use setuptools on Windows (issue5400)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30907
diff
changeset
|
142 # those are resolved, setuptools is opt-in except for platforms where |
718a57e95a89
setup: use setuptools on Windows (issue5400)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30907
diff
changeset
|
143 # we don't have issues. |
33600
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
144 issetuptools = (os.name == 'nt' or 'FORCE_SETUPTOOLS' in os.environ) |
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
145 if issetuptools: |
26600
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
146 from setuptools import setup |
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
147 else: |
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
148 from distutils.core import setup |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
149 from distutils.ccompiler import new_compiler |
26600
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
150 from distutils.core import Command, Extension |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
151 from distutils.dist import Distribution |
7649
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
152 from distutils.command.build import build |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
153 from distutils.command.build_ext import build_ext |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
154 from distutils.command.build_py import build_py |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
155 from distutils.command.build_scripts import build_scripts |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
156 from distutils.command.install import install |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
157 from distutils.command.install_lib import install_lib |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
158 from distutils.command.install_scripts import install_scripts |
7649
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
159 from distutils.spawn import spawn, find_executable |
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
160 from distutils import file_util |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
161 from distutils.errors import ( |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
162 CCompilerError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
163 DistutilsError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
164 DistutilsExecError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
165 ) |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
166 from distutils.sysconfig import get_python_inc, get_config_var |
13594
64a458707fd4
setup.py: use StrictVersion instead of manual comparison
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
13583
diff
changeset
|
167 from distutils.version import StrictVersion |
157
2653740d8118
Install the templates where they can be found by hgweb.py
mpm@selenic.com
parents:
155
diff
changeset
|
168 |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
169 def write_if_changed(path, content): |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
170 """Write content to a file iff the content hasn't changed.""" |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
171 if os.path.exists(path): |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
172 with open(path, 'rb') as fh: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
173 current = fh.read() |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
174 else: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
175 current = b'' |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
176 |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
177 if current != content: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
178 with open(path, 'wb') as fh: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
179 fh.write(content) |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
180 |
6513
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
181 scripts = ['hg'] |
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
182 if os.name == 'nt': |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
183 # We remove hg.bat if we are able to build hg.exe. |
6513
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
184 scripts.append('contrib/win32/hg.bat') |
3893 | 185 |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
186 def cancompile(cc, code): |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
187 tmpdir = tempfile.mkdtemp(prefix='hg-install-') |
6373
7010e4557963
setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6251
diff
changeset
|
188 devnull = oldstderr = None |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
189 try: |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
190 fname = os.path.join(tmpdir, 'testcomp.c') |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
191 f = open(fname, 'w') |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
192 f.write(code) |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
193 f.close() |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
194 # Redirect stderr to /dev/null to hide any error messages |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
195 # from the compiler. |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
196 # This will have to be changed if we ever have to check |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
197 # for a function on Windows. |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
198 devnull = open('/dev/null', 'w') |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
199 oldstderr = os.dup(sys.stderr.fileno()) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
200 os.dup2(devnull.fileno(), sys.stderr.fileno()) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
201 objects = cc.compile([fname], output_dir=tmpdir) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
202 cc.link_executable(objects, os.path.join(tmpdir, "a.out")) |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
203 return True |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
204 except Exception: |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
205 return False |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
206 finally: |
6373
7010e4557963
setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6251
diff
changeset
|
207 if oldstderr is not None: |
7010e4557963
setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6251
diff
changeset
|
208 os.dup2(oldstderr, sys.stderr.fileno()) |
7010e4557963
setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6251
diff
changeset
|
209 if devnull is not None: |
7010e4557963
setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6251
diff
changeset
|
210 devnull.close() |
6251
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
211 shutil.rmtree(tmpdir) |
87053f0b0fad
setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6245
diff
changeset
|
212 |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
213 # simplified version of distutils.ccompiler.CCompiler.has_function |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
214 # that actually removes its temporary files. |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
215 def hasfunction(cc, funcname): |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
216 code = 'int main(void) { %s(); }\n' % funcname |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
217 return cancompile(cc, code) |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
218 |
31560
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
219 def hasheader(cc, headername): |
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
220 code = '#include <%s>\nint main(void) { return 0; }\n' % headername |
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
221 return cancompile(cc, code) |
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
222 |
1283
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
223 # py2exe needs to be installed to work |
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
224 try: |
1294
372971e1c40d
Clean up whitespace damage.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1284
diff
changeset
|
225 import py2exe |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
226 py2exe.Distribution # silence unused import warning |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
227 py2exeloaded = True |
15527
9926aab3d0b5
setup: fix py2exe generation broken by c3a6ec304055 (issue3116)
Pascal Quantin <pascal.quantin@gmail.com>
parents:
15523
diff
changeset
|
228 # import py2exe's patched Distribution class |
9926aab3d0b5
setup: fix py2exe generation broken by c3a6ec304055 (issue3116)
Pascal Quantin <pascal.quantin@gmail.com>
parents:
15523
diff
changeset
|
229 from distutils.core import Distribution |
1284
59d07a6bd513
Fix Volker's modifications to setup.py for non-Windows systems.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1283
diff
changeset
|
230 except ImportError: |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
231 py2exeloaded = False |
1283
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
232 |
9807
f359d4f528aa
setup: fix f51d1822d6fd refactoring, propagate env to runcmd
Christian Boos <cboos@bct-technology.com>
parents:
9615
diff
changeset
|
233 def runcmd(cmd, env): |
32886
19b0fd4b5570
plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents:
32782
diff
changeset
|
234 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
19b0fd4b5570
plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents:
32782
diff
changeset
|
235 stderr=subprocess.PIPE, env=env) |
19b0fd4b5570
plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents:
32782
diff
changeset
|
236 out, err = p.communicate() |
33111
87ee783f7299
setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents:
33110
diff
changeset
|
237 return p.returncode, out, err |
13636
4bfff063aed6
setup: fix mac build broken by e42d18538e1d
Jon M. Dugan <jdugan@x1024.net>
parents:
13594
diff
changeset
|
238 |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
239 class hgcommand(object): |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
240 def __init__(self, cmd, env): |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
241 self.cmd = cmd |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
242 self.env = env |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
243 |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
244 def run(self, args): |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
245 cmd = self.cmd + args |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
246 returncode, out, err = runcmd(cmd, self.env) |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
247 err = filterhgerr(err) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
248 if err or returncode != 0: |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
249 printf("stderr from '%s':" % (' '.join(cmd)), file=sys.stderr) |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
250 printf(err, file=sys.stderr) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
251 return '' |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
252 return out |
8548
3ccbe42ff72f
setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
8547
diff
changeset
|
253 |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
254 def filterhgerr(err): |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
255 # If root is executing setup.py, but the repository is owned by |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
256 # another user (as in "sudo python setup.py install") we will get |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
257 # trust warnings since the .hg/hgrc file is untrusted. That is |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
258 # fine, we don't want to load it anyway. Python may warn about |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
259 # a missing __init__.py in mercurial/locale, we also ignore that. |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
260 err = [e for e in err.splitlines() |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
261 if (not e.startswith(b'not trusting file') |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
262 and not e.startswith(b'warning: Not importing') |
34923
a6a322193a02
setup: filter out devel-warn messages from system hg
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents:
34922
diff
changeset
|
263 and not e.startswith(b'obsolete feature not enabled') |
36684
5f41e3418407
setup: ignore extension load failures when finding working hg
Ryan McElroy <rmcelroy@fb.com>
parents:
36675
diff
changeset
|
264 and not e.startswith(b'*** failed to import extension') |
34923
a6a322193a02
setup: filter out devel-warn messages from system hg
Kevin Bullock <kbullock+mercurial@ringworld.org>
parents:
34922
diff
changeset
|
265 and not e.startswith(b'devel-warn:'))] |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
266 return b'\n'.join(b' ' + e for e in err) |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
267 |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
268 def findhg(): |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
269 """Try to figure out how we should invoke hg for examining the local |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
270 repository contents. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
271 |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
272 Returns an hgcommand object.""" |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
273 # By default, prefer the "hg" command in the user's path. This was |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
274 # presumably the hg command that the user used to create this repository. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
275 # |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
276 # This repository may require extensions or other settings that would not |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
277 # be enabled by running the hg script directly from this local repository. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
278 hgenv = os.environ.copy() |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
279 # Use HGPLAIN to disable hgrc settings that would change output formatting, |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
280 # and disable localization for the same reasons. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
281 hgenv['HGPLAIN'] = '1' |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
282 hgenv['LANGUAGE'] = 'C' |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
283 hgcmd = ['hg'] |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
284 # Run a simple "hg log" command just to see if using hg from the user's |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
285 # path works and can successfully interact with this repository. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
286 check_cmd = ['log', '-r.', '-Ttest'] |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
287 try: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
288 retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
289 except EnvironmentError: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
290 retcode = -1 |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
291 if retcode == 0 and not filterhgerr(err): |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
292 return hgcommand(hgcmd, hgenv) |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
293 |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
294 # Fall back to trying the local hg installation. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
295 hgenv = localhgenv() |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
296 hgcmd = [sys.executable, 'hg'] |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
297 try: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
298 retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
299 except EnvironmentError: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
300 retcode = -1 |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
301 if retcode == 0 and not filterhgerr(err): |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
302 return hgcommand(hgcmd, hgenv) |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
303 |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
304 raise SystemExit('Unable to find a working hg binary to extract the ' |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
305 'version from the repository tags') |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
306 |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
307 def localhgenv(): |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
308 """Get an environment dictionary to use for invoking or importing |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
309 mercurial from the local repository.""" |
33112
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
310 # Execute hg out of this directory with a custom environment which takes |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
311 # care to not use any hgrc files and do no localization. |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
312 env = {'HGMODULEPOLICY': 'py', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
313 'HGRCPATH': '', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
314 'LANGUAGE': 'C', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
315 'PATH': ''} # make pypi modules that use os.environ['PATH'] happy |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
316 if 'LD_LIBRARY_PATH' in os.environ: |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
317 env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH'] |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
318 if 'SystemRoot' in os.environ: |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
319 # SystemRoot is required by Windows to load various DLLs. See: |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
320 # https://bugs.python.org/issue13524#msg148850 |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
321 env['SystemRoot'] = os.environ['SystemRoot'] |
33117 | 322 return env |
33112
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
323 |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
324 version = '' |
15367
b357a972d6cd
setup: set env global earlier (3073)
Matt Mackall <mpm@selenic.com>
parents:
15215
diff
changeset
|
325 |
8547
548fd7a05373
setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents:
8494
diff
changeset
|
326 if os.path.isdir('.hg'): |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
327 hg = findhg() |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
328 cmd = ['log', '-r', '.', '--template', '{tags}\n'] |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
329 numerictags = [t for t in sysstr(hg.run(cmd)).split() if t[0:1].isdigit()] |
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
330 hgid = sysstr(hg.run(['id', '-i'])).strip() |
33110
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
331 if not hgid: |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
332 # Bail out if hg is having problems interacting with this repository, |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
333 # rather than falling through and producing a bogus version number. |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
334 # Continuing with an invalid version number will break extensions |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
335 # that define minimumhgversion. |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
336 raise SystemExit('Unable to determine hg version from local repository') |
17709
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
337 if numerictags: # tag(s) found |
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
338 version = numerictags[-1] |
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
339 if hgid.endswith('+'): # propagate the dirty status to the tag |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
340 version += '+' |
17709
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
341 else: # no tag found |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
342 ltagcmd = ['parents', '--template', '{latesttag}'] |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
343 ltag = sysstr(hg.run(ltagcmd)) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
344 changessincecmd = ['log', '-T', 'x\n', '-r', "only(.,'%s')" % ltag] |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
345 changessince = len(hg.run(changessincecmd).splitlines()) |
23647
eb55e09202c8
setup: use changes since latest tag instead of just distance
Siddharth Agarwal <sid0@fb.com>
parents:
23646
diff
changeset
|
346 version = '%s+%s-%s' % (ltag, changessince, hgid) |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
347 if version.endswith('+'): |
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
348 version += time.strftime('%Y%m%d') |
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
349 elif os.path.exists('.hg_archival.txt'): |
10124
08384d8777a4
setup.py: keep Python 2.3 compatibility
Martin Geisler <mg@lazybytes.net>
parents:
10120
diff
changeset
|
350 kw = dict([[t.strip() for t in l.split(':', 1)] |
08384d8777a4
setup.py: keep Python 2.3 compatibility
Martin Geisler <mg@lazybytes.net>
parents:
10120
diff
changeset
|
351 for l in open('.hg_archival.txt')]) |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
352 if 'tag' in kw: |
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27374
diff
changeset
|
353 version = kw['tag'] |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
354 elif 'latesttag' in kw: |
23646
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
355 if 'changessincelatesttag' in kw: |
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
356 version = '%(latesttag)s+%(changessincelatesttag)s-%(node).12s' % kw |
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
357 else: |
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
358 version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw |
8547
548fd7a05373
setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents:
8494
diff
changeset
|
359 else: |
9615
f51d1822d6fd
setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents:
9539
diff
changeset
|
360 version = kw.get('node', '')[:12] |
7632 | 361 |
8548
3ccbe42ff72f
setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
8547
diff
changeset
|
362 if version: |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
363 versionb = version |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
364 if not isinstance(versionb, bytes): |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
365 versionb = versionb.encode('ascii') |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
366 |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
367 write_if_changed('mercurial/__version__.py', b''.join([ |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
368 b'# this file is autogenerated by setup.py\n' |
38207
db9d1dd01bf0
setup: write version constant as bytes literal
Yuya Nishihara <yuya@tcha.org>
parents:
38012
diff
changeset
|
369 b'version = b"%s"\n' % versionb, |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
370 ])) |
8493
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
371 |
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
372 try: |
28431
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
373 oldpolicy = os.environ.get('HGMODULEPOLICY', None) |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
374 os.environ['HGMODULEPOLICY'] = 'py' |
8493
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
375 from mercurial import __version__ |
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
376 version = __version__.version |
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
377 except ImportError: |
38721
dbbe45ae5ad1
setup: allow to run setup.py with python 3 without a mercurial checkout
Mike Hommey <mh@glandium.org>
parents:
38207
diff
changeset
|
378 version = b'unknown' |
28431
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
379 finally: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
380 if oldpolicy is None: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
381 del os.environ['HGMODULEPOLICY'] |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
382 else: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
383 os.environ['HGMODULEPOLICY'] = oldpolicy |
7632 | 384 |
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
385 class hgbuild(build): |
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
386 # Insert hgbuildmo first so that files in mercurial/locale/ are found |
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
387 # when build_py is run next. |
28398
712298942c82
setup: remove support for 2to3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28041
diff
changeset
|
388 sub_commands = [('build_mo', None)] + build.sub_commands |
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
389 |
15523
f9da84a950d0
setup: backout 8504699d1aa6
Matt Mackall <mpm@selenic.com>
parents:
15500
diff
changeset
|
390 class hgbuildmo(build): |
7649
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
391 |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
392 description = "build translations (.mo files)" |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
393 |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
394 def run(self): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
395 if not find_executable('msgfmt'): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
396 self.warn("could not find msgfmt executable, no translations " |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
397 "will be built") |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
398 return |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
399 |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
400 podir = 'i18n' |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
401 if not os.path.isdir(podir): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
402 self.warn("could not find %s/ directory" % podir) |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
403 return |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
404 |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
405 join = os.path.join |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
406 for po in os.listdir(podir): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
407 if not po.endswith('.po'): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
408 continue |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
409 pofile = join(podir, po) |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
410 modir = join('locale', po[:-3], 'LC_MESSAGES') |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
411 mofile = join(modir, 'hg.mo') |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
412 mobuildfile = join('mercurial', mofile) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
413 cmd = ['msgfmt', '-v', '-o', mobuildfile, pofile] |
7720
b6c2cb40e664
setup: do not use -c with msgfmt on Solaris (issue1489)
Martin Geisler <mg@daimi.au.dk>
parents:
7712
diff
changeset
|
414 if sys.platform != 'sunos5': |
b6c2cb40e664
setup: do not use -c with msgfmt on Solaris (issue1489)
Martin Geisler <mg@daimi.au.dk>
parents:
7712
diff
changeset
|
415 # msgfmt on Solaris does not know about -c |
b6c2cb40e664
setup: do not use -c with msgfmt on Solaris (issue1489)
Martin Geisler <mg@daimi.au.dk>
parents:
7712
diff
changeset
|
416 cmd.append('-c') |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
417 self.mkpath(join('mercurial', modir)) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
418 self.make_file([pofile], mobuildfile, spawn, (cmd,)) |
7649
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
419 |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
420 |
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
421 class hgdist(Distribution): |
29505
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
422 pure = False |
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
423 cffi = ispypy |
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
424 |
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
425 global_options = Distribution.global_options + \ |
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
426 [('pure', None, "use pure (slow) Python " |
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
427 "code instead of C extensions"), |
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
428 ] |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
429 |
15459
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
430 def has_ext_modules(self): |
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
431 # self.ext_modules is emptied in hgbuildpy.finalize_options which is |
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
432 # too late for some cases |
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
433 return not self.pure and Distribution.has_ext_modules(self) |
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
434 |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
435 # This is ugly as a one-liner. So use a variable. |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
436 buildextnegops = dict(getattr(build_ext, 'negative_options', {})) |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
437 buildextnegops['no-zstd'] = 'zstd' |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
438 |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
439 class hgbuildext(build_ext): |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
440 user_options = build_ext.user_options + [ |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
441 ('zstd', None, 'compile zstd bindings [default]'), |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
442 ('no-zstd', None, 'do not compile zstd bindings'), |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
443 ] |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
444 |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
445 boolean_options = build_ext.boolean_options + ['zstd'] |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
446 negative_opt = buildextnegops |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
447 |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
448 def initialize_options(self): |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
449 self.zstd = True |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
450 return build_ext.initialize_options(self) |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
451 |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
452 def build_extensions(self): |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
453 # Filter out zstd if disabled via argument. |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
454 if not self.zstd: |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
455 self.extensions = [e for e in self.extensions |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
456 if e.name != 'mercurial.zstd'] |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
457 |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
458 return build_ext.build_extensions(self) |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
459 |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
460 def build_extension(self, ext): |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
461 try: |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
462 build_ext.build_extension(self, ext) |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
463 except CCompilerError: |
12501
98f21e4d9633
setup: slight simplification
Martin Geisler <mg@lazybytes.net>
parents:
11533
diff
changeset
|
464 if not getattr(ext, 'optional', False): |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
465 raise |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
466 log.warn("Failed to build optional extension '%s' (skipping)", |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
467 ext.name) |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
468 |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
469 class hgbuildscripts(build_scripts): |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
470 def run(self): |
28041
8da94662afe5
setup: avoid procedure related to hg.exe at setup.py --pure
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
27925
diff
changeset
|
471 if os.name != 'nt' or self.distribution.pure: |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
472 return build_scripts.run(self) |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
473 |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
474 exebuilt = False |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
475 try: |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
476 self.run_command('build_hgexe') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
477 exebuilt = True |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
478 except (DistutilsError, CCompilerError): |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
479 log.warn('failed to build optional hg.exe') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
480 |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
481 if exebuilt: |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
482 # Copying hg.exe to the scripts build directory ensures it is |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
483 # installed by the install_scripts command. |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
484 hgexecommand = self.get_finalized_command('build_hgexe') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
485 dest = os.path.join(self.build_dir, 'hg.exe') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
486 self.mkpath(self.build_dir) |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
487 self.copy_file(hgexecommand.hgexepath, dest) |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
488 |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
489 # Remove hg.bat because it is redundant with hg.exe. |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
490 self.scripts.remove('contrib/win32/hg.bat') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
491 |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
492 return build_scripts.run(self) |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
493 |
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
494 class hgbuildpy(build_py): |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
495 def finalize_options(self): |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
496 build_py.finalize_options(self) |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
497 |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
498 if self.distribution.pure: |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
499 self.distribution.ext_modules = [] |
29505
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
500 elif self.distribution.cffi: |
30346
9cc438bf7d9a
setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents:
29833
diff
changeset
|
501 from mercurial.cffi import ( |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
502 bdiffbuild, |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
503 mpatchbuild, |
30346
9cc438bf7d9a
setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents:
29833
diff
changeset
|
504 ) |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
505 exts = [mpatchbuild.ffi.distutils_extension(), |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
506 bdiffbuild.ffi.distutils_extension()] |
29505
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
507 # cffi modules go here |
29600
7a157639b8f2
osutil: add darwin-only version of os.listdir using cffi
Maciej Fijalkowski <fijall@gmail.com>
parents:
29541
diff
changeset
|
508 if sys.platform == 'darwin': |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
509 from mercurial.cffi import osutilbuild |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
510 exts.append(osutilbuild.ffi.distutils_extension()) |
29505
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
511 self.distribution.ext_modules = exts |
12649
6c0e1aee1b19
setup: user-friendly error message if Python headers are missing
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12501
diff
changeset
|
512 else: |
18905
012780620d4f
setup: make error message for missing Python headers more helpful
Mads Kiilerich <mads@kiilerich.com>
parents:
18900
diff
changeset
|
513 h = os.path.join(get_python_inc(), 'Python.h') |
012780620d4f
setup: make error message for missing Python headers more helpful
Mads Kiilerich <mads@kiilerich.com>
parents:
18900
diff
changeset
|
514 if not os.path.exists(h): |
16683 | 515 raise SystemExit('Python headers are required to build ' |
18905
012780620d4f
setup: make error message for missing Python headers more helpful
Mads Kiilerich <mads@kiilerich.com>
parents:
18900
diff
changeset
|
516 'Mercurial but weren\'t found in %s' % h) |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
517 |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
518 def run(self): |
32655
7dab4c0cdb41
setup: do not overwrite local __modulepolicy__.py on out-of-source build
Yuya Nishihara <yuya@tcha.org>
parents:
32647
diff
changeset
|
519 basepath = os.path.join(self.build_lib, 'mercurial') |
7dab4c0cdb41
setup: do not overwrite local __modulepolicy__.py on out-of-source build
Yuya Nishihara <yuya@tcha.org>
parents:
32647
diff
changeset
|
520 self.mkpath(basepath) |
7dab4c0cdb41
setup: do not overwrite local __modulepolicy__.py on out-of-source build
Yuya Nishihara <yuya@tcha.org>
parents:
32647
diff
changeset
|
521 |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
522 if self.distribution.pure: |
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
523 modulepolicy = 'py' |
32251
a04f5c651e52
policy: relax the default for in-place build
Yuya Nishihara <yuya@tcha.org>
parents:
32233
diff
changeset
|
524 elif self.build_lib == '.': |
a04f5c651e52
policy: relax the default for in-place build
Yuya Nishihara <yuya@tcha.org>
parents:
32233
diff
changeset
|
525 # in-place build should run without rebuilding C extensions |
a04f5c651e52
policy: relax the default for in-place build
Yuya Nishihara <yuya@tcha.org>
parents:
32233
diff
changeset
|
526 modulepolicy = 'allow' |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
527 else: |
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
528 modulepolicy = 'c' |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
529 |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
530 content = b''.join([ |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
531 b'# this file is autogenerated by setup.py\n', |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
532 b'modulepolicy = b"%s"\n' % modulepolicy.encode('ascii'), |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
533 ]) |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
534 write_if_changed(os.path.join(basepath, '__modulepolicy__.py'), |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
535 content) |
27222
511a4384b033
setup: refactor handling of modules with C/Python implementations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27220
diff
changeset
|
536 |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
537 build_py.run(self) |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
538 |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
539 class buildhgextindex(Command): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
540 description = 'generate prebuilt index of hgext (for frozen package)' |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
541 user_options = [] |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
542 _indexfilename = 'hgext/__index__.py' |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
543 |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
544 def initialize_options(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
545 pass |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
546 |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
547 def finalize_options(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
548 pass |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
549 |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
550 def run(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
551 if os.path.exists(self._indexfilename): |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
552 with open(self._indexfilename, 'w') as f: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
553 f.write('# empty\n') |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
554 |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
555 # here no extension enabled, disabled() lists up everything |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
556 code = ('import pprint; from mercurial import extensions; ' |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
557 'pprint.pprint(extensions.disabled())') |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
558 returncode, out, err = runcmd([sys.executable, '-c', code], |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
559 localhgenv()) |
33111
87ee783f7299
setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents:
33110
diff
changeset
|
560 if err or returncode != 0: |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
561 raise DistutilsExecError(err) |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
562 |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
563 with open(self._indexfilename, 'w') as f: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
564 f.write('# this file is autogenerated by setup.py\n') |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
565 f.write('docs = ') |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
566 f.write(out) |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
567 |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
568 class buildhgexe(build_ext): |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
569 description = 'compile hg.exe from mercurial/exewrapper.c' |
34530
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
570 user_options = build_ext.user_options + [ |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
571 ('long-paths-support', None, 'enable support for long paths on ' |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
572 'Windows (off by default and ' |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
573 'experimental)'), |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
574 ] |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
575 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
576 LONG_PATHS_MANIFEST = """ |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
577 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
578 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
579 <application> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
580 <windowsSettings |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
581 xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
582 <ws2:longPathAware>true</ws2:longPathAware> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
583 </windowsSettings> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
584 </application> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
585 </assembly>""" |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
586 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
587 def initialize_options(self): |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
588 build_ext.initialize_options(self) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
589 self.long_paths_support = False |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
590 |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
591 def build_extensions(self): |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
592 if os.name != 'nt': |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
593 return |
17246
bf5bb38bcc7c
setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents:
17121
diff
changeset
|
594 if isinstance(self.compiler, HackedMingw32CCompiler): |
bf5bb38bcc7c
setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents:
17121
diff
changeset
|
595 self.compiler.compiler_so = self.compiler.compiler # no -mdll |
bf5bb38bcc7c
setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents:
17121
diff
changeset
|
596 self.compiler.dll_libraries = [] # no -lmsrvc90 |
29020
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
597 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
598 # Different Python installs can have different Python library |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
599 # names. e.g. the official CPython distribution uses pythonXY.dll |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
600 # and MinGW uses libpythonX.Y.dll. |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
601 _kernel32 = ctypes.windll.kernel32 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
602 _kernel32.GetModuleFileNameA.argtypes = [ctypes.c_void_p, |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
603 ctypes.c_void_p, |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
604 ctypes.c_ulong] |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
605 _kernel32.GetModuleFileNameA.restype = ctypes.c_ulong |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
606 size = 1000 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
607 buf = ctypes.create_string_buffer(size + 1) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
608 filelen = _kernel32.GetModuleFileNameA(sys.dllhandle, ctypes.byref(buf), |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
609 size) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
610 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
611 if filelen > 0 and filelen != size: |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
612 dllbasename = os.path.basename(buf.value) |
39608
ec68135a8935
py3: add b'' to some setup.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39572
diff
changeset
|
613 if not dllbasename.lower().endswith(b'.dll'): |
29020
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
614 raise SystemExit('Python DLL does not end with .dll: %s' % |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
615 dllbasename) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
616 pythonlib = dllbasename[:-4] |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
617 else: |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
618 log.warn('could not determine Python DLL filename; ' |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
619 'assuming pythonXY') |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
620 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
621 hv = sys.hexversion |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
622 pythonlib = 'python%d%d' % (hv >> 24, (hv >> 16) & 0xff) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
623 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
624 log.info('using %s as Python library name' % pythonlib) |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
625 with open('mercurial/hgpythonlib.h', 'wb') as f: |
39608
ec68135a8935
py3: add b'' to some setup.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39572
diff
changeset
|
626 f.write(b'/* this file is autogenerated by setup.py */\n') |
ec68135a8935
py3: add b'' to some setup.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39572
diff
changeset
|
627 f.write(b'#define HGPYTHONLIB "%s"\n' % pythonlib) |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
628 objects = self.compiler.compile(['mercurial/exewrapper.c'], |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
629 output_dir=self.build_temp) |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
630 dir = os.path.dirname(self.get_ext_fullpath('dummy')) |
34530
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
631 self.hgtarget = os.path.join(dir, 'hg') |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
632 self.compiler.link_executable(objects, self.hgtarget, |
17732
93d97a212559
exewrapper: adapt for legacy HackableMercurial
Adrian Buehlmann <adrian@cadifra.com>
parents:
17709
diff
changeset
|
633 libraries=[], |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
634 output_dir=self.build_temp) |
34530
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
635 if self.long_paths_support: |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
636 self.addlongpathsmanifest() |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
637 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
638 def addlongpathsmanifest(self): |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
639 """Add manifest pieces so that hg.exe understands long paths |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
640 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
641 This is an EXPERIMENTAL feature, use with care. |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
642 To enable long paths support, one needs to do two things: |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
643 - build Mercurial with --long-paths-support option |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
644 - change HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\ |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
645 LongPathsEnabled to have value 1. |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
646 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
647 Please ignore 'warning 81010002: Unrecognized Element "longPathAware"'; |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
648 it happens because Mercurial uses mt.exe circa 2008, which is not |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
649 yet aware of long paths support in the manifest (I think so at least). |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
650 This does not stop mt.exe from embedding/merging the XML properly. |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
651 |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
652 Why resource #1 should be used for .exe manifests? I don't know and |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
653 wasn't able to find an explanation for mortals. But it seems to work. |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
654 """ |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
655 exefname = self.compiler.executable_filename(self.hgtarget) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
656 fdauto, manfname = tempfile.mkstemp(suffix='.hg.exe.manifest') |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
657 os.close(fdauto) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
658 with open(manfname, 'w') as f: |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
659 f.write(self.LONG_PATHS_MANIFEST) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
660 log.info("long paths manifest is written to '%s'" % manfname) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
661 inputresource = '-inputresource:%s;#1' % exefname |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
662 outputresource = '-outputresource:%s;#1' % exefname |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
663 log.info("running mt.exe to update hg.exe's manifest in-place") |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
664 # supplying both -manifest and -inputresource to mt.exe makes |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
665 # it merge the embedded and supplied manifests in the -outputresource |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
666 self.spawn(['mt.exe', '-nologo', '-manifest', manfname, |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
667 inputresource, outputresource]) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
668 log.info("done updating hg.exe's manifest") |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
669 os.remove(manfname) |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
670 |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
671 @property |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
672 def hgexepath(self): |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
673 dir = os.path.dirname(self.get_ext_fullpath('dummy')) |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
674 return os.path.join(self.build_temp, dir, 'hg.exe') |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
675 |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
676 class hginstall(install): |
32725
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
677 |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
678 user_options = install.user_options + [ |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
679 ('old-and-unmanageable', None, |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
680 'noop, present for eggless setuptools compat'), |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
681 ('single-version-externally-managed', None, |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
682 'noop, present for eggless setuptools compat'), |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
683 ] |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
684 |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
685 # Also helps setuptools not be sad while we refuse to create eggs. |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
686 single_version_externally_managed = True |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
687 |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
688 def get_sub_commands(self): |
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
689 # Screen out egg related commands to prevent egg generation. But allow |
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
690 # mercurial.egg-info generation, since that is part of modern |
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
691 # packaging. |
33589
a0bfcd08f5fe
setup: drop use of set literal so parsable on Python 2.6
Yuya Nishihara <yuya@tcha.org>
parents:
33588
diff
changeset
|
692 excl = set(['bdist_egg']) |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
693 return filter(lambda x: x not in excl, install.get_sub_commands(self)) |
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
694 |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
695 class hginstalllib(install_lib): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
696 ''' |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
697 This is a specialization of install_lib that replaces the copy_file used |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
698 there so that it supports setting the mode of files after copying them, |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
699 instead of just preserving the mode that the files originally had. If your |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
700 system has a umask of something like 027, preserving the permissions when |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
701 copying will lead to a broken install. |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
702 |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
703 Note that just passing keep_permissions=False to copy_file would be |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
704 insufficient, as it might still be applying a umask. |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
705 ''' |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
706 |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
707 def run(self): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
708 realcopyfile = file_util.copy_file |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
709 def copyfileandsetmode(*args, **kwargs): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
710 src, dst = args[0], args[1] |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
711 dst, copied = realcopyfile(*args, **kwargs) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
712 if copied: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
713 st = os.stat(src) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
714 # Persist executable bit (apply it to group and other if user |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
715 # has it) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
716 if st[stat.ST_MODE] & stat.S_IXUSR: |
24941
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
717 setmode = int('0755', 8) |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
718 else: |
24941
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
719 setmode = int('0644', 8) |
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
720 m = stat.S_IMODE(st[stat.ST_MODE]) |
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
721 m = (m & ~int('0777', 8)) | setmode |
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
722 os.chmod(dst, m) |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
723 file_util.copy_file = copyfileandsetmode |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
724 try: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
725 install_lib.run(self) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
726 finally: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
727 file_util.copy_file = realcopyfile |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
728 |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
729 class hginstallscripts(install_scripts): |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
730 ''' |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
731 This is a specialization of install_scripts that replaces the @LIBDIR@ with |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
732 the configured directory for modules. If possible, the path is made relative |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
733 to the directory for scripts. |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
734 ''' |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
735 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
736 def initialize_options(self): |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
737 install_scripts.initialize_options(self) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
738 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
739 self.install_lib = None |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
740 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
741 def finalize_options(self): |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
742 install_scripts.finalize_options(self) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
743 self.set_undefined_options('install', |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
744 ('install_lib', 'install_lib')) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
745 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
746 def run(self): |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
747 install_scripts.run(self) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
748 |
27269
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
749 # It only makes sense to replace @LIBDIR@ with the install path if |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
750 # the install path is known. For wheels, the logic below calculates |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
751 # the libdir to be "../..". This is because the internal layout of a |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
752 # wheel archive looks like: |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
753 # |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
754 # mercurial-3.6.1.data/scripts/hg |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
755 # mercurial/__init__.py |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
756 # |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
757 # When installing wheels, the subdirectories of the "<pkg>.data" |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
758 # directory are translated to system local paths and files therein |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
759 # are copied in place. The mercurial/* files are installed into the |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
760 # site-packages directory. However, the site-packages directory |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
761 # isn't known until wheel install time. This means we have no clue |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
762 # at wheel generation time what the installed site-packages directory |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
763 # will be. And, wheels don't appear to provide the ability to register |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
764 # custom code to run during wheel installation. This all means that |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
765 # we can't reliably set the libdir in wheels: the default behavior |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
766 # of looking in sys.path must do. |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
767 |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
768 if (os.path.splitdrive(self.install_dir)[0] != |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
769 os.path.splitdrive(self.install_lib)[0]): |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
770 # can't make relative paths from one drive to another, so use an |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
771 # absolute path instead |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
772 libdir = self.install_lib |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
773 else: |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
774 common = os.path.commonprefix((self.install_dir, self.install_lib)) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
775 rest = self.install_dir[len(common):] |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
776 uplevel = len([n for n in os.path.split(rest) if n]) |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
777 |
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27374
diff
changeset
|
778 libdir = uplevel * ('..' + os.sep) + self.install_lib[len(common):] |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
779 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
780 for outfile in self.outfiles: |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
781 with open(outfile, 'rb') as fp: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
782 data = fp.read() |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
783 |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
784 # skip binary files |
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
785 if b'\0' in data: |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
786 continue |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
787 |
27269
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
788 # During local installs, the shebang will be rewritten to the final |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
789 # install path. During wheel packaging, the shebang has a special |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
790 # value. |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
791 if data.startswith(b'#!python'): |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
792 log.info('not rewriting @LIBDIR@ in %s because install path ' |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
793 'not known' % outfile) |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
794 continue |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
795 |
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
796 data = data.replace(b'@LIBDIR@', libdir.encode(libdir_escape)) |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
797 with open(outfile, 'wb') as fp: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
798 fp.write(data) |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
799 |
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
800 cmdclass = {'build': hgbuild, |
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
801 'build_mo': hgbuildmo, |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
802 'build_ext': hgbuildext, |
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
803 'build_py': hgbuildpy, |
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
804 'build_scripts': hgbuildscripts, |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
805 'build_hgextindex': buildhgextindex, |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
806 'install': hginstall, |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
807 'install_lib': hginstalllib, |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
808 'install_scripts': hginstallscripts, |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
809 'build_hgexe': buildhgexe, |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
810 } |
3238
3dba9ec89164
Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2402
diff
changeset
|
811 |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
812 packages = ['mercurial', |
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
813 'mercurial.cext', |
32506
2dcb3d52ef41
cffi: put compiled modules into mercurial.cffi package
Yuya Nishihara <yuya@tcha.org>
parents:
32505
diff
changeset
|
814 'mercurial.cffi', |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
815 'mercurial.hgweb', |
27222
511a4384b033
setup: refactor handling of modules with C/Python implementations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27220
diff
changeset
|
816 'mercurial.pure', |
34397 | 817 'mercurial.thirdparty', |
818 'mercurial.thirdparty.attr', | |
37130
a1d2d0420e22
setup: install cbor packages
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36764
diff
changeset
|
819 'mercurial.thirdparty.cbor', |
a1d2d0420e22
setup: install cbor packages
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36764
diff
changeset
|
820 'mercurial.thirdparty.cbor.cbor2', |
37180
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
821 'mercurial.thirdparty.zope', |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
822 'mercurial.thirdparty.zope.interface', |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36426
diff
changeset
|
823 'mercurial.utils', |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
39210
diff
changeset
|
824 'mercurial.revlogutils', |
39772
ae531f5e583c
testing: add interface unit tests for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39613
diff
changeset
|
825 'mercurial.testing', |
28625
776fd2e2cf5a
setup: add missing hgext.fsmonitor
Sean Farley <sean@farley.io>
parents:
28609
diff
changeset
|
826 'hgext', 'hgext.convert', 'hgext.fsmonitor', |
39210
1ddb296e0dee
fastannotate: initial import from Facebook's hg-experimental
Augie Fackler <augie@google.com>
parents:
38721
diff
changeset
|
827 'hgext.fastannotate', |
37305
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
828 'hgext.fsmonitor.pywatchman', |
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
829 'hgext.infinitepush', |
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
830 'hgext.highlight', |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
35774
diff
changeset
|
831 'hgext.largefiles', 'hgext.lfs', 'hgext.narrow', |
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
35774
diff
changeset
|
832 'hgext.zeroconf', 'hgext3rd', |
32420
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
32385
diff
changeset
|
833 'hgdemandimport'] |
39613
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
834 if sys.version_info[0] == 2: |
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
835 packages.extend(['mercurial.thirdparty.concurrent', |
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
836 'mercurial.thirdparty.concurrent.futures']) |
10521
bde1bb250fc2
Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10400
diff
changeset
|
837 |
29444
284d742e5611
internals: move the bitmanipulation routines into its own file
Maciej Fijalkowski <fijall@gmail.com>
parents:
29020
diff
changeset
|
838 common_depends = ['mercurial/bitmanipulation.h', |
284d742e5611
internals: move the bitmanipulation routines into its own file
Maciej Fijalkowski <fijall@gmail.com>
parents:
29020
diff
changeset
|
839 'mercurial/compat.h', |
32385
34bd3cd28dcb
cext: move util.h to cext tree
Yuya Nishihara <yuya@tcha.org>
parents:
32378
diff
changeset
|
840 'mercurial/cext/util.h'] |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
841 common_include_dirs = ['mercurial'] |
19724
2b2a2e858fb7
setup: check if mercurial/util.h has been modified
Wei, Elson <elson.wei@gmail.com>
parents:
18905
diff
changeset
|
842 |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
843 osutil_cflags = [] |
25073
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
844 osutil_ldflags = [] |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
845 |
31561 | 846 # platform specific macros |
31622
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
847 for plat, func in [('bsd', 'setproctitle')]: |
31561 | 848 if re.search(plat, sys.platform) and hasfunction(new_compiler(), func): |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
849 osutil_cflags.append('-DHAVE_%s' % func.upper()) |
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
850 |
31596
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
851 for plat, macro, code in [ |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
852 ('bsd|darwin', 'BSD_STATFS', ''' |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
853 #include <sys/param.h> |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
854 #include <sys/mount.h> |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
855 int main() { struct statfs s; return sizeof(s.f_fstypename); } |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
856 '''), |
31622
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
857 ('linux', 'LINUX_STATFS', ''' |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
858 #include <linux/magic.h> |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
859 #include <sys/vfs.h> |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
860 int main() { struct statfs s; return sizeof(s.f_type); } |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
861 '''), |
31596
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
862 ]: |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
863 if re.search(plat, sys.platform) and cancompile(new_compiler(), code): |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
864 osutil_cflags.append('-DHAVE_%s' % macro) |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
865 |
25073
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
866 if sys.platform == 'darwin': |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
867 osutil_ldflags += ['-framework', 'ApplicationServices'] |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
868 |
36675 | 869 xdiff_srcs = [ |
870 'mercurial/thirdparty/xdiff/xdiffi.c', | |
871 'mercurial/thirdparty/xdiff/xprepare.c', | |
872 'mercurial/thirdparty/xdiff/xutils.c', | |
873 ] | |
874 | |
875 xdiff_headers = [ | |
876 'mercurial/thirdparty/xdiff/xdiff.h', | |
877 'mercurial/thirdparty/xdiff/xdiffi.h', | |
878 'mercurial/thirdparty/xdiff/xinclude.h', | |
879 'mercurial/thirdparty/xdiff/xmacros.h', | |
880 'mercurial/thirdparty/xdiff/xprepare.h', | |
881 'mercurial/thirdparty/xdiff/xtypes.h', | |
882 'mercurial/thirdparty/xdiff/xutils.h', | |
883 ] | |
884 | |
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
885 extmodules = [ |
32368
008d37c4d783
base85: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32367
diff
changeset
|
886 Extension('mercurial.cext.base85', ['mercurial/cext/base85.c'], |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
887 include_dirs=common_include_dirs, |
19724
2b2a2e858fb7
setup: check if mercurial/util.h has been modified
Wei, Elson <elson.wei@gmail.com>
parents:
18905
diff
changeset
|
888 depends=common_depends), |
32369
3b88a7fa97d8
bdiff: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32368
diff
changeset
|
889 Extension('mercurial.cext.bdiff', ['mercurial/bdiff.c', |
36675 | 890 'mercurial/cext/bdiff.c'] + xdiff_srcs, |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
891 include_dirs=common_include_dirs, |
36675 | 892 depends=common_depends + ['mercurial/bdiff.h'] + xdiff_headers), |
32371
151cc3b3d799
mpatch: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32370
diff
changeset
|
893 Extension('mercurial.cext.mpatch', ['mercurial/mpatch.c', |
151cc3b3d799
mpatch: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32370
diff
changeset
|
894 'mercurial/cext/mpatch.c'], |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
895 include_dirs=common_include_dirs, |
19724
2b2a2e858fb7
setup: check if mercurial/util.h has been modified
Wei, Elson <elson.wei@gmail.com>
parents:
18905
diff
changeset
|
896 depends=common_depends), |
33757
e9996bd7203f
cext: split character encoding functions to new compilation unit
Yuya Nishihara <yuya@tcha.org>
parents:
33600
diff
changeset
|
897 Extension('mercurial.cext.parsers', ['mercurial/cext/charencode.c', |
e9996bd7203f
cext: split character encoding functions to new compilation unit
Yuya Nishihara <yuya@tcha.org>
parents:
33600
diff
changeset
|
898 'mercurial/cext/dirs.c', |
32372
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32371
diff
changeset
|
899 'mercurial/cext/manifest.c', |
df448de7cf3b
parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32371
diff
changeset
|
900 'mercurial/cext/parsers.c', |
32378
7d0c69505a66
cext: extract revlog/index parsing code to own C file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32372
diff
changeset
|
901 'mercurial/cext/pathencode.c', |
7d0c69505a66
cext: extract revlog/index parsing code to own C file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32372
diff
changeset
|
902 'mercurial/cext/revlog.c'], |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
903 include_dirs=common_include_dirs, |
33758
0f4ac3b6dee4
cext: factor out header for charencode.c
Yuya Nishihara <yuya@tcha.org>
parents:
33757
diff
changeset
|
904 depends=common_depends + ['mercurial/cext/charencode.h']), |
32367
a9c71d578a1c
osutil: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32251
diff
changeset
|
905 Extension('mercurial.cext.osutil', ['mercurial/cext/osutil.c'], |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
906 include_dirs=common_include_dirs, |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
907 extra_compile_args=osutil_cflags, |
25074
0021ad4c2309
setup: integrate osutil C extension into extmodules initialization
Adrian Buehlmann <adrian@cadifra.com>
parents:
25073
diff
changeset
|
908 extra_link_args=osutil_ldflags, |
0021ad4c2309
setup: integrate osutil C extension into extmodules initialization
Adrian Buehlmann <adrian@cadifra.com>
parents:
25073
diff
changeset
|
909 depends=common_depends), |
37180
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
910 Extension( |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
911 'mercurial.thirdparty.zope.interface._zope_interface_coptimizations', [ |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
912 'mercurial/thirdparty/zope/interface/_zope_interface_coptimizations.c', |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
913 ]), |
28432
2377c4ac4eec
fsmonitor: dependencies for new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
28431
diff
changeset
|
914 Extension('hgext.fsmonitor.pywatchman.bser', |
2377c4ac4eec
fsmonitor: dependencies for new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
28431
diff
changeset
|
915 ['hgext/fsmonitor/pywatchman/bser.c']), |
5396
5105b119edd2
Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5197
diff
changeset
|
916 ] |
5105b119edd2
Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5197
diff
changeset
|
917 |
30436
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
918 sys.path.insert(0, 'contrib/python-zstandard') |
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
919 import setup_zstd |
30698
c3db3bb4699f
setup: pass named argument to setup_zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30458
diff
changeset
|
920 extmodules.append(setup_zstd.get_c_extension(name='mercurial.zstd')) |
30436
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
921 |
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
922 try: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
923 from distutils import cygwinccompiler |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
924 |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
925 # the -mno-cygwin option has been deprecated for years |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
926 mingw32compilerclass = cygwinccompiler.Mingw32CCompiler |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
927 |
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
928 class HackedMingw32CCompiler(cygwinccompiler.Mingw32CCompiler): |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
929 def __init__(self, *args, **kwargs): |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
930 mingw32compilerclass.__init__(self, *args, **kwargs) |
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
931 for i in 'compiler compiler_so linker_exe linker_so'.split(): |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
932 try: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
933 getattr(self, i).remove('-mno-cygwin') |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
934 except ValueError: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
935 pass |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
936 |
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
937 cygwinccompiler.Mingw32CCompiler = HackedMingw32CCompiler |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
938 except ImportError: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
939 # the cygwinccompiler package is not available on some Python |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
940 # distributions like the ones from the optware project for Synology |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
941 # DiskStation boxes |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
942 class HackedMingw32CCompiler(object): |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
943 pass |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
944 |
32782
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
945 if os.name == 'nt': |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
946 # Allow compiler/linker flags to be added to Visual Studio builds. Passing |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
947 # extra_link_args to distutils.extensions.Extension() doesn't have any |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
948 # effect. |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
949 from distutils import msvccompiler |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
950 |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
951 msvccompilerclass = msvccompiler.MSVCCompiler |
32782
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
952 |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
953 class HackedMSVCCompiler(msvccompiler.MSVCCompiler): |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
954 def initialize(self): |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
955 msvccompilerclass.initialize(self) |
32782
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
956 # "warning LNK4197: export 'func' specified multiple times" |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
957 self.ldflags_shared.append('/ignore:4197') |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
958 self.ldflags_shared_debug.append('/ignore:4197') |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
959 |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
960 msvccompiler.MSVCCompiler = HackedMSVCCompiler |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
961 |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
962 packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo', |
22575
d7f7f1860f00
ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents:
22358
diff
changeset
|
963 'help/*.txt', |
27374
7a70ae647e54
setup.py: package internals help files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27348
diff
changeset
|
964 'help/internals/*.txt', |
23142
c4ce077588d0
config: introduce "built-in" default configuration settings in default.d
Mads Kiilerich <madski@unity3d.com>
parents:
22640
diff
changeset
|
965 'default.d/*.rc', |
22575
d7f7f1860f00
ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents:
22358
diff
changeset
|
966 'dummycert.pem']} |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
967 |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
968 def ordinarypath(p): |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
969 return p and p[0] != '.' and p[-1] != '~' |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
970 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
971 for root in ('templates',): |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
972 for curdir, dirs, files in os.walk(os.path.join('mercurial', root)): |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
973 curdir = curdir.split(os.sep, 1)[1] |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
974 dirs[:] = filter(ordinarypath, dirs) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
975 for f in filter(ordinarypath, files): |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
976 f = os.path.join(curdir, f) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
977 packagedata['mercurial'].append(f) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
978 |
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
979 datafiles = [] |
31316
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
980 |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
981 # distutils expects version to be str/unicode. Converting it to |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
982 # unicode on Python 2 still works because it won't contain any |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
983 # non-ascii bytes and will be implicitly converted back to bytes |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
984 # when operated on. |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
985 assert isinstance(version, bytes) |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
986 setupversion = version.decode('ascii') |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
987 |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
988 extra = {} |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
989 |
33600
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
990 if issetuptools: |
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
991 extra['python_requires'] = supportedpy |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
992 if py2exeloaded: |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
993 extra['console'] = [ |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
994 {'script':'hg', |
35774
854a7315603e
copyright: update to 2018
Anton Shestakov <av6@dwimlabs.net>
parents:
35246
diff
changeset
|
995 'copyright':'Copyright (C) 2005-2018 Matt Mackall and others', |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
996 'product_version':version}] |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
997 # sub command of 'build' because 'py2exe' does not handle sub_commands |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
998 build.sub_commands.insert(0, ('build_hgextindex', None)) |
25409
95e042d77a5f
wix: move library.zip and all *.pyd into a lib/ folder
Steve Borho <steve@borho.org>
parents:
25089
diff
changeset
|
999 # put dlls in sub directory so that they won't pollute PATH |
95e042d77a5f
wix: move library.zip and all *.pyd into a lib/ folder
Steve Borho <steve@borho.org>
parents:
25089
diff
changeset
|
1000 extra['zipfile'] = 'lib/library.zip' |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1001 |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1002 if os.name == 'nt': |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1003 # Windows binary file versions for exe/dll files must have the |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1004 # form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535 |
39608
ec68135a8935
py3: add b'' to some setup.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39572
diff
changeset
|
1005 setupversion = version.split(b'+', 1)[0] |
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
1006 |
13583
e42d18538e1d
fix compiling of extensions for OS X and XCode 4.0
Alexander Solovyov <alexander@solovyov.net>
parents:
13400
diff
changeset
|
1007 if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'): |
33119
176030f695ca
setup: fix runcmd() usage on darwin
Adam Simpkins <simpkins@fb.com>
parents:
33117
diff
changeset
|
1008 version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[1].splitlines() |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1009 if version: |
16209
5536770b3c88
setup.py: don't call splitlines twice on the output of xcodebuild (issue3277)
Brendan Cully <brendan@kublai.com>
parents:
16187
diff
changeset
|
1010 version = version[0] |
25043
facaceeb85ac
setup: decode xcode version number on python3
Augie Fackler <augie@google.com>
parents:
25009
diff
changeset
|
1011 if sys.version_info[0] == 3: |
facaceeb85ac
setup: decode xcode version number on python3
Augie Fackler <augie@google.com>
parents:
25009
diff
changeset
|
1012 version = version.decode('utf-8') |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1013 xcode4 = (version.startswith('Xcode') and |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1014 StrictVersion(version.split()[1]) >= StrictVersion('4.0')) |
21558
8b482d49563b
setup: make Xcode 5.1 check less specific
Matt Mackall <mpm@selenic.com>
parents:
21229
diff
changeset
|
1015 xcode51 = re.match(r'^Xcode\s+5\.1', version) is not None |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1016 else: |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1017 # xcodebuild returns empty on OS X Lion with XCode 4.3 not |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1018 # installed, but instead with only command-line tools. Assume |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1019 # that only happens on >= Lion, thus no PPC support. |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1020 xcode4 = True |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1021 xcode51 = False |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1022 |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1023 # XCode 4.0 dropped support for ppc architecture, which is hardcoded in |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1024 # distutils.sysconfig |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1025 if xcode4: |
14324
d3a49a52f117
Hardcoding ARCHFLAGS breaks the build against fink's python
Brendan Cully <brendan@kublai.com>
parents:
14295
diff
changeset
|
1026 os.environ['ARCHFLAGS'] = '' |
13583
e42d18538e1d
fix compiling of extensions for OS X and XCode 4.0
Alexander Solovyov <alexander@solovyov.net>
parents:
13400
diff
changeset
|
1027 |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1028 # XCode 5.1 changes clang such that it now fails to compile if the |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1029 # -mno-fused-madd flag is passed, but the version of Python shipped with |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1030 # OS X 10.9 Mavericks includes this flag. This causes problems in all |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1031 # C extension modules, and a bug has been filed upstream at |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1032 # http://bugs.python.org/issue21244. We also need to patch this here |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1033 # so Mercurial can continue to compile in the meantime. |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1034 if xcode51: |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1035 cflags = get_config_var('CFLAGS') |
21839
f266be73f764
setup: fixed for Pythons which don't have a CFLAGS
Alex Gaynor <alex.gaynor@gmail.com>
parents:
21229
diff
changeset
|
1036 if cflags and re.search(r'-mno-fused-madd\b', cflags) is not None: |
21038
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1037 os.environ['CFLAGS'] = ( |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1038 os.environ.get('CFLAGS', '') + ' -Qunused-arguments') |
440fbe52b4a8
setup.py: fix C extension compilation issue with OS X 10.9 and Xcode 5.1
Kent Frazier <kentfrazier@gmail.com>
parents:
20697
diff
changeset
|
1039 |
1977
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1873
diff
changeset
|
1040 setup(name='mercurial', |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1041 version=setupversion, |
18753
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1042 author='Matt Mackall and many others', |
30888
561a019c0268
misc: replace domain of mercurial ML address by mercurial-scm.org
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30698
diff
changeset
|
1043 author_email='mercurial@mercurial-scm.org', |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
25409
diff
changeset
|
1044 url='https://mercurial-scm.org/', |
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
25409
diff
changeset
|
1045 download_url='https://mercurial-scm.org/release/', |
18753
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1046 description=('Fast scalable distributed SCM (revision control, version ' |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1047 'control) system'), |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1048 long_description=('Mercurial is a distributed SCM tool written in Python.' |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1049 ' It is used by a number of large projects that require' |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1050 ' fast, reliable distributed revision control, such as ' |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1051 'Mozilla.'), |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1052 license='GNU GPLv2 or any later version', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1053 classifiers=[ |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1054 'Development Status :: 6 - Mature', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1055 'Environment :: Console', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1056 'Intended Audience :: Developers', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1057 'Intended Audience :: System Administrators', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1058 'License :: OSI Approved :: GNU General Public License (GPL)', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1059 'Natural Language :: Danish', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1060 'Natural Language :: English', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1061 'Natural Language :: German', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1062 'Natural Language :: Italian', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1063 'Natural Language :: Japanese', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1064 'Natural Language :: Portuguese (Brazilian)', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1065 'Operating System :: Microsoft :: Windows', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1066 'Operating System :: OS Independent', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1067 'Operating System :: POSIX', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1068 'Programming Language :: C', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1069 'Programming Language :: Python', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1070 'Topic :: Software Development :: Version Control', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1071 ], |
6513
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
1072 scripts=scripts, |
6239
39cfcef4f463
Add inotify extension
Bryan O'Sullivan <bos@serpentine.com>
parents:
6009
diff
changeset
|
1073 packages=packages, |
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
1074 ext_modules=extmodules, |
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
1075 data_files=datafiles, |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1076 package_data=packagedata, |
3238
3dba9ec89164
Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2402
diff
changeset
|
1077 cmdclass=cmdclass, |
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
1078 distclass=hgdist, |
38002
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1079 options={ |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1080 'py2exe': { |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1081 'packages': [ |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1082 'hgdemandimport', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1083 'hgext', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1084 'email', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1085 # implicitly imported per module policy |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1086 # (cffi wouldn't be used as a frozen exe) |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1087 'mercurial.cext', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1088 #'mercurial.cffi', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1089 'mercurial.pure', |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1090 ], |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1091 }, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1092 'bdist_mpkg': { |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1093 'zipdist': False, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1094 'license': 'COPYING', |
38012
e5d2248dcc39
packaging: move contrib/macosx to contrib/packaging/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38002
diff
changeset
|
1095 'readme': 'contrib/packaging/macosx/Readme.html', |
e5d2248dcc39
packaging: move contrib/macosx to contrib/packaging/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38002
diff
changeset
|
1096 'welcome': 'contrib/packaging/macosx/Welcome.html', |
38002
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1097 }, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1098 }, |
3893 | 1099 **extra) |