author | Raphaël Gomès <rgomes@octobus.net> |
Wed, 17 Jul 2019 11:37:43 +0200 | |
changeset 42750 | 849e744b925d |
parent 42459 | 85041e2b69c7 |
child 42767 | 624d86262e14 |
permissions | -rw-r--r-- |
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 |
42457
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
35 |
import sysconfig |
11532
f3732ab1149f
setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents:
11468
diff
changeset
|
36 |
if sys.version_info[0] >= 3: |
20696
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
37 |
printf = eval('print') |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
38 |
libdir_escape = 'unicode_escape' |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
39 |
def sysstr(s): |
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
40 |
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
|
41 |
else: |
20696
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
42 |
libdir_escape = 'string_escape' |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
43 |
def printf(*args, **kwargs): |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
44 |
f = kwargs.get('file', sys.stdout) |
77ab0abb08a0
setup: handle more invalid python3 syntax
Augie Fackler <raf@durin42.com>
parents:
20687
diff
changeset
|
45 |
end = kwargs.get('end', '\n') |
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
46 |
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
|
47 |
def sysstr(s): |
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
48 |
return s |
11532
f3732ab1149f
setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents:
11468
diff
changeset
|
49 |
|
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
|
50 |
# 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
|
51 |
# 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
|
52 |
# 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
|
53 |
# 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
|
54 |
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
|
55 |
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
|
56 |
'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
|
57 |
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
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
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
|
62 |
'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
|
63 |
'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
|
64 |
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 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
|
66 |
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
|
67 |
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
|
68 |
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
|
69 |
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
|
70 |
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
|
71 |
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
|
72 |
{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
|
73 |
""".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
|
74 |
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
|
75 |
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
|
76 |
|
36386
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
77 |
# 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
|
78 |
# 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
|
79 |
# 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
|
80 |
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
|
81 |
badpython = True |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
82 |
|
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
83 |
# 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
|
84 |
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
|
85 |
badpython = False |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
86 |
|
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
87 |
if badpython: |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
88 |
error = """ |
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. |
42175
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
90 |
|
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
91 |
Mercurial currently has beta support for Python 3 and use of Python 2.7 is |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
92 |
recommended for the best experience. |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
93 |
|
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
94 |
Please re-run with Python 2.7 for a faster, less buggy experience. |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
95 |
|
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
96 |
If you would like to beta test Mercurial with Python 3, this error can |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
97 |
be suppressed by defining the HGPYTHON3 environment variable when invoking |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
98 |
this command. No special environment variables or configuration changes are |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
99 |
necessary to run `hg` with Python 3. |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
100 |
|
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
101 |
See https://www.mercurial-scm.org/wiki/Python3 for more on Mercurial's |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
102 |
Python 3 support. |
cd1bede340b0
setup: tweak error message for Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42174
diff
changeset
|
103 |
""".format(py='.'.join('%d' % x for x in sys.version_info[0:2])) |
36386
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
104 |
|
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
105 |
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
|
106 |
sys.exit(1) |
fb39f6a8a864
setup: only allow Python 3 from a source checkout (issue5804)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35774
diff
changeset
|
107 |
|
42457
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
108 |
if sys.version_info[0] >= 3: |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
109 |
DYLIB_SUFFIX = sysconfig.get_config_vars()['EXT_SUFFIX'] |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
110 |
else: |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
111 |
# deprecated in Python 3 |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
112 |
DYLIB_SUFFIX = sysconfig.get_config_vars()['SO'] |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
113 |
|
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
114 |
# Solaris Python packaging brain damage |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
115 |
try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
116 |
import hashlib |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
117 |
sha = hashlib.sha1() |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
118 |
except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
119 |
try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
120 |
import sha |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
121 |
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
|
122 |
except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
123 |
raise SystemExit( |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
124 |
"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
|
125 |
|
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
126 |
try: |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
127 |
import zlib |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
128 |
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
|
129 |
except ImportError: |
7558
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
130 |
raise SystemExit( |
dc211ad8d681
setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents:
7081
diff
changeset
|
131 |
"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
|
132 |
|
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
133 |
# 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
|
134 |
isironpython = False |
10761
16a13fdb4b36
setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10521
diff
changeset
|
135 |
try: |
16683 | 136 |
isironpython = (platform.python_implementation() |
137 |
.lower().find("ironpython") != -1) |
|
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16683
diff
changeset
|
138 |
except AttributeError: |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
139 |
pass |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
140 |
|
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
141 |
if isironpython: |
15492
36f076d03b34
setup: make script executable with python3
Simon Heimberg <simohe@besonet.ch>
parents:
15460
diff
changeset
|
142 |
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
|
143 |
else: |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
144 |
try: |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
145 |
import bz2 |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
146 |
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
|
147 |
except ImportError: |
14295
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
148 |
raise SystemExit( |
bb7e3b3e6e11
setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents:
14243
diff
changeset
|
149 |
"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
|
150 |
|
24192
390410a6545d
setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents:
24191
diff
changeset
|
151 |
ispypy = "PyPy" in sys.version |
390410a6545d
setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents:
24191
diff
changeset
|
152 |
|
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
153 |
hgrustext = os.environ.get('HGWITHRUSTEXT') |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
154 |
# TODO record it for proper rebuild upon changes |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
155 |
# (see mercurial/__modulepolicy__.py) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
156 |
if hgrustext != 'cpython' and hgrustext is not None: |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
157 |
hgrustext = 'direct-ffi' |
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
158 |
|
29020
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
159 |
import ctypes |
40966
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
160 |
import errno |
33591
ee11d18fcd3c
setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents:
33589
diff
changeset
|
161 |
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
|
162 |
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
|
163 |
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
|
164 |
import tempfile |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
165 |
from distutils import log |
31289
718a57e95a89
setup: use setuptools on Windows (issue5400)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30907
diff
changeset
|
166 |
# 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
|
167 |
# 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
|
168 |
# 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
|
169 |
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
|
170 |
if issetuptools: |
26600
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
171 |
from setuptools import setup |
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
172 |
else: |
e8497889edab
setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents:
26421
diff
changeset
|
173 |
from distutils.core import setup |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
174 |
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
|
175 |
from distutils.core import Command, Extension |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
176 |
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
|
177 |
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
|
178 |
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
|
179 |
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
|
180 |
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
|
181 |
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
|
182 |
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
|
183 |
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
|
184 |
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
|
185 |
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
|
186 |
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
|
187 |
CCompilerError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
188 |
DistutilsError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
189 |
DistutilsExecError, |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
190 |
) |
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
|
191 |
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
|
192 |
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
|
193 |
|
40446
b6bc2293cdf3
setup: explain to distutils how we write rc versions
"Paul Morelle <paul.morelle@octobus.net"
parents:
40397
diff
changeset
|
194 |
# Explain to distutils.StrictVersion how our release candidates are versionned |
b6bc2293cdf3
setup: explain to distutils how we write rc versions
"Paul Morelle <paul.morelle@octobus.net"
parents:
40397
diff
changeset
|
195 |
StrictVersion.version_re = re.compile(r'^(\d+)\.(\d+)(\.(\d+))?-?(rc(\d+))?$') |
b6bc2293cdf3
setup: explain to distutils how we write rc versions
"Paul Morelle <paul.morelle@octobus.net"
parents:
40397
diff
changeset
|
196 |
|
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
197 |
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
|
198 |
"""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
|
199 |
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
|
200 |
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
|
201 |
current = fh.read() |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
202 |
else: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
203 |
current = b'' |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
204 |
|
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
205 |
if current != content: |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
206 |
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
|
207 |
fh.write(content) |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
208 |
|
6513
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
209 |
scripts = ['hg'] |
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
210 |
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
|
211 |
# 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
|
212 |
scripts.append('contrib/win32/hg.bat') |
3893 | 213 |
|
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
214 |
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
|
215 |
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
|
216 |
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
|
217 |
try: |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
218 |
fname = os.path.join(tmpdir, 'testcomp.c') |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
219 |
f = open(fname, 'w') |
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
220 |
f.write(code) |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
221 |
f.close() |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
222 |
# 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
|
223 |
# from the compiler. |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
224 |
# 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
|
225 |
# for a function on Windows. |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
226 |
devnull = open('/dev/null', 'w') |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
227 |
oldstderr = os.dup(sys.stderr.fileno()) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
228 |
os.dup2(devnull.fileno(), sys.stderr.fileno()) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
229 |
objects = cc.compile([fname], output_dir=tmpdir) |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
230 |
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
|
231 |
return True |
25089
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
232 |
except Exception: |
c6427cd45760
setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
25074
diff
changeset
|
233 |
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
|
234 |
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
|
235 |
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
|
236 |
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
|
237 |
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
|
238 |
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
|
239 |
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
|
240 |
|
31559
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
241 |
# 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
|
242 |
# that actually removes its temporary files. |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
243 |
def hasfunction(cc, funcname): |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
244 |
code = 'int main(void) { %s(); }\n' % funcname |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
245 |
return cancompile(cc, code) |
9639ff4a93ae
setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents:
31316
diff
changeset
|
246 |
|
31560
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
247 |
def hasheader(cc, headername): |
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
248 |
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
|
249 |
return cancompile(cc, code) |
5a0460219649
setup: add a function to test header files
Jun Wu <quark@fb.com>
parents:
31559
diff
changeset
|
250 |
|
1283
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
251 |
# py2exe needs to be installed to work |
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
252 |
try: |
1294
372971e1c40d
Clean up whitespace damage.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1284
diff
changeset
|
253 |
import py2exe |
22198
77142de48ae4
cleanup: make sure we always access members of imported modules
Mads Kiilerich <madski@unity3d.com>
parents:
21840
diff
changeset
|
254 |
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
|
255 |
py2exeloaded = True |
15527
9926aab3d0b5
setup: fix py2exe generation broken by c3a6ec304055 (issue3116)
Pascal Quantin <pascal.quantin@gmail.com>
parents:
15523
diff
changeset
|
256 |
# 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
|
257 |
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
|
258 |
except ImportError: |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
259 |
py2exeloaded = False |
1283
f5faab34f32e
Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents:
575
diff
changeset
|
260 |
|
41850
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
261 |
def runcmd(cmd, env, cwd=None): |
32886
19b0fd4b5570
plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents:
32782
diff
changeset
|
262 |
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
41850
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
263 |
stderr=subprocess.PIPE, env=env, cwd=cwd) |
32886
19b0fd4b5570
plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents:
32782
diff
changeset
|
264 |
out, err = p.communicate() |
33111
87ee783f7299
setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents:
33110
diff
changeset
|
265 |
return p.returncode, out, err |
13636
4bfff063aed6
setup: fix mac build broken by e42d18538e1d
Jon M. Dugan <jdugan@x1024.net>
parents:
13594
diff
changeset
|
266 |
|
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
267 |
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
|
268 |
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
|
269 |
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
|
270 |
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
|
271 |
|
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
272 |
def run(self, args): |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
273 |
cmd = self.cmd + args |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
274 |
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
|
275 |
err = filterhgerr(err) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
276 |
if err or returncode != 0: |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
277 |
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
|
278 |
printf(err, file=sys.stderr) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
279 |
return '' |
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
280 |
return out |
8548
3ccbe42ff72f
setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
8547
diff
changeset
|
281 |
|
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
282 |
def filterhgerr(err): |
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
283 |
# 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
|
284 |
# 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
|
285 |
# 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
|
286 |
# 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
|
287 |
# 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
|
288 |
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
|
289 |
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
|
290 |
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
|
291 |
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
|
292 |
and not e.startswith(b'*** failed to import extension') |
39986
138e2d6d3b53
setup: ignore message about disabling 3rd party extensions because of version
Matt Harbison <matt_harbison@yahoo.com>
parents:
39772
diff
changeset
|
293 |
and not e.startswith(b'devel-warn:') |
138e2d6d3b53
setup: ignore message about disabling 3rd party extensions because of version
Matt Harbison <matt_harbison@yahoo.com>
parents:
39772
diff
changeset
|
294 |
and not (e.startswith(b'(third party extension') |
138e2d6d3b53
setup: ignore message about disabling 3rd party extensions because of version
Matt Harbison <matt_harbison@yahoo.com>
parents:
39772
diff
changeset
|
295 |
and e.endswith(b'or newer of Mercurial; disabling)')))] |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
296 |
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
|
297 |
|
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
298 |
def findhg(): |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
299 |
"""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
|
300 |
repository contents. |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
301 |
|
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
302 |
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
|
303 |
# 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
|
304 |
# 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
|
305 |
# |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
306 |
# 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
|
307 |
# 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
|
308 |
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
|
309 |
# 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
|
310 |
# 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
|
311 |
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
|
312 |
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
|
313 |
hgcmd = ['hg'] |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
314 |
# Run a simple "hg log" command just to see if using hg from the user's |
40980
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
315 |
# path works and can successfully interact with this repository. Windows |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
316 |
# gives precedence to hg.exe in the current directory, so fall back to the |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
317 |
# python invocation of local hg, where pythonXY.dll can always be found. |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
318 |
check_cmd = ['log', '-r.', '-Ttest'] |
40980
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
319 |
if os.name != 'nt': |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
320 |
try: |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
321 |
retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
322 |
except EnvironmentError: |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
323 |
retcode = -1 |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
324 |
if retcode == 0 and not filterhgerr(err): |
f6987f654356
setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40967
diff
changeset
|
325 |
return hgcommand(hgcmd, hgenv) |
33114
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
326 |
|
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
327 |
# 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
|
328 |
hgenv = localhgenv() |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
329 |
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
|
330 |
try: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
331 |
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
|
332 |
except EnvironmentError: |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
333 |
retcode = -1 |
33598
f30714a55523
setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents:
33591
diff
changeset
|
334 |
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
|
335 |
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
|
336 |
|
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
337 |
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
|
338 |
'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
|
339 |
|
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
340 |
def localhgenv(): |
8b20338b989e
setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents:
33113
diff
changeset
|
341 |
"""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
|
342 |
mercurial from the local repository.""" |
33112
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
343 |
# 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
|
344 |
# 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
|
345 |
env = {'HGMODULEPOLICY': 'py', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
346 |
'HGRCPATH': '', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
347 |
'LANGUAGE': 'C', |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
348 |
'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
|
349 |
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
|
350 |
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
|
351 |
if 'SystemRoot' in os.environ: |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
352 |
# 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
|
353 |
# https://bugs.python.org/issue13524#msg148850 |
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
354 |
env['SystemRoot'] = os.environ['SystemRoot'] |
33117 | 355 |
return env |
33112
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
356 |
|
155d760da7b2
setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents:
33111
diff
changeset
|
357 |
version = '' |
15367
b357a972d6cd
setup: set env global earlier (3073)
Matt Mackall <mpm@selenic.com>
parents:
15215
diff
changeset
|
358 |
|
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 |
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
|
360 |
hg = findhg() |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
361 |
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
|
362 |
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
|
363 |
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
|
364 |
if not hgid: |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
365 |
# 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
|
366 |
# 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
|
367 |
# 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
|
368 |
# that define minimumhgversion. |
6fdc1518983e
setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents:
33103
diff
changeset
|
369 |
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
|
370 |
if numerictags: # tag(s) found |
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
371 |
version = numerictags[-1] |
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
372 |
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
|
373 |
version += '+' |
17709
b7fff47bb128
setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents:
17606
diff
changeset
|
374 |
else: # no tag found |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
375 |
ltagcmd = ['parents', '--template', '{latesttag}'] |
35246
d73ccc63b8f9
setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
35229
diff
changeset
|
376 |
ltag = sysstr(hg.run(ltagcmd)) |
33113
fc290a39590d
setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents:
33112
diff
changeset
|
377 |
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
|
378 |
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
|
379 |
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
|
380 |
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
|
381 |
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
|
382 |
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
|
383 |
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
|
384 |
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
|
385 |
if 'tag' in kw: |
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27374
diff
changeset
|
386 |
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
|
387 |
elif 'latesttag' in kw: |
23646
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
388 |
if 'changessincelatesttag' in kw: |
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
389 |
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
|
390 |
else: |
9641643fac71
setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents:
23392
diff
changeset
|
391 |
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
|
392 |
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
|
393 |
version = kw.get('node', '')[:12] |
7632 | 394 |
|
8548
3ccbe42ff72f
setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
8547
diff
changeset
|
395 |
if version: |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
396 |
versionb = version |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
397 |
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
|
398 |
versionb = versionb.encode('ascii') |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
399 |
|
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
400 |
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
|
401 |
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
|
402 |
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
|
403 |
])) |
8493
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
404 |
|
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
405 |
try: |
28431
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
406 |
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
|
407 |
os.environ['HGMODULEPOLICY'] = 'py' |
8493
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
408 |
from mercurial import __version__ |
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
409 |
version = __version__.version |
4c030ada58d2
Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents:
7826
diff
changeset
|
410 |
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
|
411 |
version = b'unknown' |
28431
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
412 |
finally: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
413 |
if oldpolicy is None: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
414 |
del os.environ['HGMODULEPOLICY'] |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
415 |
else: |
a7e3b72cf756
setup: show how to set the module policy for imports
timeless <timeless@mozdev.org>
parents:
28430
diff
changeset
|
416 |
os.environ['HGMODULEPOLICY'] = oldpolicy |
7632 | 417 |
|
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
418 |
class hgbuild(build): |
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
419 |
# 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
|
420 |
# when build_py is run next. |
28398
712298942c82
setup: remove support for 2to3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28041
diff
changeset
|
421 |
sub_commands = [('build_mo', None)] + build.sub_commands |
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
422 |
|
15523
f9da84a950d0
setup: backout 8504699d1aa6
Matt Mackall <mpm@selenic.com>
parents:
15500
diff
changeset
|
423 |
class hgbuildmo(build): |
7649
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
424 |
|
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
425 |
description = "build translations (.mo files)" |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
426 |
|
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
427 |
def run(self): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
428 |
if not find_executable('msgfmt'): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
429 |
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
|
430 |
"will be built") |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
431 |
return |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
432 |
|
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
433 |
podir = 'i18n' |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
434 |
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
|
435 |
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
|
436 |
return |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
437 |
|
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
438 |
join = os.path.join |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
439 |
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
|
440 |
if not po.endswith('.po'): |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
441 |
continue |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
442 |
pofile = join(podir, po) |
a489e3a94443
i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7648
diff
changeset
|
443 |
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
|
444 |
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
|
445 |
mobuildfile = join('mercurial', mofile) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
446 |
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
|
447 |
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
|
448 |
# 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
|
449 |
cmd.append('-c') |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
450 |
self.mkpath(join('mercurial', modir)) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
451 |
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
|
452 |
|
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
453 |
|
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
454 |
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
|
455 |
pure = False |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
456 |
rust = hgrustext is not None |
29505
2dce3f96ad7b
setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents:
29444
diff
changeset
|
457 |
cffi = ispypy |
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
458 |
|
41759
aaad36b88298
cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents:
41533
diff
changeset
|
459 |
global_options = Distribution.global_options + [ |
aaad36b88298
cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents:
41533
diff
changeset
|
460 |
('pure', None, "use pure (slow) Python code instead of C extensions"), |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
461 |
('rust', None, "use Rust extensions additionally to C extensions"), |
41759
aaad36b88298
cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents:
41533
diff
changeset
|
462 |
] |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
463 |
|
15459
434c48e981b8
setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents:
15458
diff
changeset
|
464 |
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
|
465 |
# 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
|
466 |
# 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
|
467 |
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
|
468 |
|
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
469 |
# 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
|
470 |
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
|
471 |
buildextnegops['no-zstd'] = 'zstd' |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
472 |
buildextnegops['no-rust'] = 'rust' |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
473 |
|
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
474 |
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
|
475 |
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
|
476 |
('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
|
477 |
('no-zstd', None, 'do not compile zstd bindings'), |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
478 |
('rust', None, |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
479 |
'compile Rust extensions if they are in use ' |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
480 |
'(requires Cargo) [default]'), |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
481 |
('no-rust', None, 'do not compile Rust extensions'), |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
482 |
] |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
483 |
|
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
484 |
boolean_options = build_ext.boolean_options + ['zstd', 'rust'] |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
485 |
negative_opt = buildextnegops |
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
486 |
|
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
487 |
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
|
488 |
self.zstd = True |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
489 |
self.rust = True |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
490 |
|
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
491 |
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
|
492 |
|
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
493 |
def build_extensions(self): |
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
494 |
ruststandalones = [e for e in self.extensions |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
495 |
if isinstance(e, RustStandaloneExtension)] |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
496 |
self.extensions = [e for e in self.extensions |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
497 |
if e not in ruststandalones] |
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
498 |
# 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
|
499 |
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
|
500 |
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
|
501 |
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
|
502 |
|
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
503 |
# Build Rust standalon extensions if it'll be used |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
504 |
# and its build is not explictely disabled (for external build |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
505 |
# as Linux distributions would do) |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
506 |
if self.distribution.rust and self.rust and hgrustext != 'direct-ffi': |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
507 |
for rustext in ruststandalones: |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
508 |
rustext.build('' if self.inplace else self.build_lib) |
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
509 |
|
30450
0acf3fd718f1
setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30436
diff
changeset
|
510 |
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
|
511 |
|
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
512 |
def build_extension(self, ext): |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
513 |
if (self.distribution.rust and self.rust |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
514 |
and isinstance(ext, RustExtension)): |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
515 |
ext.rustbuild() |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
516 |
try: |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
517 |
build_ext.build_extension(self, ext) |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
518 |
except CCompilerError: |
12501
98f21e4d9633
setup: slight simplification
Martin Geisler <mg@lazybytes.net>
parents:
11533
diff
changeset
|
519 |
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
|
520 |
raise |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
521 |
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
|
522 |
ext.name) |
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
523 |
|
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
524 |
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
|
525 |
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
|
526 |
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
|
527 |
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
|
528 |
|
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
529 |
exebuilt = False |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
530 |
try: |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
531 |
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
|
532 |
exebuilt = True |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
533 |
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
|
534 |
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
|
535 |
|
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
536 |
if exebuilt: |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
537 |
# 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
|
538 |
# 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
|
539 |
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
|
540 |
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
|
541 |
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
|
542 |
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
|
543 |
|
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
544 |
# 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
|
545 |
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
|
546 |
|
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
547 |
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
|
548 |
|
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
549 |
class hgbuildpy(build_py): |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
550 |
def finalize_options(self): |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
551 |
build_py.finalize_options(self) |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
552 |
|
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
553 |
if self.distribution.pure: |
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
554 |
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
|
555 |
elif self.distribution.cffi: |
30346
9cc438bf7d9a
setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents:
29833
diff
changeset
|
556 |
from mercurial.cffi import ( |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
557 |
bdiffbuild, |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
558 |
mpatchbuild, |
30346
9cc438bf7d9a
setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents:
29833
diff
changeset
|
559 |
) |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
560 |
exts = [mpatchbuild.ffi.distutils_extension(), |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
561 |
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
|
562 |
# 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
|
563 |
if sys.platform == 'darwin': |
32505
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
564 |
from mercurial.cffi import osutilbuild |
05a16c19967e
cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents:
32420
diff
changeset
|
565 |
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
|
566 |
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
|
567 |
else: |
18905
012780620d4f
setup: make error message for missing Python headers more helpful
Mads Kiilerich <mads@kiilerich.com>
parents:
18900
diff
changeset
|
568 |
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
|
569 |
if not os.path.exists(h): |
16683 | 570 |
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
|
571 |
'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
|
572 |
|
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
573 |
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
|
574 |
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
|
575 |
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
|
576 |
|
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
577 |
rust = self.distribution.rust |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
578 |
if self.distribution.pure: |
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
579 |
modulepolicy = 'py' |
32251
a04f5c651e52
policy: relax the default for in-place build
Yuya Nishihara <yuya@tcha.org>
parents:
32233
diff
changeset
|
580 |
elif self.build_lib == '.': |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
581 |
# in-place build should run without rebuilding and Rust extensions |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
582 |
modulepolicy = 'rust+c-allow' if rust else 'allow' |
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
583 |
else: |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
584 |
modulepolicy = 'rust+c' if rust else 'c' |
35229
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
585 |
|
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
586 |
content = b''.join([ |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
587 |
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
|
588 |
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
|
589 |
]) |
61ff0d7d56fd
setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35103
diff
changeset
|
590 |
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
|
591 |
content) |
27222
511a4384b033
setup: refactor handling of modules with C/Python implementations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27220
diff
changeset
|
592 |
|
28430
17b85d739b62
setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents:
28418
diff
changeset
|
593 |
build_py.run(self) |
7722
103127a8cbdb
add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents:
7721
diff
changeset
|
594 |
|
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
595 |
class buildhgextindex(Command): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
596 |
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
|
597 |
user_options = [] |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
598 |
_indexfilename = 'hgext/__index__.py' |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
599 |
|
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
600 |
def initialize_options(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
601 |
pass |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
602 |
|
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
603 |
def finalize_options(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
604 |
pass |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
605 |
|
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
606 |
def run(self): |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
607 |
if os.path.exists(self._indexfilename): |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
608 |
with open(self._indexfilename, 'w') as f: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
609 |
f.write('# empty\n') |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
610 |
|
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
611 |
# 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
|
612 |
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
|
613 |
'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
|
614 |
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
|
615 |
localhgenv()) |
33111
87ee783f7299
setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents:
33110
diff
changeset
|
616 |
if err or returncode != 0: |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
617 |
raise DistutilsExecError(err) |
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
618 |
|
42075
456c37433c43
py3: write out hgextindex as bytes in setup.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
42074
diff
changeset
|
619 |
with open(self._indexfilename, 'wb') as f: |
456c37433c43
py3: write out hgextindex as bytes in setup.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
42074
diff
changeset
|
620 |
f.write(b'# this file is autogenerated by setup.py\n') |
456c37433c43
py3: write out hgextindex as bytes in setup.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
42074
diff
changeset
|
621 |
f.write(b'docs = ') |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
622 |
f.write(out) |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
623 |
|
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
624 |
class buildhgexe(build_ext): |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
625 |
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
|
626 |
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
|
627 |
('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
|
628 |
'Windows (off by default and ' |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
629 |
'experimental)'), |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
630 |
] |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
631 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
632 |
LONG_PATHS_MANIFEST = """ |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
633 |
<?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
|
634 |
<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
|
635 |
<application> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
636 |
<windowsSettings |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
637 |
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
|
638 |
<ws2:longPathAware>true</ws2:longPathAware> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
639 |
</windowsSettings> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
640 |
</application> |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
641 |
</assembly>""" |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
642 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
643 |
def initialize_options(self): |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
644 |
build_ext.initialize_options(self) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
645 |
self.long_paths_support = False |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
646 |
|
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
647 |
def build_extensions(self): |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
648 |
if os.name != 'nt': |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
649 |
return |
17246
bf5bb38bcc7c
setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents:
17121
diff
changeset
|
650 |
if isinstance(self.compiler, HackedMingw32CCompiler): |
bf5bb38bcc7c
setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents:
17121
diff
changeset
|
651 |
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
|
652 |
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
|
653 |
|
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
654 |
# 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
|
655 |
# 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
|
656 |
# 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
|
657 |
_kernel32 = ctypes.windll.kernel32 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
658 |
_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
|
659 |
ctypes.c_void_p, |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
660 |
ctypes.c_ulong] |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
661 |
_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
|
662 |
size = 1000 |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
663 |
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
|
664 |
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
|
665 |
size) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
666 |
|
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
667 |
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
|
668 |
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
|
669 |
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
|
670 |
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
|
671 |
dllbasename) |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
672 |
pythonlib = dllbasename[:-4] |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
673 |
else: |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
674 |
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
|
675 |
'assuming pythonXY') |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
676 |
|
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
677 |
hv = sys.hexversion |
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
678 |
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
|
679 |
|
ee2e4a2c3690
setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28625
diff
changeset
|
680 |
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
|
681 |
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
|
682 |
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
|
683 |
f.write(b'#define HGPYTHONLIB "%s"\n' % pythonlib) |
40397
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
684 |
|
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
685 |
macros = None |
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
686 |
if sys.version_info[0] >= 3: |
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
687 |
macros = [('_UNICODE', None), ('UNICODE', None)] |
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
688 |
|
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
689 |
objects = self.compiler.compile(['mercurial/exewrapper.c'], |
40397
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
690 |
output_dir=self.build_temp, |
36b134c436b8
setup: build exewrapper with Unicode support on py3
Matt Harbison <matt_harbison@yahoo.com>
parents:
40383
diff
changeset
|
691 |
macros=macros) |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
692 |
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
|
693 |
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
|
694 |
self.compiler.link_executable(objects, self.hgtarget, |
17732
93d97a212559
exewrapper: adapt for legacy HackableMercurial
Adrian Buehlmann <adrian@cadifra.com>
parents:
17709
diff
changeset
|
695 |
libraries=[], |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
696 |
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
|
697 |
if self.long_paths_support: |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
698 |
self.addlongpathsmanifest() |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
699 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
700 |
def addlongpathsmanifest(self): |
41533
0f64091cc851
global: make some docstrings raw strings
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41455
diff
changeset
|
701 |
r"""Add manifest pieces so that hg.exe understands long paths |
34530
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
702 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
703 |
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
|
704 |
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
|
705 |
- 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
|
706 |
- 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
|
707 |
LongPathsEnabled to have value 1. |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
708 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
709 |
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
|
710 |
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
|
711 |
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
|
712 |
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
|
713 |
|
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
714 |
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
|
715 |
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
|
716 |
""" |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
717 |
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
|
718 |
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
|
719 |
os.close(fdauto) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
720 |
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
|
721 |
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
|
722 |
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
|
723 |
inputresource = '-inputresource:%s;#1' % exefname |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
724 |
outputresource = '-outputresource:%s;#1' % exefname |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
725 |
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
|
726 |
# 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
|
727 |
# 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
|
728 |
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
|
729 |
inputresource, outputresource]) |
ed5acd3fd7e1
windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents:
34397
diff
changeset
|
730 |
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
|
731 |
os.remove(manfname) |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
732 |
|
27268
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
733 |
@property |
ed1660ce99d9
setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27222
diff
changeset
|
734 |
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
|
735 |
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
|
736 |
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
|
737 |
|
41850
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
738 |
class hgbuilddoc(Command): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
739 |
description = 'build documentation' |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
740 |
user_options = [ |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
741 |
('man', None, 'generate man pages'), |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
742 |
('html', None, 'generate html pages'), |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
743 |
] |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
744 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
745 |
def initialize_options(self): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
746 |
self.man = None |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
747 |
self.html = None |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
748 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
749 |
def finalize_options(self): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
750 |
# If --man or --html are set, only generate what we're told to. |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
751 |
# Otherwise generate everything. |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
752 |
have_subset = self.man is not None or self.html is not None |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
753 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
754 |
if have_subset: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
755 |
self.man = True if self.man else False |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
756 |
self.html = True if self.html else False |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
757 |
else: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
758 |
self.man = True |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
759 |
self.html = True |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
760 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
761 |
def run(self): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
762 |
def normalizecrlf(p): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
763 |
with open(p, 'rb') as fh: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
764 |
orig = fh.read() |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
765 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
766 |
if b'\r\n' not in orig: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
767 |
return |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
768 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
769 |
log.info('normalizing %s to LF line endings' % p) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
770 |
with open(p, 'wb') as fh: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
771 |
fh.write(orig.replace(b'\r\n', b'\n')) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
772 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
773 |
def gentxt(root): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
774 |
txt = 'doc/%s.txt' % root |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
775 |
log.info('generating %s' % txt) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
776 |
res, out, err = runcmd( |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
777 |
[sys.executable, 'gendoc.py', root], |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
778 |
os.environ, |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
779 |
cwd='doc') |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
780 |
if res: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
781 |
raise SystemExit('error running gendoc.py: %s' % |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
782 |
'\n'.join([out, err])) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
783 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
784 |
with open(txt, 'wb') as fh: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
785 |
fh.write(out) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
786 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
787 |
def gengendoc(root): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
788 |
gendoc = 'doc/%s.gendoc.txt' % root |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
789 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
790 |
log.info('generating %s' % gendoc) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
791 |
res, out, err = runcmd( |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
792 |
[sys.executable, 'gendoc.py', '%s.gendoc' % root], |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
793 |
os.environ, |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
794 |
cwd='doc') |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
795 |
if res: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
796 |
raise SystemExit('error running gendoc: %s' % |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
797 |
'\n'.join([out, err])) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
798 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
799 |
with open(gendoc, 'wb') as fh: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
800 |
fh.write(out) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
801 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
802 |
def genman(root): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
803 |
log.info('generating doc/%s' % root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
804 |
res, out, err = runcmd( |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
805 |
[sys.executable, 'runrst', 'hgmanpage', '--halt', 'warning', |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
806 |
'--strip-elements-with-class', 'htmlonly', |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
807 |
'%s.txt' % root, root], |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
808 |
os.environ, |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
809 |
cwd='doc') |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
810 |
if res: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
811 |
raise SystemExit('error running runrst: %s' % |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
812 |
'\n'.join([out, err])) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
813 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
814 |
normalizecrlf('doc/%s' % root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
815 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
816 |
def genhtml(root): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
817 |
log.info('generating doc/%s.html' % root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
818 |
res, out, err = runcmd( |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
819 |
[sys.executable, 'runrst', 'html', '--halt', 'warning', |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
820 |
'--link-stylesheet', '--stylesheet-path', 'style.css', |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
821 |
'%s.txt' % root, '%s.html' % root], |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
822 |
os.environ, |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
823 |
cwd='doc') |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
824 |
if res: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
825 |
raise SystemExit('error running runrst: %s' % |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
826 |
'\n'.join([out, err])) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
827 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
828 |
normalizecrlf('doc/%s.html' % root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
829 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
830 |
# This logic is duplicated in doc/Makefile. |
42174
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
831 |
sources = set(f for f in os.listdir('mercurial/help') |
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
832 |
if re.search(r'[0-9]\.txt$', f)) |
41850
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
833 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
834 |
# common.txt is a one-off. |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
835 |
gentxt('common') |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
836 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
837 |
for source in sorted(sources): |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
838 |
assert source[-4:] == '.txt' |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
839 |
root = source[:-4] |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
840 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
841 |
gentxt(root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
842 |
gengendoc(root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
843 |
|
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
844 |
if self.man: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
845 |
genman(root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
846 |
if self.html: |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
847 |
genhtml(root) |
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
848 |
|
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
849 |
class hginstall(install): |
32725
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
850 |
|
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
851 |
user_options = install.user_options + [ |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
852 |
('old-and-unmanageable', None, |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
853 |
'noop, present for eggless setuptools compat'), |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
854 |
('single-version-externally-managed', None, |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
855 |
'noop, present for eggless setuptools compat'), |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
856 |
] |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
857 |
|
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
858 |
# 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
|
859 |
single_version_externally_managed = True |
6c4b58422974
setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents:
32655
diff
changeset
|
860 |
|
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
861 |
def get_sub_commands(self): |
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
862 |
# 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
|
863 |
# 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
|
864 |
# packaging. |
33589
a0bfcd08f5fe
setup: drop use of set literal so parsable on Python 2.6
Yuya Nishihara <yuya@tcha.org>
parents:
33588
diff
changeset
|
865 |
excl = set(['bdist_egg']) |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
866 |
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
|
867 |
|
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
868 |
class hginstalllib(install_lib): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
869 |
''' |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
870 |
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
|
871 |
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
|
872 |
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
|
873 |
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
|
874 |
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
|
875 |
|
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
876 |
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
|
877 |
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
|
878 |
''' |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
879 |
|
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
880 |
def run(self): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
881 |
realcopyfile = file_util.copy_file |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
882 |
def copyfileandsetmode(*args, **kwargs): |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
883 |
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
|
884 |
dst, copied = realcopyfile(*args, **kwargs) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
885 |
if copied: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
886 |
st = os.stat(src) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
887 |
# 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
|
888 |
# has it) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
889 |
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
|
890 |
setmode = int('0755', 8) |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
891 |
else: |
24941
9c1942635c1f
setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents:
24214
diff
changeset
|
892 |
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
|
893 |
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
|
894 |
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
|
895 |
os.chmod(dst, m) |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
896 |
file_util.copy_file = copyfileandsetmode |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
897 |
try: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
898 |
install_lib.run(self) |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
899 |
finally: |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
900 |
file_util.copy_file = realcopyfile |
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
901 |
|
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
902 |
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
|
903 |
''' |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
904 |
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
|
905 |
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
|
906 |
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
|
907 |
''' |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
908 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
909 |
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
|
910 |
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
|
911 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
912 |
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
|
913 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
914 |
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
|
915 |
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
|
916 |
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
|
917 |
('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
|
918 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
919 |
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
|
920 |
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
|
921 |
|
27269
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
922 |
# 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
|
923 |
# 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
|
924 |
# 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
|
925 |
# wheel archive looks like: |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
926 |
# |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
927 |
# 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
|
928 |
# mercurial/__init__.py |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
929 |
# |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
930 |
# 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
|
931 |
# 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
|
932 |
# 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
|
933 |
# 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
|
934 |
# 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
|
935 |
# 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
|
936 |
# 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
|
937 |
# 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
|
938 |
# 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
|
939 |
# 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
|
940 |
|
12661
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
941 |
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
|
942 |
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
|
943 |
# 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
|
944 |
# 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
|
945 |
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
|
946 |
else: |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
947 |
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
|
948 |
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
|
949 |
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
|
950 |
|
27637
b502138f5faa
cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents:
27374
diff
changeset
|
951 |
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
|
952 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
953 |
for outfile in self.outfiles: |
28418
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
954 |
with open(outfile, 'rb') as fp: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
955 |
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
|
956 |
|
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
957 |
# skip binary files |
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
958 |
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
|
959 |
continue |
10da5a1f25dd
setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
12649
diff
changeset
|
960 |
|
27269
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
961 |
# 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
|
962 |
# 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
|
963 |
# value. |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
964 |
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
|
965 |
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
|
966 |
'not known' % outfile) |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
967 |
continue |
bdcbec65750b
setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27268
diff
changeset
|
968 |
|
27348
83a8219fb790
setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27269
diff
changeset
|
969 |
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
|
970 |
with open(outfile, 'wb') as fp: |
121d25719e92
setup: switch to with open as
timeless <timeless@mozdev.org>
parents:
28398
diff
changeset
|
971 |
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
|
972 |
|
42172
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
973 |
# virtualenv installs custom distutils/__init__.py and |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
974 |
# distutils/distutils.cfg files which essentially proxy back to the |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
975 |
# "real" distutils in the main Python install. The presence of this |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
976 |
# directory causes py2exe to pick up the "hacked" distutils package |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
977 |
# from the virtualenv and "import distutils" will fail from the py2exe |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
978 |
# build because the "real" distutils files can't be located. |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
979 |
# |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
980 |
# We work around this by monkeypatching the py2exe code finding Python |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
981 |
# modules to replace the found virtualenv distutils modules with the |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
982 |
# original versions via filesystem scanning. This is a bit hacky. But |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
983 |
# it allows us to use virtualenvs for py2exe packaging, which is more |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
984 |
# deterministic and reproducible. |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
985 |
# |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
986 |
# It's worth noting that the common StackOverflow suggestions for this |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
987 |
# problem involve copying the original distutils files into the |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
988 |
# virtualenv or into the staging directory after setup() is invoked. |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
989 |
# The former is very brittle and can easily break setup(). Our hacking |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
990 |
# of the found modules routine has a similar result as copying the files |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
991 |
# manually. But it makes fewer assumptions about how py2exe works and |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
992 |
# is less brittle. |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
993 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
994 |
# This only catches virtualenvs made with virtualenv (as opposed to |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
995 |
# venv, which is likely what Python 3 uses). |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
996 |
py2exehacked = py2exeloaded and getattr(sys, 'real_prefix', None) is not None |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
997 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
998 |
if py2exehacked: |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
999 |
from distutils.command.py2exe import py2exe as buildpy2exe |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1000 |
from py2exe.mf import Module as py2exemodule |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1001 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1002 |
class hgbuildpy2exe(buildpy2exe): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1003 |
def find_needed_modules(self, mf, files, modules): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1004 |
res = buildpy2exe.find_needed_modules(self, mf, files, modules) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1005 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1006 |
# Replace virtualenv's distutils modules with the real ones. |
42174
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1007 |
modules = {} |
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1008 |
for k, v in res.modules.items(): |
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1009 |
if k != 'distutils' and not k.startswith('distutils.'): |
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1010 |
modules[k] = v |
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1011 |
|
bd92dd3eff42
setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42172
diff
changeset
|
1012 |
res.modules = modules |
42172
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1013 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1014 |
import opcode |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1015 |
distutilsreal = os.path.join(os.path.dirname(opcode.__file__), |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1016 |
'distutils') |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1017 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1018 |
for root, dirs, files in os.walk(distutilsreal): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1019 |
for f in sorted(files): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1020 |
if not f.endswith('.py'): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1021 |
continue |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1022 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1023 |
full = os.path.join(root, f) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1024 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1025 |
parents = ['distutils'] |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1026 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1027 |
if root != distutilsreal: |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1028 |
rel = os.path.relpath(root, distutilsreal) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1029 |
parents.extend(p for p in rel.split(os.sep)) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1030 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1031 |
modname = '%s.%s' % ('.'.join(parents), f[:-3]) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1032 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1033 |
if modname.startswith('distutils.tests.'): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1034 |
continue |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1035 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1036 |
if modname.endswith('.__init__'): |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1037 |
modname = modname[:-len('.__init__')] |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1038 |
path = os.path.dirname(full) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1039 |
else: |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1040 |
path = None |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1041 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1042 |
res.modules[modname] = py2exemodule(modname, full, |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1043 |
path=path) |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1044 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1045 |
if 'distutils' not in res.modules: |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1046 |
raise SystemExit('could not find distutils modules') |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1047 |
|
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1048 |
return res |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1049 |
|
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
1050 |
cmdclass = {'build': hgbuild, |
41850
d80d48928eb1
setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41759
diff
changeset
|
1051 |
'build_doc': hgbuilddoc, |
15460
f9f0731dbc56
setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents:
15459
diff
changeset
|
1052 |
'build_mo': hgbuildmo, |
11468
1c1126b1d919
setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents:
10905
diff
changeset
|
1053 |
'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
|
1054 |
'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
|
1055 |
'build_scripts': hgbuildscripts, |
14538
3818c67a501e
setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents:
14324
diff
changeset
|
1056 |
'build_hgextindex': buildhgextindex, |
32647
331dcf199039
setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents:
32506
diff
changeset
|
1057 |
'install': hginstall, |
22640
e88a634e0195
setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents:
22575
diff
changeset
|
1058 |
'install_lib': hginstalllib, |
17061
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
1059 |
'install_scripts': hginstallscripts, |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
1060 |
'build_hgexe': buildhgexe, |
f20e4d76b711
setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents:
16775
diff
changeset
|
1061 |
} |
3238
3dba9ec89164
Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2402
diff
changeset
|
1062 |
|
42172
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1063 |
if py2exehacked: |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1064 |
cmdclass['py2exe'] = hgbuildpy2exe |
71d8b4d91616
setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42075
diff
changeset
|
1065 |
|
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
1066 |
packages = ['mercurial', |
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
1067 |
'mercurial.cext', |
32506
2dcb3d52ef41
cffi: put compiled modules into mercurial.cffi package
Yuya Nishihara <yuya@tcha.org>
parents:
32505
diff
changeset
|
1068 |
'mercurial.cffi', |
32211
c48583859e04
policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents:
32125
diff
changeset
|
1069 |
'mercurial.hgweb', |
27222
511a4384b033
setup: refactor handling of modules with C/Python implementations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27220
diff
changeset
|
1070 |
'mercurial.pure', |
34397 | 1071 |
'mercurial.thirdparty', |
1072 |
'mercurial.thirdparty.attr', |
|
37180
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
1073 |
'mercurial.thirdparty.zope', |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
1074 |
'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
|
1075 |
'mercurial.utils', |
39329
729082bb9938
revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net>
parents:
39210
diff
changeset
|
1076 |
'mercurial.revlogutils', |
39772
ae531f5e583c
testing: add interface unit tests for file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39613
diff
changeset
|
1077 |
'mercurial.testing', |
28625
776fd2e2cf5a
setup: add missing hgext.fsmonitor
Sean Farley <sean@farley.io>
parents:
28609
diff
changeset
|
1078 |
'hgext', 'hgext.convert', 'hgext.fsmonitor', |
39210
1ddb296e0dee
fastannotate: initial import from Facebook's hg-experimental
Augie Fackler <augie@google.com>
parents:
38721
diff
changeset
|
1079 |
'hgext.fastannotate', |
37305
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
1080 |
'hgext.fsmonitor.pywatchman', |
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
1081 |
'hgext.infinitepush', |
611e466662af
setup: add overlooked hgext.infinitepush package declaration
Augie Fackler <augie@google.com>
parents:
37180
diff
changeset
|
1082 |
'hgext.highlight', |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
35774
diff
changeset
|
1083 |
'hgext.largefiles', 'hgext.lfs', 'hgext.narrow', |
40495
3a333a582d7b
remotefilelog: import pruned-down remotefilelog extension from hg-experimental
Augie Fackler <augie@google.com>
parents:
40446
diff
changeset
|
1084 |
'hgext.remotefilelog', |
36079
a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Augie Fackler <augie@google.com>
parents:
35774
diff
changeset
|
1085 |
'hgext.zeroconf', 'hgext3rd', |
32420
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
32385
diff
changeset
|
1086 |
'hgdemandimport'] |
39613
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
1087 |
if sys.version_info[0] == 2: |
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
1088 |
packages.extend(['mercurial.thirdparty.concurrent', |
96bffce40f5b
setup: exclude vendored futures package on Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
39608
diff
changeset
|
1089 |
'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
|
1090 |
|
42054
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1091 |
if 'HG_PY2EXE_EXTRA_INSTALL_PACKAGES' in os.environ: |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1092 |
# py2exe can't cope with namespace packages very well, so we have to |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1093 |
# install any hgext3rd.* extensions that we want in the final py2exe |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1094 |
# image here. This is gross, but you gotta do what you gotta do. |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1095 |
packages.extend(os.environ['HG_PY2EXE_EXTRA_INSTALL_PACKAGES'].split(' ')) |
399ed3e86a49
py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents:
41954
diff
changeset
|
1096 |
|
29444
284d742e5611
internals: move the bitmanipulation routines into its own file
Maciej Fijalkowski <fijall@gmail.com>
parents:
29020
diff
changeset
|
1097 |
common_depends = ['mercurial/bitmanipulation.h', |
284d742e5611
internals: move the bitmanipulation routines into its own file
Maciej Fijalkowski <fijall@gmail.com>
parents:
29020
diff
changeset
|
1098 |
'mercurial/compat.h', |
32385
34bd3cd28dcb
cext: move util.h to cext tree
Yuya Nishihara <yuya@tcha.org>
parents:
32378
diff
changeset
|
1099 |
'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
|
1100 |
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
|
1101 |
|
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
1102 |
osutil_cflags = [] |
25073
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
1103 |
osutil_ldflags = [] |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
1104 |
|
31561 | 1105 |
# platform specific macros |
31622
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
1106 |
for plat, func in [('bsd', 'setproctitle')]: |
31561 | 1107 |
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
|
1108 |
osutil_cflags.append('-DHAVE_%s' % func.upper()) |
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
1109 |
|
31596
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
1110 |
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
|
1111 |
('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
|
1112 |
#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
|
1113 |
#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
|
1114 |
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
|
1115 |
'''), |
31622
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
1116 |
('linux', 'LINUX_STATFS', ''' |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
1117 |
#include <linux/magic.h> |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
1118 |
#include <sys/vfs.h> |
2243ba216f66
statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents:
31596
diff
changeset
|
1119 |
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
|
1120 |
'''), |
31596
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
1121 |
]: |
ab51a2b18f87
setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents:
31562
diff
changeset
|
1122 |
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
|
1123 |
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
|
1124 |
|
25073
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
1125 |
if sys.platform == 'darwin': |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
1126 |
osutil_ldflags += ['-framework', 'ApplicationServices'] |
c1a9e31bec0f
setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents:
25072
diff
changeset
|
1127 |
|
36675 | 1128 |
xdiff_srcs = [ |
1129 |
'mercurial/thirdparty/xdiff/xdiffi.c', |
|
1130 |
'mercurial/thirdparty/xdiff/xprepare.c', |
|
1131 |
'mercurial/thirdparty/xdiff/xutils.c', |
|
1132 |
] |
|
1133 |
||
1134 |
xdiff_headers = [ |
|
1135 |
'mercurial/thirdparty/xdiff/xdiff.h', |
|
1136 |
'mercurial/thirdparty/xdiff/xdiffi.h', |
|
1137 |
'mercurial/thirdparty/xdiff/xinclude.h', |
|
1138 |
'mercurial/thirdparty/xdiff/xmacros.h', |
|
1139 |
'mercurial/thirdparty/xdiff/xprepare.h', |
|
1140 |
'mercurial/thirdparty/xdiff/xtypes.h', |
|
1141 |
'mercurial/thirdparty/xdiff/xutils.h', |
|
1142 |
] |
|
1143 |
||
40966
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1144 |
class RustCompilationError(CCompilerError): |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1145 |
"""Exception class for Rust compilation errors.""" |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1146 |
|
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1147 |
class RustExtension(Extension): |
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1148 |
"""Base classes for concrete Rust Extension classes. |
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1149 |
""" |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1150 |
|
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1151 |
rusttargetdir = os.path.join('rust', 'target', 'release') |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1152 |
|
40985
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1153 |
def __init__(self, mpath, sources, rustlibname, subcrate, |
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1154 |
py3_features=None, **kw): |
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1155 |
Extension.__init__(self, mpath, sources, **kw) |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1156 |
srcdir = self.rustsrcdir = os.path.join('rust', subcrate) |
40985
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1157 |
self.py3_features = py3_features |
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1158 |
|
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1159 |
# adding Rust source and control files to depends so that the extension |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1160 |
# gets rebuilt if they've changed |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1161 |
self.depends.append(os.path.join(srcdir, 'Cargo.toml')) |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1162 |
cargo_lock = os.path.join(srcdir, 'Cargo.lock') |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1163 |
if os.path.exists(cargo_lock): |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1164 |
self.depends.append(cargo_lock) |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1165 |
for dirpath, subdir, fnames in os.walk(os.path.join(srcdir, 'src')): |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1166 |
self.depends.extend(os.path.join(dirpath, fname) |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1167 |
for fname in fnames |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1168 |
if os.path.splitext(fname)[1] == '.rs') |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1169 |
|
42457
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1170 |
@staticmethod |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1171 |
def rustdylibsuffix(): |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1172 |
"""Return the suffix for shared libraries produced by rustc. |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1173 |
|
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1174 |
See also: https://doc.rust-lang.org/reference/linkage.html |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1175 |
""" |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1176 |
if sys.platform == 'darwin': |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1177 |
return '.dylib' |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1178 |
elif os.name == 'nt': |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1179 |
return '.dll' |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1180 |
else: |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1181 |
return '.so' |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1182 |
|
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1183 |
def rustbuild(self): |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1184 |
env = os.environ.copy() |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1185 |
if 'HGTEST_RESTOREENV' in env: |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1186 |
# Mercurial tests change HOME to a temporary directory, |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1187 |
# but, if installed with rustup, the Rust toolchain needs |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1188 |
# HOME to be correct (otherwise the 'no default toolchain' |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1189 |
# error message is issued and the build fails). |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1190 |
# This happens currently with test-hghave.t, which does |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1191 |
# invoke this build. |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1192 |
|
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1193 |
# Unix only fix (os.path.expanduser not really reliable if |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1194 |
# HOME is shadowed like this) |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1195 |
import pwd |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1196 |
env['HOME'] = pwd.getpwuid(os.getuid()).pw_dir |
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1197 |
|
42459
85041e2b69c7
rust: switched to 'cargo rustc' in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42458
diff
changeset
|
1198 |
cargocmd = ['cargo', 'rustc', '-vv', '--release'] |
40985
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1199 |
if sys.version_info[0] == 3 and self.py3_features is not None: |
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1200 |
cargocmd.extend(('--features', self.py3_features, |
4277e20cfec4
rust-cpython: build and support for Python3
Georges Racinet <gracinet@anybox.fr>
parents:
40980
diff
changeset
|
1201 |
'--no-default-features')) |
42459
85041e2b69c7
rust: switched to 'cargo rustc' in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42458
diff
changeset
|
1202 |
cargocmd.append('--') |
42458
8ee0fdf3b087
rust-cpython: fix build for MacOSX
Georges Racinet <georges.racinet@octobus.net>
parents:
42457
diff
changeset
|
1203 |
if sys.platform == 'darwin': |
42459
85041e2b69c7
rust: switched to 'cargo rustc' in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42458
diff
changeset
|
1204 |
cargocmd.extend(("-C", "link-arg=-undefined", |
85041e2b69c7
rust: switched to 'cargo rustc' in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42458
diff
changeset
|
1205 |
"-C", "link-arg=dynamic_lookup")) |
40966
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1206 |
try: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1207 |
subprocess.check_call(cargocmd, env=env, cwd=self.rustsrcdir) |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1208 |
except OSError as exc: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1209 |
if exc.errno == errno.ENOENT: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1210 |
raise RustCompilationError("Cargo not found") |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1211 |
elif exc.errno == errno.EACCES: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1212 |
raise RustCompilationError( |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1213 |
"Cargo found, but permisssion to execute it is denied") |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1214 |
else: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1215 |
raise |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1216 |
except subprocess.CalledProcessError: |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1217 |
raise RustCompilationError( |
1eaf62a67c1a
rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents:
40859
diff
changeset
|
1218 |
"Cargo failed. Working directory: %r, " |
42074
59b1bdf85b1a
setup: fix a possible NameError on rust build
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
42065
diff
changeset
|
1219 |
"command: %r, environment: %r" |
59b1bdf85b1a
setup: fix a possible NameError on rust build
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
42065
diff
changeset
|
1220 |
% (self.rustsrcdir, cargocmd, env)) |
40273
3b275f549777
rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents:
40121
diff
changeset
|
1221 |
|
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1222 |
class RustEnhancedExtension(RustExtension): |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1223 |
"""A C Extension, conditionally enhanced with Rust code. |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1224 |
|
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1225 |
If the HGRUSTEXT environment variable is set to something else |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1226 |
than 'cpython', the Rust sources get compiled and linked within the |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1227 |
C target shared library object. |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1228 |
""" |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1229 |
|
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1230 |
def __init__(self, mpath, sources, rustlibname, subcrate, **kw): |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1231 |
RustExtension.__init__(self, mpath, sources, rustlibname, subcrate, |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1232 |
**kw) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1233 |
if hgrustext != 'direct-ffi': |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1234 |
return |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1235 |
self.extra_compile_args.append('-DWITH_RUST') |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1236 |
self.libraries.append(rustlibname) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1237 |
self.library_dirs.append(self.rusttargetdir) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1238 |
|
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1239 |
def rustbuild(self): |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1240 |
if hgrustext == 'direct-ffi': |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1241 |
RustExtension.rustbuild(self) |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1242 |
|
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1243 |
class RustStandaloneExtension(RustExtension): |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1244 |
|
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1245 |
def __init__(self, pydottedname, rustcrate, dylibname, **kw): |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1246 |
RustExtension.__init__(self, pydottedname, [], dylibname, rustcrate, |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1247 |
**kw) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1248 |
self.dylibname = dylibname |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1249 |
|
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1250 |
def build(self, target_dir): |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1251 |
self.rustbuild() |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1252 |
target = [target_dir] |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1253 |
target.extend(self.name.split('.')) |
42457
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1254 |
target[-1] += DYLIB_SUFFIX |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1255 |
shutil.copy2(os.path.join(self.rusttargetdir, |
f4a65077e949
rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents:
42453
diff
changeset
|
1256 |
self.dylibname + self.rustdylibsuffix()), |
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1257 |
os.path.join(*target)) |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1258 |
|
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1259 |
|
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
1260 |
extmodules = [ |
32368
008d37c4d783
base85: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32367
diff
changeset
|
1261 |
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
|
1262 |
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
|
1263 |
depends=common_depends), |
32369
3b88a7fa97d8
bdiff: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32368
diff
changeset
|
1264 |
Extension('mercurial.cext.bdiff', ['mercurial/bdiff.c', |
36675 | 1265 |
'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
|
1266 |
include_dirs=common_include_dirs, |
36675 | 1267 |
depends=common_depends + ['mercurial/bdiff.h'] + xdiff_headers), |
32371
151cc3b3d799
mpatch: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32370
diff
changeset
|
1268 |
Extension('mercurial.cext.mpatch', ['mercurial/mpatch.c', |
151cc3b3d799
mpatch: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32370
diff
changeset
|
1269 |
'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
|
1270 |
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
|
1271 |
depends=common_depends), |
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1272 |
RustEnhancedExtension( |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1273 |
'mercurial.cext.parsers', ['mercurial/cext/charencode.c', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1274 |
'mercurial/cext/dirs.c', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1275 |
'mercurial/cext/manifest.c', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1276 |
'mercurial/cext/parsers.c', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1277 |
'mercurial/cext/pathencode.c', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1278 |
'mercurial/cext/revlog.c'], |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1279 |
'hgdirectffi', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1280 |
'hg-direct-ffi', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1281 |
include_dirs=common_include_dirs, |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1282 |
depends=common_depends + ['mercurial/cext/charencode.h', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1283 |
'mercurial/cext/revlog.h', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1284 |
'rust/hg-core/src/ancestors.rs', |
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1285 |
'rust/hg-core/src/lib.rs']), |
32367
a9c71d578a1c
osutil: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents:
32251
diff
changeset
|
1286 |
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
|
1287 |
include_dirs=common_include_dirs, |
30408
ce9a3033c118
setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents:
30346
diff
changeset
|
1288 |
extra_compile_args=osutil_cflags, |
25074
0021ad4c2309
setup: integrate osutil C extension into extmodules initialization
Adrian Buehlmann <adrian@cadifra.com>
parents:
25073
diff
changeset
|
1289 |
extra_link_args=osutil_ldflags, |
0021ad4c2309
setup: integrate osutil C extension into extmodules initialization
Adrian Buehlmann <adrian@cadifra.com>
parents:
25073
diff
changeset
|
1290 |
depends=common_depends), |
37180
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
1291 |
Extension( |
922b3fae9c7d
setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37130
diff
changeset
|
1292 |
'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
|
1293 |
'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
|
1294 |
]), |
28432
2377c4ac4eec
fsmonitor: dependencies for new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
28431
diff
changeset
|
1295 |
Extension('hgext.fsmonitor.pywatchman.bser', |
2377c4ac4eec
fsmonitor: dependencies for new experimental extension
Martijn Pieters <mjpieters@fb.com>
parents:
28431
diff
changeset
|
1296 |
['hgext/fsmonitor/pywatchman/bser.c']), |
42453
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1297 |
RustStandaloneExtension('mercurial.rustext', 'hg-cpython', 'librusthg', |
94167e701e12
rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents:
42451
diff
changeset
|
1298 |
py3_features='python3'), |
5396
5105b119edd2
Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5197
diff
changeset
|
1299 |
] |
5105b119edd2
Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5197
diff
changeset
|
1300 |
|
40967
462a26756f70
rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents:
40966
diff
changeset
|
1301 |
|
30436
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
1302 |
sys.path.insert(0, 'contrib/python-zstandard') |
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
1303 |
import setup_zstd |
40121
73fef626dae3
zstandard: vendor python-zstandard 0.10.1
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39986
diff
changeset
|
1304 |
extmodules.append(setup_zstd.get_c_extension( |
73fef626dae3
zstandard: vendor python-zstandard 0.10.1
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39986
diff
changeset
|
1305 |
name='mercurial.zstd', |
73fef626dae3
zstandard: vendor python-zstandard 0.10.1
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39986
diff
changeset
|
1306 |
root=os.path.abspath(os.path.dirname(__file__)))) |
30436
788ea4ac4388
setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30408
diff
changeset
|
1307 |
|
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1308 |
try: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1309 |
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
|
1310 |
|
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1311 |
# 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
|
1312 |
mingw32compilerclass = cygwinccompiler.Mingw32CCompiler |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
1313 |
|
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1314 |
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
|
1315 |
def __init__(self, *args, **kwargs): |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
1316 |
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
|
1317 |
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
|
1318 |
try: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1319 |
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
|
1320 |
except ValueError: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1321 |
pass |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
1322 |
|
23677
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1323 |
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
|
1324 |
except ImportError: |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1325 |
# 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
|
1326 |
# 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
|
1327 |
# DiskStation boxes |
6bc1702e7333
setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents:
23647
diff
changeset
|
1328 |
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
|
1329 |
pass |
17121
d13f47c800fd
setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents:
17061
diff
changeset
|
1330 |
|
32782
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
1331 |
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
|
1332 |
# 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
|
1333 |
# 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
|
1334 |
# effect. |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
1335 |
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
|
1336 |
|
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
1337 |
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
|
1338 |
|
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
1339 |
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
|
1340 |
def initialize(self): |
33669
7686cbb0ba41
setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents:
33600
diff
changeset
|
1341 |
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
|
1342 |
# "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
|
1343 |
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
|
1344 |
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
|
1345 |
|
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
1346 |
msvccompiler.MSVCCompiler = HackedMSVCCompiler |
9a4adc76c88a
setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents:
32725
diff
changeset
|
1347 |
|
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1348 |
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
|
1349 |
'help/*.txt', |
27374
7a70ae647e54
setup.py: package internals help files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27348
diff
changeset
|
1350 |
'help/internals/*.txt', |
23142
c4ce077588d0
config: introduce "built-in" default configuration settings in default.d
Mads Kiilerich <madski@unity3d.com>
parents:
22640
diff
changeset
|
1351 |
'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
|
1352 |
'dummycert.pem']} |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1353 |
|
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1354 |
def ordinarypath(p): |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1355 |
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
|
1356 |
|
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10264
diff
changeset
|
1357 |
for root in ('templates',): |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1358 |
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
|
1359 |
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
|
1360 |
dirs[:] = filter(ordinarypath, dirs) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1361 |
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
|
1362 |
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
|
1363 |
packagedata['mercurial'].append(f) |
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1364 |
|
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
1365 |
datafiles = [] |
31316
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
1366 |
|
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
1367 |
# 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
|
1368 |
# 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
|
1369 |
# 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
|
1370 |
# when operated on. |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
1371 |
assert isinstance(version, bytes) |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
1372 |
setupversion = version.decode('ascii') |
70bc35df3e54
setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31308
diff
changeset
|
1373 |
|
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1374 |
extra = {} |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1375 |
|
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1376 |
py2exepackages = [ |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1377 |
'hgdemandimport', |
41918
5d9fdc9b0178
setup: include hgext3rd package in py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41917
diff
changeset
|
1378 |
'hgext3rd', |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1379 |
'hgext', |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1380 |
'email', |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1381 |
# implicitly imported per module policy |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1382 |
# (cffi wouldn't be used as a frozen exe) |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1383 |
'mercurial.cext', |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1384 |
#'mercurial.cffi', |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1385 |
'mercurial.pure', |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1386 |
] |
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1387 |
|
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1388 |
py2exeexcludes = [] |
41954
e5ac701e5b7c
setup: exclude crypt32.dll in py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41953
diff
changeset
|
1389 |
py2exedllexcludes = ['crypt32.dll'] |
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1390 |
|
33600
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
1391 |
if issetuptools: |
47829b89c8c6
setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents:
33599
diff
changeset
|
1392 |
extra['python_requires'] = supportedpy |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1393 |
|
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1394 |
if py2exeloaded: |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1395 |
extra['console'] = [ |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1396 |
{'script':'hg', |
41455
8427fea04017
copyright: update to 2019
Anton Shestakov <av6@dwimlabs.net>
parents:
41161
diff
changeset
|
1397 |
'copyright':'Copyright (C) 2005-2019 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
|
1398 |
'product_version':version}] |
41917
ac32e04e887f
setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
1399 |
# Sub command of 'build' because 'py2exe' does not handle sub_commands. |
ac32e04e887f
setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
1400 |
# Need to override hgbuild because it has a private copy of |
ac32e04e887f
setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
1401 |
# build.sub_commands. |
ac32e04e887f
setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41916
diff
changeset
|
1402 |
hgbuild.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
|
1403 |
# 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
|
1404 |
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
|
1405 |
|
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1406 |
# We allow some configuration to be supplemented via environment |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1407 |
# variables. This is better than setup.cfg files because it allows |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1408 |
# supplementing configs instead of replacing them. |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1409 |
extrapackages = os.environ.get('HG_PY2EXE_EXTRA_PACKAGES') |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1410 |
if extrapackages: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1411 |
py2exepackages.extend(extrapackages.split(' ')) |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1412 |
|
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1413 |
excludes = os.environ.get('HG_PY2EXE_EXTRA_EXCLUDES') |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1414 |
if excludes: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1415 |
py2exeexcludes.extend(excludes.split(' ')) |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1416 |
|
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1417 |
dllexcludes = os.environ.get('HG_PY2EXE_EXTRA_DLL_EXCLUDES') |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1418 |
if dllexcludes: |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1419 |
py2exedllexcludes.extend(dllexcludes.split(' ')) |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1420 |
|
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1421 |
if os.name == 'nt': |
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1422 |
# 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
|
1423 |
# form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535 |
40383
a9e303dcd1e1
py3: stringify setupversion on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
40273
diff
changeset
|
1424 |
setupversion = setupversion.split(r'+', 1)[0] |
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
1425 |
|
13583
e42d18538e1d
fix compiling of extensions for OS X and XCode 4.0
Alexander Solovyov <alexander@solovyov.net>
parents:
13400
diff
changeset
|
1426 |
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
|
1427 |
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
|
1428 |
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
|
1429 |
version = version[0] |
25043
facaceeb85ac
setup: decode xcode version number on python3
Augie Fackler <augie@google.com>
parents:
25009
diff
changeset
|
1430 |
if sys.version_info[0] == 3: |
facaceeb85ac
setup: decode xcode version number on python3
Augie Fackler <augie@google.com>
parents:
25009
diff
changeset
|
1431 |
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
|
1432 |
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
|
1433 |
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
|
1434 |
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
|
1435 |
else: |
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1436 |
# 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
|
1437 |
# 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
|
1438 |
# 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
|
1439 |
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
|
1440 |
xcode51 = False |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1441 |
|
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
|
1442 |
# 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
|
1443 |
# distutils.sysconfig |
16187
82ce91a9fd94
setup: handle output from Apple's Xcode 4.3 better (issue3277)
Greg Ward <greg@gerg.ca>
parents:
15527
diff
changeset
|
1444 |
if xcode4: |
14324
d3a49a52f117
Hardcoding ARCHFLAGS breaks the build against fink's python
Brendan Cully <brendan@kublai.com>
parents:
14295
diff
changeset
|
1445 |
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
|
1446 |
|
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
|
1447 |
# 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
|
1448 |
# -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
|
1449 |
# 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
|
1450 |
# 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
|
1451 |
# 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
|
1452 |
# 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
|
1453 |
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
|
1454 |
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
|
1455 |
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
|
1456 |
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
|
1457 |
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
|
1458 |
|
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
|
1459 |
setup(name='mercurial', |
10400
fb203201ce30
setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents:
10282
diff
changeset
|
1460 |
version=setupversion, |
18753
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1461 |
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
|
1462 |
author_email='mercurial@mercurial-scm.org', |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
25409
diff
changeset
|
1463 |
url='https://mercurial-scm.org/', |
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
25409
diff
changeset
|
1464 |
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
|
1465 |
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
|
1466 |
'control) system'), |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1467 |
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
|
1468 |
' 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
|
1469 |
' 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
|
1470 |
'Mozilla.'), |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1471 |
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
|
1472 |
classifiers=[ |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1473 |
'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
|
1474 |
'Environment :: Console', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1475 |
'Intended Audience :: Developers', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1476 |
'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
|
1477 |
'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
|
1478 |
'Natural Language :: Danish', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1479 |
'Natural Language :: English', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1480 |
'Natural Language :: German', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1481 |
'Natural Language :: Italian', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1482 |
'Natural Language :: Japanese', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1483 |
'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
|
1484 |
'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
|
1485 |
'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
|
1486 |
'Operating System :: POSIX', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1487 |
'Programming Language :: C', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1488 |
'Programming Language :: Python', |
3f59cb1ccc73
setup.py: add metadata to register package to PyPI
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
17926
diff
changeset
|
1489 |
'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
|
1490 |
], |
6513
66e87c11447d
Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents:
6389
diff
changeset
|
1491 |
scripts=scripts, |
6239
39cfcef4f463
Add inotify extension
Bryan O'Sullivan <bos@serpentine.com>
parents:
6009
diff
changeset
|
1492 |
packages=packages, |
10000
16f49d671c7f
setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents:
9999
diff
changeset
|
1493 |
ext_modules=extmodules, |
7648
02e358a3a8a7
i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents:
7647
diff
changeset
|
1494 |
data_files=datafiles, |
9999
f91e5630ce7e
setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
9998
diff
changeset
|
1495 |
package_data=packagedata, |
3238
3dba9ec89164
Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2402
diff
changeset
|
1496 |
cmdclass=cmdclass, |
15458
c3a6ec304055
setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents:
15388
diff
changeset
|
1497 |
distclass=hgdist, |
38002
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1498 |
options={ |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1499 |
'py2exe': { |
41953
d6e3c16d48ab
packaging: don't bundle DLLs in py2exe library.zip for x86 builds
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41918
diff
changeset
|
1500 |
'bundle_files': 3, |
41916
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1501 |
'dll_excludes': py2exedllexcludes, |
260305e8ddbd
setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41854
diff
changeset
|
1502 |
'excludes': py2exeexcludes, |
41851
ed35057421ae
setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41850
diff
changeset
|
1503 |
'packages': py2exepackages, |
38002
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1504 |
}, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1505 |
'bdist_mpkg': { |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1506 |
'zipdist': False, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1507 |
'license': 'COPYING', |
38012
e5d2248dcc39
packaging: move contrib/macosx to contrib/packaging/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38002
diff
changeset
|
1508 |
'readme': 'contrib/packaging/macosx/Readme.html', |
e5d2248dcc39
packaging: move contrib/macosx to contrib/packaging/
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38002
diff
changeset
|
1509 |
'welcome': 'contrib/packaging/macosx/Welcome.html', |
38002
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1510 |
}, |
cd4959c33d1a
setup: reformat options argument
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37627
diff
changeset
|
1511 |
}, |
3893 | 1512 |
**extra) |