annotate setup.py @ 51019:ed65e97db7bc

convert: use `changelogrevision` to fetch changeset data instead of read This `changelogrevision` is a higher level function that will remain simple to use as we refactor the revlog.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 25 Sep 2023 12:32:42 +0200
parents 727428c7e1fc
children 3c5b66d03c37
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 429
diff changeset
1 #
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 429
diff changeset
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
33591
ee11d18fcd3c setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents: 33589
diff changeset
6 import os
ee11d18fcd3c setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents: 33589
diff changeset
7
48941
656196c1d442 setup: drop support for Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48933
diff changeset
8 # Mercurial can't work on 3.6.0 or 3.6.1 due to a bug in % formatting
656196c1d442 setup: drop support for Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48933
diff changeset
9 # in bytestrings.
43349
c3e10f705a6c setup: allow py3 install without env vars
Ian Moody <moz-ian@perix.co.uk>
parents: 43076
diff changeset
10 supportedpy = ','.join(
c3e10f705a6c setup: allow py3 install without env vars
Ian Moody <moz-ian@perix.co.uk>
parents: 43076
diff changeset
11 [
48941
656196c1d442 setup: drop support for Python 3.5
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48933
diff changeset
12 '>=3.6.2',
43349
c3e10f705a6c setup: allow py3 install without env vars
Ian Moody <moz-ian@perix.co.uk>
parents: 43076
diff changeset
13 ]
c3e10f705a6c setup: allow py3 install without env vars
Ian Moody <moz-ian@perix.co.uk>
parents: 43076
diff changeset
14 )
33587
e0bbe32d8b55 setup: explicitly declare supported Python versions
Augie Fackler <augie@google.com>
parents: 33131
diff changeset
15
14295
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
16 import sys, platform
42473
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
17 import sysconfig
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
18
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
19
48917
3ce8001fd768 setup: remove more Python 2 support code
Augie Fackler <augie@google.com>
parents: 48916
diff changeset
20 def sysstr(s):
3ce8001fd768 setup: remove more Python 2 support code
Augie Fackler <augie@google.com>
parents: 48916
diff changeset
21 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
22
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
23
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
24 def eprint(*args, **kwargs):
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
25 kwargs['file'] = sys.stderr
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
26 print(*args, **kwargs)
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
27
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
28
44933
4c53c12b92d5 setup: require a Python version with modern SSL features
Manuel Jacob <me@manueljacob.de>
parents: 44911
diff changeset
29 import ssl
4c53c12b92d5 setup: require a Python version with modern SSL features
Manuel Jacob <me@manueljacob.de>
parents: 44911
diff changeset
30
44952
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
31 # ssl.HAS_TLSv1* are preferred to check support but they were added in Python
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
32 # 3.7. Prior to CPython commit 6e8cda91d92da72800d891b2fc2073ecbc134d98
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
33 # (backported to the 3.7 branch), ssl.PROTOCOL_TLSv1_1 / ssl.PROTOCOL_TLSv1_2
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
34 # were defined only if compiled against a OpenSSL version with TLS 1.1 / 1.2
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
35 # support. At the mentioned commit, they were unconditionally defined.
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
36 _notset = object()
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
37 has_tlsv1_1 = getattr(ssl, 'HAS_TLSv1_1', _notset)
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
38 if has_tlsv1_1 is _notset:
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
39 has_tlsv1_1 = getattr(ssl, 'PROTOCOL_TLSv1_1', _notset) is not _notset
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
40 has_tlsv1_2 = getattr(ssl, 'HAS_TLSv1_2', _notset)
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
41 if has_tlsv1_2 is _notset:
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
42 has_tlsv1_2 = getattr(ssl, 'PROTOCOL_TLSv1_2', _notset) is not _notset
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
43 if not (has_tlsv1_1 or has_tlsv1_2):
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
44 error = """
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
45 The `ssl` module does not advertise support for TLS 1.1 or TLS 1.2.
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
46 Please make sure that your Python installation was compiled against an OpenSSL
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
47 version enabling these features (likely this requires the OpenSSL version to
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
48 be at least 1.0.1).
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
49 """
48918
1371c18e467d setup: remove printf trampoline
Augie Fackler <augie@google.com>
parents: 48917
diff changeset
50 print(error, file=sys.stderr)
44952
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
51 sys.exit(1)
95c832849955 setup: require that Python has TLS 1.1 or TLS 1.2
Manuel Jacob <me@manueljacob.de>
parents: 44933
diff changeset
52
48921
3491c450dcae setup: remove Python 2 support code for determining dylib suffix
Augie Fackler <augie@google.com>
parents: 48920
diff changeset
53 DYLIB_SUFFIX = sysconfig.get_config_vars()['EXT_SUFFIX']
42473
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
54
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
55 # Solaris Python packaging brain damage
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
56 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
57 import hashlib
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
58
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
59 sha = hashlib.sha1()
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
60 except ImportError:
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
61 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
62 import sha
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
63
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
64 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
65 except ImportError:
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
66 raise SystemExit(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
67 "Couldn't import standard hashlib (incomplete Python install)."
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
68 )
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
69
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
70 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
71 import zlib
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
72
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
73 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
74 except ImportError:
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
75 raise SystemExit(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
76 "Couldn't import standard zlib (incomplete Python install)."
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
77 )
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
78
14295
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
79 # 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
80 isironpython = False
10761
16a13fdb4b36 setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10521
diff changeset
81 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
82 isironpython = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
83 platform.python_implementation().lower().find("ironpython") != -1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
84 )
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
85 except AttributeError:
14295
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
86 pass
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
87
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
88 if isironpython:
15492
36f076d03b34 setup: make script executable with python3
Simon Heimberg <simohe@besonet.ch>
parents: 15460
diff changeset
89 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
90 else:
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
91 try:
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
92 import bz2
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
93
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
94 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
95 except ImportError:
14295
bb7e3b3e6e11 setup.py: workaround for missing bz2 module in IronPython
Zachary Gramana <zgramana@pottsconsultinggroup.com>
parents: 14243
diff changeset
96 raise SystemExit(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
97 "Couldn't import standard bz2 (incomplete Python install)."
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
98 )
10761
16a13fdb4b36 setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10521
diff changeset
99
24192
390410a6545d setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents: 24191
diff changeset
100 ispypy = "PyPy" in sys.version
390410a6545d setup.py: do not install c extensions on pypy
Joan Massich <mailsik@gmail.com>
parents: 24191
diff changeset
101
29020
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
102 import ctypes
33591
ee11d18fcd3c setup: fix mistake that prevented Python 3 from being excluded
Augie Fackler <augie@google.com>
parents: 33589
diff changeset
103 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
104 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
105 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
106 import tempfile
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
107
31298
718a57e95a89 setup: use setuptools on Windows (issue5400)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30869
diff changeset
108 # 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: 30869
diff changeset
109 # 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: 30869
diff changeset
110 # we don't have issues.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
111 issetuptools = os.name == 'nt' or 'FORCE_SETUPTOOLS' in os.environ
33600
47829b89c8c6 setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents: 33599
diff changeset
112 if issetuptools:
26600
e8497889edab setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents: 26421
diff changeset
113 from setuptools import setup
e8497889edab setup: import setup from setuptools if FORCE_SETUPTOOLS is set
Nathan Goldbaum <ngoldbau@ucsc.edu>
parents: 26421
diff changeset
114 else:
50730
b1ac55606eb7 setup: fall back to setuptools setup if distutils isn't available
Mads Kiilerich <mads@kiilerich.com>
parents: 50672
diff changeset
115 try:
b1ac55606eb7 setup: fall back to setuptools setup if distutils isn't available
Mads Kiilerich <mads@kiilerich.com>
parents: 50672
diff changeset
116 from distutils.core import setup
b1ac55606eb7 setup: fall back to setuptools setup if distutils isn't available
Mads Kiilerich <mads@kiilerich.com>
parents: 50672
diff changeset
117 except ModuleNotFoundError:
b1ac55606eb7 setup: fall back to setuptools setup if distutils isn't available
Mads Kiilerich <mads@kiilerich.com>
parents: 50672
diff changeset
118 from setuptools import setup
30418
ce9a3033c118 setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents: 30356
diff changeset
119 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
120 from distutils.core import Command, Extension
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
121 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
122 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
123 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
124 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
125 from distutils.command.build_scripts import build_scripts
32670
331dcf199039 setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents: 32539
diff changeset
126 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
127 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
128 from distutils.command.install_scripts import install_scripts
46233
172b294b6d65 setup: don't import distutils prior to checking FORCE_SETUPTOOLS
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46137
diff changeset
129 from distutils import log
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
130 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
131 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
132 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
133 CCompilerError,
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
134 DistutilsError,
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
135 DistutilsExecError,
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
136 )
49958
dd804d83822c setup: drop legacy osx compiler tuning to enable universal builds
Matt Harbison <matt_harbison@yahoo.com>
parents: 49927
diff changeset
137 from distutils.sysconfig import get_python_inc
40420
b6bc2293cdf3 setup: explain to distutils how we write rc versions
"Paul Morelle <paul.morelle@octobus.net"
parents: 40397
diff changeset
138
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
139
35238
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
140 def write_if_changed(path, content):
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
141 """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: 35126
diff changeset
142 if os.path.exists(path):
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
143 with open(path, 'rb') as fh:
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
144 current = fh.read()
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
145 else:
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
146 current = b''
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
147
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
148 if current != content:
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
149 with open(path, 'wb') as fh:
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
150 fh.write(content)
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
151
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
152
6513
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
153 scripts = ['hg']
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
154 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
155 # 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
156 scripts.append('contrib/win32/hg.bat')
3893
070628929e1f Fix setup.py warning
Matt Mackall <mpm@selenic.com>
parents: 3892
diff changeset
157
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
158
31565
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
159 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
160 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
161 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
162 try:
31565
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
163 fname = os.path.join(tmpdir, 'testcomp.c')
25089
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
164 f = open(fname, 'w')
31565
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
165 f.write(code)
25089
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
166 f.close()
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
167 # 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
168 # from the compiler.
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
169 # 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
170 # for a function on Windows.
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
171 devnull = open('/dev/null', 'w')
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
172 oldstderr = os.dup(sys.stderr.fileno())
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
173 os.dup2(devnull.fileno(), sys.stderr.fileno())
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
174 objects = cc.compile([fname], output_dir=tmpdir)
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
175 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
176 return True
25089
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
177 except Exception:
c6427cd45760 setup: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 25074
diff changeset
178 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
179 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
180 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
181 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
182 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
183 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
184 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
185
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
186
31565
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
187 # simplified version of distutils.ccompiler.CCompiler.has_function
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
188 # that actually removes its temporary files.
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
189 def hasfunction(cc, funcname):
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
190 code = 'int main(void) { %s(); }\n' % funcname
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
191 return cancompile(cc, code)
9639ff4a93ae setup: split "hasfunction" to test arbitrary code
Jun Wu <quark@fb.com>
parents: 31325
diff changeset
192
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
193
31566
5a0460219649 setup: add a function to test header files
Jun Wu <quark@fb.com>
parents: 31565
diff changeset
194 def hasheader(cc, headername):
5a0460219649 setup: add a function to test header files
Jun Wu <quark@fb.com>
parents: 31565
diff changeset
195 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: 31565
diff changeset
196 return cancompile(cc, code)
5a0460219649 setup: add a function to test header files
Jun Wu <quark@fb.com>
parents: 31565
diff changeset
197
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
198
1283
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
199 # py2exe needs to be installed to work
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
200 try:
1294
372971e1c40d Clean up whitespace damage.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1284
diff changeset
201 import py2exe
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
202
49128
97f2554cb647 setup: fix the py2exe logic to work with py3
Matt Harbison <matt_harbison@yahoo.com>
parents: 49103
diff changeset
203 py2exe.patch_distutils()
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
204 py2exeloaded = True
15527
9926aab3d0b5 setup: fix py2exe generation broken by c3a6ec304055 (issue3116)
Pascal Quantin <pascal.quantin@gmail.com>
parents: 15523
diff changeset
205 # 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
206 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
207 except ImportError:
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
208 py2exeloaded = False
1283
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
209
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
210
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
211 def runcmd(cmd, env, cwd=None):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
212 p = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
213 cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env, cwd=cwd
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
214 )
32904
19b0fd4b5570 plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com>
parents: 32802
diff changeset
215 out, err = p.communicate()
33123
87ee783f7299 setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents: 33122
diff changeset
216 return p.returncode, out, err
13636
4bfff063aed6 setup: fix mac build broken by e42d18538e1d
Jon M. Dugan <jdugan@x1024.net>
parents: 13594
diff changeset
217
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
218
49037
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48941
diff changeset
219 class hgcommand:
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
220 def __init__(self, cmd, env):
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
221 self.cmd = cmd
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
222 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
223
33125
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
224 def run(self, args):
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
225 cmd = self.cmd + args
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
226 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
227 err = filterhgerr(err)
49650
ac93876ea2df setup: treat error output and non-zero return code differently
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49649
diff changeset
228 if err:
48918
1371c18e467d setup: remove printf trampoline
Augie Fackler <augie@google.com>
parents: 48917
diff changeset
229 print("stderr from '%s':" % (' '.join(cmd)), file=sys.stderr)
1371c18e467d setup: remove printf trampoline
Augie Fackler <augie@google.com>
parents: 48917
diff changeset
230 print(err, file=sys.stderr)
49650
ac93876ea2df setup: treat error output and non-zero return code differently
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49649
diff changeset
231 if returncode != 0:
44214
bda050bc9987 py3: make setup.py's hgcommand() consistently return bytes
Martin von Zweigbergk <martinvonz@google.com>
parents: 44189
diff changeset
232 return b''
33125
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
233 return out
8548
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
234
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
235
33598
f30714a55523 setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents: 33591
diff changeset
236 def filterhgerr(err):
f30714a55523 setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents: 33591
diff changeset
237 # 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
238 # 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
239 # 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
240 # 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
241 # a missing __init__.py in mercurial/locale, we also ignore that.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
242 err = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
243 e
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
244 for e in err.splitlines()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
245 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
246 not e.startswith(b'not trusting file')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
247 and not e.startswith(b'warning: Not importing')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
248 and not e.startswith(b'obsolete feature not enabled')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
249 and not e.startswith(b'*** failed to import extension')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
250 and not e.startswith(b'devel-warn:')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
251 and not (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
252 e.startswith(b'(third party extension')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
253 and e.endswith(b'or newer of Mercurial; disabling)')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
254 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
255 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
256 ]
33598
f30714a55523 setup: do not select hg executable that prints unexpected warnings
Yuya Nishihara <yuya@tcha.org>
parents: 33591
diff changeset
257 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
258
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
259
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
260 def findhg():
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
261 """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: 33125
diff changeset
262 repository contents.
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
263
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
264 Returns an hgcommand object."""
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
265 # 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: 33125
diff changeset
266 # 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: 33125
diff changeset
267 #
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
268 # 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: 33125
diff changeset
269 # 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: 33125
diff changeset
270 hgenv = os.environ.copy()
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
271 # 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: 33125
diff changeset
272 # 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: 33125
diff changeset
273 hgenv['HGPLAIN'] = '1'
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
274 hgenv['LANGUAGE'] = 'C'
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
275 hgcmd = ['hg']
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
276 # Run a simple "hg log" command just to see if using hg from the user's
40993
f6987f654356 setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40980
diff changeset
277 # 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: 40980
diff changeset
278 # 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: 40980
diff changeset
279 # python invocation of local hg, where pythonXY.dll can always be found.
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
280 check_cmd = ['log', '-r.', '-Ttest']
50771
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
281 attempts = []
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
282
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
283 def attempt(cmd, env):
40993
f6987f654356 setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40980
diff changeset
284 try:
f6987f654356 setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40980
diff changeset
285 retcode, out, err = runcmd(hgcmd + check_cmd, hgenv)
50771
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
286 res = (True, retcode, out, err)
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
287 if retcode == 0 and not filterhgerr(err):
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
288 return True
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
289 except EnvironmentError as e:
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
290 res = (False, e)
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
291 attempts.append((cmd, res))
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
292 return False
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
293
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
294 if os.name != 'nt' or not os.path.exists("hg.exe"):
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
295 if attempt(hgcmd + check_cmd, hgenv):
40993
f6987f654356 setup: avoid attempting to invoke the system-wide hg.exe on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40980
diff changeset
296 return hgcommand(hgcmd, hgenv)
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
297
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
298 # 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: 33125
diff changeset
299 hgenv = localhgenv()
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
300 hgcmd = [sys.executable, 'hg']
50771
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
301 if attempt(hgcmd + check_cmd, hgenv):
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
302 return hgcommand(hgcmd, hgenv)
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
303
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
304 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
305 eprint(r"/!\ Unable to find a working hg binary")
50771
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
306 eprint(r"/!\ Version cannot be extracted from the repository")
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
307 eprint(r"/!\ Re-run the setup once a first version is built")
50771
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
308 eprint(r"/!\ Attempts:")
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
309 for i, e in enumerate(attempts):
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
310 eprint(r"/!\ attempt #%d:" % (i))
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
311 eprint(r"/!\ cmd: ", e[0])
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
312 res = e[1]
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
313 if res[0]:
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
314 eprint(r"/!\ return code:", res[1])
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
315 eprint("/!\\ std output:\n%s" % (res[2].decode()), end="")
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
316 eprint("/!\\ std error:\n%s" % (res[3].decode()), end="")
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
317 else:
5dc7e1907e48 setup: make the error "Unable to find a working hg binary" more informative
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50730
diff changeset
318 eprint(r"/!\ exception: ", res[1])
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
319 return None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
320
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
321
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
322 def localhgenv():
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
323 """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: 33125
diff changeset
324 mercurial from the local repository."""
33124
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
325 # 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: 33123
diff changeset
326 # care to not use any hgrc files and do no localization.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
327 env = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
328 'HGMODULEPOLICY': 'py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
329 'HGRCPATH': '',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
330 'LANGUAGE': 'C',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
331 'PATH': '',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
332 } # make pypi modules that use os.environ['PATH'] happy
33124
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
333 if 'LD_LIBRARY_PATH' in os.environ:
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
334 env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
335 if 'SystemRoot' in os.environ:
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
336 # 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: 33123
diff changeset
337 # https://bugs.python.org/issue13524#msg148850
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
338 env['SystemRoot'] = os.environ['SystemRoot']
33129
6ef5f0c95d64 setup: fix localhgenv
Jun Wu <quark@fb.com>
parents: 33126
diff changeset
339 return env
33124
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
340
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
341
33124
155d760da7b2 setup: move environment computation into a helper function
Adam Simpkins <simpkins@fb.com>
parents: 33123
diff changeset
342 version = ''
15367
b357a972d6cd setup: set env global earlier (3073)
Matt Mackall <mpm@selenic.com>
parents: 15215
diff changeset
343
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
344
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
345 def _try_get_version():
33126
8b20338b989e setup: prefer using the system hg to interact with the local repository
Adam Simpkins <simpkins@fb.com>
parents: 33125
diff changeset
346 hg = findhg()
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
347 if hg is None:
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
348 return ''
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
349 hgid = None
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
350 numerictags = []
33125
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
351 cmd = ['log', '-r', '.', '--template', '{tags}\n']
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
352 pieces = sysstr(hg.run(cmd)).split()
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
353 numerictags = [t for t in pieces if t[0:1].isdigit()]
35255
d73ccc63b8f9 setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 35238
diff changeset
354 hgid = sysstr(hg.run(['id', '-i'])).strip()
49660
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
355 if hgid.count('+') == 2:
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
356 hgid = hgid.replace("+", ".", 1)
33122
6fdc1518983e setup: fail if we cannot determine the version number
Adam Simpkins <simpkins@fb.com>
parents: 33115
diff changeset
357 if not hgid:
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
358 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
359 eprint(r"/!\ Unable to determine hg version from local repository")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
360 eprint(r"/!\ Failed to retrieve current revision tags")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
361 return ''
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
362 if numerictags: # tag(s) found
17709
b7fff47bb128 setup: calculate version more correctly
Bryan O'Sullivan <bryano@fb.com>
parents: 17606
diff changeset
363 version = numerictags[-1]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
364 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
365 version += '+'
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
366 else: # no tag found on the checked out revision
49660
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
367 ltagcmd = ['log', '--rev', 'wdir()', '--template', '{latesttag}']
35255
d73ccc63b8f9 setup: convert version strings to unicode on Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 35238
diff changeset
368 ltag = sysstr(hg.run(ltagcmd))
49649
8d390a13474d setup: make the version computation process more resistant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49615
diff changeset
369 if not ltag:
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
370 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
371 eprint(r"/!\ Unable to determine hg version from local repository")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
372 eprint(
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
373 r"/!\ Failed to retrieve current revision distance to lated tag"
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
374 )
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
375 return ''
49660
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
376 changessincecmd = [
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
377 'log',
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
378 '-T',
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
379 'x\n',
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
380 '-r',
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
381 "only(parents(),'%s')" % ltag,
593f5e4076ff setup: support building from an ongoing merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49656
diff changeset
382 ]
33125
fc290a39590d setup: replace runhg() with an hgcommand helper class
Adam Simpkins <simpkins@fb.com>
parents: 33124
diff changeset
383 changessince = len(hg.run(changessincecmd).splitlines())
46564
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
384 version = '%s+hg%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
385 if version.endswith('+'):
46564
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
386 version = version[:-1] + 'local' + time.strftime('%Y%m%d')
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
387 return version
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
388
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
389
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
390 if os.path.isdir('.hg'):
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
391 version = _try_get_version()
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
392 elif os.path.exists('.hg_archival.txt'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
393 kw = dict(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
394 [[t.strip() for t in l.split(':', 1)] for l in open('.hg_archival.txt')]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
395 )
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
396 if 'tag' in kw:
27637
b502138f5faa cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents: 27374
diff changeset
397 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
398 elif 'latesttag' in kw:
23646
9641643fac71 setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents: 23392
diff changeset
399 if 'changessincelatesttag' in kw:
46564
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
400 version = (
46573
359bdd8fc60a build: make version from .hg_archival.txt consistent with that from .hg/
Martin von Zweigbergk <martinvonz@google.com>
parents: 46564
diff changeset
401 '%(latesttag)s+hg%(changessincelatesttag)s.%(node).12s' % kw
46564
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
402 )
23646
9641643fac71 setup: use changessincelatesttag from archive if present
Siddharth Agarwal <sid0@fb.com>
parents: 23392
diff changeset
403 else:
46573
359bdd8fc60a build: make version from .hg_archival.txt consistent with that from .hg/
Martin von Zweigbergk <martinvonz@google.com>
parents: 46564
diff changeset
404 version = '%(latesttag)s+hg%(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
405 else:
46573
359bdd8fc60a build: make version from .hg_archival.txt consistent with that from .hg/
Martin von Zweigbergk <martinvonz@google.com>
parents: 46564
diff changeset
406 version = '0+hg' + kw.get('node', '')[:12]
46996
8d2b62d716b0 packaging: extract pre-computed version when running from plain tarball
Joerg Sonnenberger <joerg@bec.de>
parents: 46869
diff changeset
407 elif os.path.exists('mercurial/__version__.py'):
47007
fceccc36873d lint: fix failing code check
Raphaël Gomès <rgomes@octobus.net>
parents: 46996
diff changeset
408 with open('mercurial/__version__.py') as f:
fceccc36873d lint: fix failing code check
Raphaël Gomès <rgomes@octobus.net>
parents: 46996
diff changeset
409 data = f.read()
46996
8d2b62d716b0 packaging: extract pre-computed version when running from plain tarball
Joerg Sonnenberger <joerg@bec.de>
parents: 46869
diff changeset
410 version = re.search('version = b"(.*)"', data).group(1)
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
411 if not version:
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
412 if os.environ.get("MERCURIAL_SETUP_MAKE_LOCAL") == "1":
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
413 version = "0.0+0"
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
414 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
415 eprint(r"/!\ Using '0.0+0' as the default version")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
416 eprint(r"/!\ Re-run make local once that first version is built")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
417 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
418 else:
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
419 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
420 eprint(r"/!\ Could not determine the Mercurial version")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
421 eprint(r"/!\ You need to build a local version first")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
422 eprint(r"/!\ Run `make local` and try again")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
423 eprint("/!\\")
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
424 msg = "Run `make local` first to get a working local version"
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
425 raise SystemExit(msg)
35238
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
426
49656
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
427 versionb = version
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
428 if not isinstance(versionb, bytes):
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
429 versionb = versionb.encode('ascii')
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
430
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
431 write_if_changed(
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
432 'mercurial/__version__.py',
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
433 b''.join(
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
434 [
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
435 b'# this file is autogenerated by setup.py\n'
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
436 b'version = b"%s"\n' % versionb,
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
437 ]
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
438 ),
010a1e73f69e setup: further improve the error path for version retrieval
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49650
diff changeset
439 )
8493
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
440
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
441
15460
f9f0731dbc56 setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents: 15459
diff changeset
442 class hgbuild(build):
f9f0731dbc56 setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents: 15459
diff changeset
443 # 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
444 # when build_py is run next.
28398
712298942c82 setup: remove support for 2to3
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28041
diff changeset
445 sub_commands = [('build_mo', None)] + build.sub_commands
15460
f9f0731dbc56 setup: subclass build command
Simon Heimberg <simohe@besonet.ch>
parents: 15459
diff changeset
446
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
447
15523
f9da84a950d0 setup: backout 8504699d1aa6
Matt Mackall <mpm@selenic.com>
parents: 15500
diff changeset
448 class hgbuildmo(build):
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
449
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
450 description = "build translations (.mo files)"
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
451
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
452 def run(self):
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
453 if not find_executable('msgfmt'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
454 self.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
455 "could not find msgfmt executable, no translations "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
456 "will be built"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
457 )
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
458 return
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
459
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
460 podir = 'i18n'
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
461 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
462 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
463 return
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
464
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
465 join = os.path.join
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
466 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
467 if not po.endswith('.po'):
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
468 continue
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
469 pofile = join(podir, po)
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
470 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
471 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
472 mobuildfile = join('mercurial', mofile)
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
473 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
474 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
475 # 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
476 cmd.append('-c')
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
477 self.mkpath(join('mercurial', modir))
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
478 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
479
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
480
15458
c3a6ec304055 setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents: 15388
diff changeset
481 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
482 pure = False
44499
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
483 rust = False
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
484 no_rust = False
29505
2dce3f96ad7b setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents: 29444
diff changeset
485 cffi = ispypy
15458
c3a6ec304055 setup: subclass distribution instead of overwriting original
Simon Heimberg <simohe@besonet.ch>
parents: 15388
diff changeset
486
41768
aaad36b88298 cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents: 41547
diff changeset
487 global_options = Distribution.global_options + [
aaad36b88298 cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents: 41547
diff changeset
488 ('pure', None, "use pure (slow) Python code instead of C extensions"),
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
489 ('rust', None, "use Rust extensions additionally to C extensions"),
44499
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
490 (
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
491 'no-rust',
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
492 None,
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
493 "do not use Rust extensions additionally to C extensions",
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
494 ),
41768
aaad36b88298 cleanup: use () to wrap long lines instead of \
Augie Fackler <augie@google.com>
parents: 41547
diff changeset
495 ]
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
496
44499
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
497 negative_opt = Distribution.negative_opt.copy()
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
498 boolean_options = ['pure', 'rust', 'no-rust']
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
499 negative_opt['no-rust'] = 'rust'
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
500
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
501 def _set_command_options(self, command_obj, option_dict=None):
44634
4c6189d45d67 setup: work around old versions of distutils breaking setup.py
Augie Fackler <augie@google.com>
parents: 44610
diff changeset
502 # Not all distutils versions in the wild have boolean_options.
4c6189d45d67 setup: work around old versions of distutils breaking setup.py
Augie Fackler <augie@google.com>
parents: 44610
diff changeset
503 # This should be cleaned up when we're Python 3 only.
4c6189d45d67 setup: work around old versions of distutils breaking setup.py
Augie Fackler <augie@google.com>
parents: 44610
diff changeset
504 command_obj.boolean_options = (
4c6189d45d67 setup: work around old versions of distutils breaking setup.py
Augie Fackler <augie@google.com>
parents: 44610
diff changeset
505 getattr(command_obj, 'boolean_options', []) + self.boolean_options
4c6189d45d67 setup: work around old versions of distutils breaking setup.py
Augie Fackler <augie@google.com>
parents: 44610
diff changeset
506 )
44499
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
507 return Distribution._set_command_options(
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
508 self, command_obj, option_dict=option_dict
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
509 )
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
510
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
511 def parse_command_line(self):
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
512 ret = Distribution.parse_command_line(self)
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
513 if not (self.rust or self.no_rust):
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
514 hgrustext = os.environ.get('HGWITHRUSTEXT')
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
515 # TODO record it for proper rebuild upon changes
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
516 # (see mercurial/__modulepolicy__.py)
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
517 if hgrustext != 'cpython' and hgrustext is not None:
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
518 if hgrustext:
48469
fff5942d445f typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents: 48303
diff changeset
519 msg = 'unknown HGWITHRUSTEXT value: %s' % hgrustext
48918
1371c18e467d setup: remove printf trampoline
Augie Fackler <augie@google.com>
parents: 48917
diff changeset
520 print(msg, file=sys.stderr)
44499
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
521 hgrustext = None
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
522 self.rust = hgrustext is not None
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
523 self.no_rust = not self.rust
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
524 return ret
06b0aa048007 setup-rust: add a --no-rust flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44497
diff changeset
525
15459
434c48e981b8 setup: has_ext_modules always returns false when pure is specified
Simon Heimberg <simohe@besonet.ch>
parents: 15458
diff changeset
526 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
527 # 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
528 # 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
529 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
530
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
531
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
532 # 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: 30445
diff changeset
533 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: 30445
diff changeset
534 buildextnegops['no-zstd'] = 'zstd'
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
535 buildextnegops['no-rust'] = 'rust'
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
536
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
537
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
538 class hgbuildext(build_ext):
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
539 user_options = build_ext.user_options + [
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
540 ('zstd', None, 'compile zstd bindings [default]'),
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
541 ('no-zstd', None, 'do not compile zstd bindings'),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
542 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
543 'rust',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
544 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
545 'compile Rust extensions if they are in use '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
546 '(requires Cargo) [default]',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
547 ),
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
548 ('no-rust', None, 'do not compile Rust extensions'),
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
549 ]
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
550
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
551 boolean_options = build_ext.boolean_options + ['zstd', 'rust']
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
552 negative_opt = buildextnegops
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
553
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
554 def initialize_options(self):
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
555 self.zstd = True
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
556 self.rust = True
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
557
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
558 return build_ext.initialize_options(self)
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
559
43044
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
560 def finalize_options(self):
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
561 # Unless overridden by the end user, build extensions in parallel.
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
562 # Only influences behavior on Python 3.5+.
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
563 if getattr(self, 'parallel', None) is None:
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
564 self.parallel = True
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
565
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
566 return build_ext.finalize_options(self)
f9d35f01b8b3 setup: build extensions in parallel by default
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42823
diff changeset
567
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
568 def build_extensions(self):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
569 ruststandalones = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
570 e for e in self.extensions if isinstance(e, RustStandaloneExtension)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
571 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
572 self.extensions = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
573 e for e in self.extensions if e not in ruststandalones
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
574 ]
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
575 # 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: 30445
diff changeset
576 if not self.zstd:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
577 self.extensions = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
578 e for e in self.extensions if e.name != 'mercurial.zstd'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
579 ]
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
580
48539
23ce9e7bf1e5 setup.py: fix some documentation typos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48469
diff changeset
581 # Build Rust standalone extensions if it'll be used
23ce9e7bf1e5 setup.py: fix some documentation typos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48469
diff changeset
582 # and its build is not explicitly disabled (for external build
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
583 # as Linux distributions would do)
44484
79ac59d3f73d setup-rust: remove the legacy 'direct-ffi' variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44470
diff changeset
584 if self.distribution.rust and self.rust:
46441
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
585 if not sys.platform.startswith('linux'):
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
586 self.warn(
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
587 "rust extensions have only been tested on Linux "
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
588 "and may not behave correctly on other platforms"
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
589 )
cabc5e9366c5 rust: lower compile error on non-linux platforms to a warning
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46315
diff changeset
590
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
591 for rustext in ruststandalones:
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
592 rustext.build('' if self.inplace else self.build_lib)
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
593
30459
0acf3fd718f1 setup: add flag to build_ext to control building zstd
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30445
diff changeset
594 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
595
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
596 def build_extension(self, ext):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
597 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
598 self.distribution.rust
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
599 and self.rust
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
600 and isinstance(ext, RustExtension)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
601 ):
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
602 ext.rustbuild()
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
603 try:
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
604 build_ext.build_extension(self, ext)
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
605 except CCompilerError:
12501
98f21e4d9633 setup: slight simplification
Martin Geisler <mg@lazybytes.net>
parents: 11533
diff changeset
606 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
607 raise
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
608 log.warn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
609 "Failed to build optional extension '%s' (skipping)", ext.name
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
610 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
611
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
612
27268
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
613 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
614 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
615 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
616 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
617
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
618 exebuilt = False
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
619 try:
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
620 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
621 exebuilt = True
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
622 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
623 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
624
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
625 if exebuilt:
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
626 # 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
627 # 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
628 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
629 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
630 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
631 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
632
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
633 # 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
634 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
635
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
636 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
637
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
638
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
639 class hgbuildpy(build_py):
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
640 def finalize_options(self):
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
641 build_py.finalize_options(self)
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
642
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
643 if self.distribution.pure:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
644 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
645 elif self.distribution.cffi:
30356
9cc438bf7d9a setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents: 29844
diff changeset
646 from mercurial.cffi import (
32538
05a16c19967e cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents: 32458
diff changeset
647 bdiffbuild,
05a16c19967e cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents: 32458
diff changeset
648 mpatchbuild,
30356
9cc438bf7d9a setup: move cffi stuff to mercurial/cffi
Jun Wu <quark@fb.com>
parents: 29844
diff changeset
649 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
650
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
651 exts = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
652 mpatchbuild.ffi.distutils_extension(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
653 bdiffbuild.ffi.distutils_extension(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
654 ]
29505
2dce3f96ad7b setup: prepare for future cffi modules by adding placeholder in setup
Maciej Fijalkowski <fijall@gmail.com>
parents: 29444
diff changeset
655 # 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
656 if sys.platform == 'darwin':
32538
05a16c19967e cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents: 32458
diff changeset
657 from mercurial.cffi import osutilbuild
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
658
32538
05a16c19967e cffi: rename build scripts
Yuya Nishihara <yuya@tcha.org>
parents: 32458
diff changeset
659 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
660 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
661 else:
18905
012780620d4f setup: make error message for missing Python headers more helpful
Mads Kiilerich <mads@kiilerich.com>
parents: 18900
diff changeset
662 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
663 if not os.path.exists(h):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
664 raise SystemExit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
665 'Python headers are required to build '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
666 'Mercurial but weren\'t found in %s' % h
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
667 )
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
668
28430
17b85d739b62 setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents: 28418
diff changeset
669 def run(self):
32675
7dab4c0cdb41 setup: do not overwrite local __modulepolicy__.py on out-of-source build
Yuya Nishihara <yuya@tcha.org>
parents: 32670
diff changeset
670 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: 32670
diff changeset
671 self.mkpath(basepath)
7dab4c0cdb41 setup: do not overwrite local __modulepolicy__.py on out-of-source build
Yuya Nishihara <yuya@tcha.org>
parents: 32670
diff changeset
672
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
673 rust = self.distribution.rust
28430
17b85d739b62 setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents: 28418
diff changeset
674 if self.distribution.pure:
17b85d739b62 setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents: 28418
diff changeset
675 modulepolicy = 'py'
32291
a04f5c651e52 policy: relax the default for in-place build
Yuya Nishihara <yuya@tcha.org>
parents: 32273
diff changeset
676 elif self.build_lib == '.':
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
677 # 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: 42467
diff changeset
678 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
679 else:
42469
94167e701e12 rust: new rust options in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42467
diff changeset
680 modulepolicy = 'rust+c' if rust else 'c'
35238
61ff0d7d56fd setup: only write some autogenerated files if they change
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35126
diff changeset
681
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
682 content = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
683 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
684 b'# this file is autogenerated by setup.py\n',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
685 b'modulepolicy = b"%s"\n' % modulepolicy.encode('ascii'),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
686 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
687 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
688 write_if_changed(os.path.join(basepath, '__modulepolicy__.py'), content)
27222
511a4384b033 setup: refactor handling of modules with C/Python implementations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27220
diff changeset
689
28430
17b85d739b62 setup: create a module for the modulepolicy
timeless <timeless@mozdev.org>
parents: 28418
diff changeset
690 build_py.run(self)
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
691
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
692
14538
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
693 class buildhgextindex(Command):
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
694 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
695 user_options = []
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
696 _indexfilename = 'hgext/__index__.py'
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
697
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
698 def initialize_options(self):
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
699 pass
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
700
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
701 def finalize_options(self):
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
702 pass
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
703
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
704 def run(self):
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
705 if os.path.exists(self._indexfilename):
28418
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
706 with open(self._indexfilename, 'w') as f:
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
707 f.write('# empty\n')
14538
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
708
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
709 # here no extension enabled, disabled() lists up everything
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
710 code = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
711 'import pprint; from mercurial import extensions; '
44189
bb58931d0c4f setup: exclude the __index__ module from itself when generating
Matt Harbison <matt_harbison@yahoo.com>
parents: 44142
diff changeset
712 'ext = extensions.disabled();'
bb58931d0c4f setup: exclude the __index__ module from itself when generating
Matt Harbison <matt_harbison@yahoo.com>
parents: 44142
diff changeset
713 'ext.pop("__index__", None);'
bb58931d0c4f setup: exclude the __index__ module from itself when generating
Matt Harbison <matt_harbison@yahoo.com>
parents: 44142
diff changeset
714 'pprint.pprint(ext)'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
715 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
716 returncode, out, err = runcmd(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
717 [sys.executable, '-c', code], localhgenv()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
718 )
33123
87ee783f7299 setup: update runcmd() to also return the exit status
Adam Simpkins <simpkins@fb.com>
parents: 33122
diff changeset
719 if err or returncode != 0:
14538
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
720 raise DistutilsExecError(err)
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
721
42075
456c37433c43 py3: write out hgextindex as bytes in setup.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 42074
diff changeset
722 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
723 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
724 f.write(b'docs = ')
28418
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
725 f.write(out)
14538
3818c67a501e setup: add command to generate index of extensions
Yuya Nishihara <yuya@tcha.org>
parents: 14324
diff changeset
726
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
727
17061
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
728 class buildhgexe(build_ext):
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
729 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: 34398
diff changeset
730
49441
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
731 LONG_PATHS_MANIFEST = """\
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
732 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
733 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
734 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
735 <security>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
736 <requestedPrivileges>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
737 <requestedExecutionLevel
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
738 level="asInvoker"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
739 uiAccess="false"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
740 />
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
741 </requestedPrivileges>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
742 </security>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
743 </trustInfo>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
744 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
745 <application>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
746 <!-- Windows Vista -->
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
747 <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
748 <!-- Windows 7 -->
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
749 <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
750 <!-- Windows 8 -->
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
751 <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
752 <!-- Windows 8.1 -->
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
753 <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
754 <!-- Windows 10 and Windows 11 -->
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
755 <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
756 </application>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
757 </compatibility>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
758 <application xmlns="urn:schemas-microsoft-com:asm.v3">
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
759 <windowsSettings
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
760 xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
761 <ws2:longPathAware>true</ws2:longPathAware>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
762 </windowsSettings>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
763 </application>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
764 <dependency>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
765 <dependentAssembly>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
766 <assemblyIdentity type="win32"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
767 name="Microsoft.Windows.Common-Controls"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
768 version="6.0.0.0"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
769 processorArchitecture="*"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
770 publicKeyToken="6595b64144ccf1df"
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
771 language="*" />
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
772 </dependentAssembly>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
773 </dependency>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
774 </assembly>
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
775 """
34530
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
776
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
777 def initialize_options(self):
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
778 build_ext.initialize_options(self)
17061
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
779
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
780 def build_extensions(self):
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
781 if os.name != 'nt':
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
782 return
17246
bf5bb38bcc7c setup: fix build_hgexe for mingw32 compiler
Adrian Buehlmann <adrian@cadifra.com>
parents: 17121
diff changeset
783 if isinstance(self.compiler, HackedMingw32CCompiler):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
784 self.compiler.compiler_so = self.compiler.compiler # no -mdll
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
785 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
786
43718
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
787 pythonlib = None
29020
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
788
49439
5cf73de964e1 setup: stop shadowing the builtin `dir` symbol
Matt Harbison <matt_harbison@yahoo.com>
parents: 49318
diff changeset
789 dirname = os.path.dirname(self.get_ext_fullpath('dummy'))
5cf73de964e1 setup: stop shadowing the builtin `dir` symbol
Matt Harbison <matt_harbison@yahoo.com>
parents: 49318
diff changeset
790 self.hgtarget = os.path.join(dirname, 'hg')
48303
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
791
43718
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
792 if getattr(sys, 'dllhandle', None):
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
793 # Different Python installs can have different Python library
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
794 # names. e.g. the official CPython distribution uses pythonXY.dll
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
795 # and MinGW uses libpythonX.Y.dll.
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
796 _kernel32 = ctypes.windll.kernel32
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
797 _kernel32.GetModuleFileNameA.argtypes = [
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
798 ctypes.c_void_p,
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
799 ctypes.c_void_p,
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
800 ctypes.c_ulong,
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
801 ]
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
802 _kernel32.GetModuleFileNameA.restype = ctypes.c_ulong
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
803 size = 1000
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
804 buf = ctypes.create_string_buffer(size + 1)
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
805 filelen = _kernel32.GetModuleFileNameA(
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
806 sys.dllhandle, ctypes.byref(buf), size
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
807 )
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
808
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
809 if filelen > 0 and filelen != size:
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
810 dllbasename = os.path.basename(buf.value)
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
811 if not dllbasename.lower().endswith(b'.dll'):
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
812 raise SystemExit(
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
813 'Python DLL does not end with .dll: %s' % dllbasename
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
814 )
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
815 pythonlib = dllbasename[:-4]
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
816
48303
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
817 # Copy the pythonXY.dll next to the binary so that it runs
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
818 # without tampering with PATH.
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
819 dest = os.path.join(
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
820 os.path.dirname(self.hgtarget),
48920
fef4198c855c setup: inline os.fsdecode now that we're done with Python 2
Augie Fackler <augie@google.com>
parents: 48919
diff changeset
821 os.fsdecode(dllbasename),
48303
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
822 )
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
823
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
824 if not os.path.exists(dest):
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
825 shutil.copy(buf.value, dest)
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
826
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
827 # Also overwrite python3.dll so that hgext.git is usable.
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
828 # TODO: also handle the MSYS flavor
48922
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
829 python_x = os.path.join(
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
830 os.path.dirname(os.fsdecode(buf.value)),
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
831 "python3.dll",
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
832 )
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
833
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
834 if os.path.exists(python_x):
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
835 dest = os.path.join(
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
836 os.path.dirname(self.hgtarget),
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
837 os.path.basename(python_x),
48303
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
838 )
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
839
48922
40e35034eac8 setup: unconditionally do this python 3 step
Augie Fackler <augie@google.com>
parents: 48921
diff changeset
840 shutil.copy(python_x, dest)
48303
2ce31dbde4b1 backout: backed out changeset f78d8b8c46d7
Raphaël Gomès <rgomes@octobus.net>
parents: 48194
diff changeset
841
43718
52e4bfebc4ba setup: conditionalize access to `sys.dllhandle` when building extensions
Matt Harbison <matt_harbison@yahoo.com>
parents: 43717
diff changeset
842 if not pythonlib:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
843 log.warn(
43716
666441b649e4 setup: combine two contiguous string literals
Matt Harbison <matt_harbison@yahoo.com>
parents: 43676
diff changeset
844 'could not determine Python DLL filename; assuming pythonXY'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
845 )
29020
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
846
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
847 hv = sys.hexversion
43717
6a5dc4d767a0 setup: use bytes for assumed python version
Matt Harbison <matt_harbison@yahoo.com>
parents: 43716
diff changeset
848 pythonlib = b'python%d%d' % (hv >> 24, (hv >> 16) & 0xFF)
29020
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
849
ee2e4a2c3690 setup: detect Python DLL filename from loaded DLL
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28625
diff changeset
850 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
851 with open('mercurial/hgpythonlib.h', 'wb') as f:
39624
ec68135a8935 py3: add b'' to some setup.py strings for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 39588
diff changeset
852 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: 39588
diff changeset
853 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
854
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
855 objects = self.compiler.compile(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
856 ['mercurial/exewrapper.c'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
857 output_dir=self.build_temp,
48923
b07b034cf548 setup: inline now-constant list
Augie Fackler <augie@google.com>
parents: 48922
diff changeset
858 macros=[('_UNICODE', None), ('UNICODE', None)],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
859 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
860 self.compiler.link_executable(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
861 objects, self.hgtarget, libraries=[], output_dir=self.build_temp
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
862 )
49440
747c4fc20886 setup: unconditionally enable the `long-paths-support` option on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 49439
diff changeset
863
747c4fc20886 setup: unconditionally enable the `long-paths-support` option on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 49439
diff changeset
864 self.addlongpathsmanifest()
34530
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
865
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
866 def addlongpathsmanifest(self):
49440
747c4fc20886 setup: unconditionally enable the `long-paths-support` option on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 49439
diff changeset
867 """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: 34398
diff changeset
868
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
869 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: 34398
diff changeset
870 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: 34398
diff changeset
871 """
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
872 exefname = self.compiler.executable_filename(self.hgtarget)
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
873 fdauto, manfname = tempfile.mkstemp(suffix='.hg.exe.manifest')
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
874 os.close(fdauto)
49441
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
875 with open(manfname, 'w', encoding="UTF-8") as f:
34530
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
876 f.write(self.LONG_PATHS_MANIFEST)
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
877 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: 34398
diff changeset
878 outputresource = '-outputresource:%s;#1' % exefname
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
879 log.info("running mt.exe to update hg.exe's manifest in-place")
49441
ece490b02a9b setup: use the full executable manifest from `python.exe`
Matt Harbison <matt_harbison@yahoo.com>
parents: 49440
diff changeset
880
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
881 self.spawn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
882 [
49440
747c4fc20886 setup: unconditionally enable the `long-paths-support` option on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 49439
diff changeset
883 self.compiler.mt,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
884 '-nologo',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
885 '-manifest',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
886 manfname,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
887 outputresource,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
888 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
889 )
34530
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
890 log.info("done updating hg.exe's manifest")
ed5acd3fd7e1 windows: add an experimental option for long paths support
Kostia Balytskyi <ikostia@fb.com>
parents: 34398
diff changeset
891 os.remove(manfname)
17061
f20e4d76b711 setup: compile hg.exe
Adrian Buehlmann <adrian@cadifra.com>
parents: 16775
diff changeset
892
27268
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
893 @property
ed1660ce99d9 setup.py: attempt to build and install hg.exe on Windows
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27222
diff changeset
894 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
895 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
896 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
897
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
898
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
899 class hgbuilddoc(Command):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
900 description = 'build documentation'
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
901 user_options = [
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
902 ('man', None, 'generate man pages'),
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
903 ('html', None, 'generate html pages'),
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
904 ]
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
905
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
906 def initialize_options(self):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
907 self.man = None
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
908 self.html = None
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
909
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
910 def finalize_options(self):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
911 # 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: 41768
diff changeset
912 # Otherwise generate everything.
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
913 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: 41768
diff changeset
914
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
915 if have_subset:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
916 self.man = True if self.man else False
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
917 self.html = True if self.html else False
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
918 else:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
919 self.man = True
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
920 self.html = True
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
921
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
922 def run(self):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
923 def normalizecrlf(p):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
924 with open(p, 'rb') as fh:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
925 orig = fh.read()
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
926
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
927 if b'\r\n' not in orig:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
928 return
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
929
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
930 log.info('normalizing %s to LF line endings' % p)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
931 with open(p, 'wb') as fh:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
932 fh.write(orig.replace(b'\r\n', b'\n'))
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
933
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
934 def gentxt(root):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
935 txt = 'doc/%s.txt' % root
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
936 log.info('generating %s' % txt)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
937 res, out, err = runcmd(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
938 [sys.executable, 'gendoc.py', root], os.environ, cwd='doc'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
939 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
940 if res:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
941 raise SystemExit(
44737
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
942 'error running gendoc.py: %s'
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
943 % '\n'.join([sysstr(out), sysstr(err)])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
944 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
945
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
946 with open(txt, 'wb') as fh:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
947 fh.write(out)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
948
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
949 def gengendoc(root):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
950 gendoc = 'doc/%s.gendoc.txt' % root
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
951
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
952 log.info('generating %s' % gendoc)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
953 res, out, err = runcmd(
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
954 [sys.executable, 'gendoc.py', '%s.gendoc' % root],
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
955 os.environ,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
956 cwd='doc',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
957 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
958 if res:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
959 raise SystemExit(
44737
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
960 'error running gendoc: %s'
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
961 % '\n'.join([sysstr(out), sysstr(err)])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
962 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
963
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
964 with open(gendoc, 'wb') as fh:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
965 fh.write(out)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
966
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
967 def genman(root):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
968 log.info('generating doc/%s' % root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
969 res, out, err = runcmd(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
970 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
971 sys.executable,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
972 'runrst',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
973 'hgmanpage',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
974 '--halt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
975 'warning',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
976 '--strip-elements-with-class',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
977 'htmlonly',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
978 '%s.txt' % root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
979 root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
980 ],
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
981 os.environ,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
982 cwd='doc',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
983 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
984 if res:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
985 raise SystemExit(
44737
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
986 'error running runrst: %s'
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
987 % '\n'.join([sysstr(out), sysstr(err)])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
988 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
989
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
990 normalizecrlf('doc/%s' % root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
991
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
992 def genhtml(root):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
993 log.info('generating doc/%s.html' % root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
994 res, out, err = runcmd(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
995 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
996 sys.executable,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
997 'runrst',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
998 'html',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
999 '--halt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1000 'warning',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1001 '--link-stylesheet',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1002 '--stylesheet-path',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1003 'style.css',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1004 '%s.txt' % root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1005 '%s.html' % root,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1006 ],
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1007 os.environ,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1008 cwd='doc',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1009 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1010 if res:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1011 raise SystemExit(
44737
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
1012 'error running runrst: %s'
380959c6f75e setup: use sysstr() on process output
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44729
diff changeset
1013 % '\n'.join([sysstr(out), sysstr(err)])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1014 )
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1015
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1016 normalizecrlf('doc/%s.html' % root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1017
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1018 # This logic is duplicated in doc/Makefile.
44470
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44460
diff changeset
1019 sources = {
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1020 f
43769
c7fc2d92067e windows: further build fixes for the WiX installer
Augie Fackler <augie@google.com>
parents: 43718
diff changeset
1021 for f in os.listdir('mercurial/helptext')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1022 if re.search(r'[0-9]\.txt$', f)
44470
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44460
diff changeset
1023 }
41855
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1024
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1025 # common.txt is a one-off.
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1026 gentxt('common')
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1027
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1028 for source in sorted(sources):
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1029 assert source[-4:] == '.txt'
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1030 root = source[:-4]
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1031
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1032 gentxt(root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1033 gengendoc(root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1034
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1035 if self.man:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1036 genman(root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1037 if self.html:
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1038 genhtml(root)
d80d48928eb1 setup: define build_doc command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41768
diff changeset
1039
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1040
32670
331dcf199039 setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents: 32539
diff changeset
1041 class hginstall(install):
32745
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1042
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1043 user_options = install.user_options + [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1044 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1045 'old-and-unmanageable',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1046 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1047 'noop, present for eggless setuptools compat',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1048 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1049 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1050 'single-version-externally-managed',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1051 None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1052 'noop, present for eggless setuptools compat',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1053 ),
32745
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1054 ]
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1055
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1056 sub_commands = install.sub_commands + [
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1057 ('install_completion', lambda self: True)
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1058 ]
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1059
32745
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1060 # 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: 32675
diff changeset
1061 single_version_externally_managed = True
6c4b58422974 setup: introduce dummy copies of setuptools flags
Augie Fackler <augie@google.com>
parents: 32675
diff changeset
1062
32670
331dcf199039 setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents: 32539
diff changeset
1063 def get_sub_commands(self):
331dcf199039 setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents: 32539
diff changeset
1064 # 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: 32539
diff changeset
1065 # 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: 32539
diff changeset
1066 # packaging.
44470
9d2b2df2c2ba cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents: 44460
diff changeset
1067 excl = {'bdist_egg'}
46315
2ef575c62f10 test-regression: backing out D9640 (63c923fd7fa8)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46243
diff changeset
1068 return filter(lambda x: x not in excl, install.get_sub_commands(self))
32670
331dcf199039 setup: prevent setuptools from laying an egg
Matt Harbison <matt_harbison@yahoo.com>
parents: 32539
diff changeset
1069
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1070
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1071 class hginstalllib(install_lib):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1072 """
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1073 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
1074 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
1075 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
1076 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
1077 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
1078
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1079 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
1080 insufficient, as it might still be applying a umask.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1081 """
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1082
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1083 def run(self):
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1084 realcopyfile = file_util.copy_file
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1085
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1086 def copyfileandsetmode(*args, **kwargs):
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1087 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
1088 dst, copied = realcopyfile(*args, **kwargs)
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1089 if copied:
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1090 st = os.stat(src)
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1091 # 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
1092 # has it)
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1093 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
1094 setmode = int('0755', 8)
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1095 else:
24941
9c1942635c1f setup: hide octal literals inside strings so they're portable (issue4554)
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
1096 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
1097 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
1098 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
1099 os.chmod(dst, m)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1100
22640
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1101 file_util.copy_file = copyfileandsetmode
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1102 try:
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1103 install_lib.run(self)
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1104 finally:
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1105 file_util.copy_file = realcopyfile
e88a634e0195 setup: set mode 644 or 755 on installed files
Kyle Lippincott <spectral@google.com>
parents: 22575
diff changeset
1106
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1107
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1108 class hginstallscripts(install_scripts):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1109 """
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1110 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
1111 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
1112 to the directory for scripts.
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1113 """
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1114
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1115 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
1116 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
1117
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1118 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
1119
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1120 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
1121 install_scripts.finalize_options(self)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1122 self.set_undefined_options('install', ('install_lib', '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
1123
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1124 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
1125 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
1126
27269
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1127 # 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
1128 # 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
1129 # 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
1130 # wheel archive looks like:
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1131 #
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1132 # 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
1133 # mercurial/__init__.py
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1134 #
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1135 # 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
1136 # 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
1137 # 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
1138 # 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
1139 # 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
1140 # 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
1141 # 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
1142 # 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
1143 # 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
1144 # 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
1145
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1146 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1147 os.path.splitdrive(self.install_dir)[0]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1148 != os.path.splitdrive(self.install_lib)[0]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1149 ):
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1150 # 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
1151 # 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
1152 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
1153 else:
44080
4e05272dd681 packaging: leverage os.path.relpath() in setup.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 44058
diff changeset
1154 libdir = os.path.relpath(self.install_lib, self.install_dir)
12661
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1155
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1156 for outfile in self.outfiles:
28418
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
1157 with open(outfile, 'rb') as fp:
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
1158 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
1159
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1160 # skip binary files
27348
83a8219fb790 setup.py: use bytes literals
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27269
diff changeset
1161 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
1162 continue
10da5a1f25dd setup/hg: always load Mercurial from where it was installed.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 12649
diff changeset
1163
27269
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1164 # 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
1165 # 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
1166 # value.
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1167 if data.startswith(b'#!python'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1168 log.info(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1169 'not rewriting @LIBDIR@ in %s because install path '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1170 'not known' % outfile
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1171 )
27269
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1172 continue
bdcbec65750b setup.py: don't rewrite @LIBDIR@ when creating wheels
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27268
diff changeset
1173
48919
40a65f5594f5 setup: inline encoding constant that is only used once
Augie Fackler <augie@google.com>
parents: 48918
diff changeset
1174 data = data.replace(b'@LIBDIR@', libdir.encode('unicode_escape'))
28418
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
1175 with open(outfile, 'wb') as fp:
121d25719e92 setup: switch to with open as
timeless <timeless@mozdev.org>
parents: 28398
diff changeset
1176 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
1177
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1178
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1179 class hginstallcompletion(Command):
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1180 description = 'Install shell completion'
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1181
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1182 def initialize_options(self):
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1183 self.install_dir = None
49103
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1184 self.outputs = []
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1185
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1186 def finalize_options(self):
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1187 self.set_undefined_options(
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1188 'install_data', ('install_dir', 'install_dir')
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1189 )
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1190
49103
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1191 def get_outputs(self):
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1192 return self.outputs
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1193
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1194 def run(self):
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1195 for src, dir_path, dest in (
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1196 (
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1197 'bash_completion',
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1198 ('share', 'bash-completion', 'completions'),
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1199 'hg',
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1200 ),
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1201 ('zsh_completion', ('share', 'zsh', 'site-functions'), '_hg'),
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1202 ):
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1203 dir = os.path.join(self.install_dir, *dir_path)
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1204 self.mkpath(dir)
49103
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1205
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1206 dest = os.path.join(dir, dest)
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1207 self.outputs.append(dest)
b6f535f3beda setup: fix incomplete implementation of Command
Raphaël Gomès <rgomes@octobus.net>
parents: 49066
diff changeset
1208 self.copy_file(os.path.join('contrib', src), dest)
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1209
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1210
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1211 # 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
1212 # 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
1213 # "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
1214 # 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
1215 # 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
1216 # 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
1217 #
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1218 # 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
1219 # 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
1220 # 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
1221 # 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
1222 # deterministic and reproducible.
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1223 #
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1224 # 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
1225 # 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
1226 # 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
1227 # 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
1228 # 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
1229 # 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
1230 # is less brittle.
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1231
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1232 # 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
1233 # 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
1234 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
1235
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1236 if py2exehacked:
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1237 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
1238 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
1239
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1240 class hgbuildpy2exe(buildpy2exe):
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1241 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
1242 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
1243
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1244 # Replace virtualenv's distutils modules with the real ones.
42152
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1245 modules = {}
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1246 for k, v in res.modules.items():
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1247 if k != 'distutils' and not k.startswith('distutils.'):
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1248 modules[k] = v
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1249
bd92dd3eff42 setup: remove set and dict comprehensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42150
diff changeset
1250 res.modules = modules
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1251
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1252 import opcode
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1253
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1254 distutilsreal = os.path.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1255 os.path.dirname(opcode.__file__), 'distutils'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1256 )
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1257
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1258 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
1259 for f in sorted(files):
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1260 if not f.endswith('.py'):
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1261 continue
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1262
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1263 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
1264
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1265 parents = ['distutils']
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1266
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1267 if root != distutilsreal:
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1268 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
1269 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
1270
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1271 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
1272
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1273 if modname.startswith('distutils.tests.'):
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1274 continue
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1275
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1276 if modname.endswith('.__init__'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1277 modname = modname[: -len('.__init__')]
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1278 path = os.path.dirname(full)
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1279 else:
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1280 path = None
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1281
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1282 res.modules[modname] = py2exemodule(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1283 modname, full, path=path
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1284 )
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1285
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1286 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
1287 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
1288
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1289 return res
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1290
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1291
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1292 cmdclass = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1293 'build': hgbuild,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1294 'build_doc': hgbuilddoc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1295 'build_mo': hgbuildmo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1296 'build_ext': hgbuildext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1297 'build_py': hgbuildpy,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1298 'build_scripts': hgbuildscripts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1299 'build_hgextindex': buildhgextindex,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1300 'install': hginstall,
49066
8d7eaff92f9c completion: install completers to conventional locations
Matthew Martin <phy1729@gmail.com>
parents: 49037
diff changeset
1301 'install_completion': hginstallcompletion,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1302 'install_lib': hginstalllib,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1303 'install_scripts': hginstallscripts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1304 'build_hgexe': buildhgexe,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1305 }
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
1306
42150
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1307 if py2exehacked:
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1308 cmdclass['py2exe'] = hgbuildpy2exe
71d8b4d91616 setup: properly package distutils in py2exe virtualenv builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 42075
diff changeset
1309
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1310 packages = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1311 'mercurial',
50995
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents: 50953
diff changeset
1312 'mercurial.admin',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1313 'mercurial.cext',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1314 'mercurial.cffi',
44028
44b03c0313aa setup: include `defaultrc` in the package list
Matt Harbison <matt_harbison@yahoo.com>
parents: 43812
diff changeset
1315 'mercurial.defaultrc',
47674
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47007
diff changeset
1316 'mercurial.dirstateutils',
43676
2e017696181f help: create packages for the help text
Matt Harbison <matt_harbison@yahoo.com>
parents: 43349
diff changeset
1317 'mercurial.helptext',
2e017696181f help: create packages for the help text
Matt Harbison <matt_harbison@yahoo.com>
parents: 43349
diff changeset
1318 'mercurial.helptext.internals',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1319 'mercurial.hgweb',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1320 'mercurial.interfaces',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1321 'mercurial.pure',
50460
f0d2b18f0274 stabletailgraph: implement stable-tail sort
pacien <pacien.trangirard@pacien.net>
parents: 50442
diff changeset
1322 'mercurial.stabletailgraph',
45325
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1323 'mercurial.templates',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1324 'mercurial.thirdparty',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1325 'mercurial.thirdparty.attr',
50800
2c34c9b61a4f thirdparty: vendor tomli
Raphaël Gomès <rgomes@octobus.net>
parents: 50730
diff changeset
1326 'mercurial.thirdparty.tomli',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1327 'mercurial.thirdparty.zope',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1328 'mercurial.thirdparty.zope.interface',
46050
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45957
diff changeset
1329 'mercurial.upgrade_utils',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1330 'mercurial.utils',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1331 'mercurial.revlogutils',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1332 'mercurial.testing',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1333 'hgext',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1334 'hgext.convert',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1335 'hgext.fsmonitor',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1336 'hgext.fastannotate',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1337 'hgext.fsmonitor.pywatchman',
44489
ad718271a9eb git: skeleton of a new extension to _directly_ operate on git repos
Augie Fackler <augie@google.com>
parents: 44484
diff changeset
1338 'hgext.git',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1339 'hgext.highlight',
44440
4cabeea6d214 hgext: start building a library for simple hooks
Joerg Sonnenberger <joerg@bec.de>
parents: 44348
diff changeset
1340 'hgext.hooklib',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1341 'hgext.largefiles',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1342 'hgext.lfs',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1343 'hgext.narrow',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1344 'hgext.remotefilelog',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1345 'hgext.zeroconf',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1346 'hgext3rd',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1347 'hgdemandimport',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1348 ]
45325
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1349
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1350 for name in os.listdir(os.path.join('mercurial', 'templates')):
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1351 if name != '__pycache__' and os.path.isdir(
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1352 os.path.join('mercurial', 'templates', name)
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1353 ):
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1354 packages.append('mercurial.templates.%s' % name)
41ff8a463e10 packaging: mark mercurial.templates and subdirs as packages
Martin von Zweigbergk <martinvonz@google.com>
parents: 45294
diff changeset
1355
42054
399ed3e86a49 py2exe: add workaround to allow bundling of hgext3rd.* extensions
Augie Fackler <augie@google.com>
parents: 41959
diff changeset
1356 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: 41959
diff changeset
1357 # 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: 41959
diff changeset
1358 # 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: 41959
diff changeset
1359 # 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: 41959
diff changeset
1360 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: 41959
diff changeset
1361
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1362 common_depends = [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1363 'mercurial/bitmanipulation.h',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1364 'mercurial/compat.h',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1365 'mercurial/cext/util.h',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1366 ]
32251
c48583859e04 policy: add "cext" package which will host CPython extension modules
Yuya Nishihara <yuya@tcha.org>
parents: 32178
diff changeset
1367 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
1368
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1369 common_cflags = []
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1370
44610
960770add699 setup: relax -Werror for declaration-after-statement on Python 3.9
Augie Fackler <augie@google.com>
parents: 44596
diff changeset
1371 # MSVC 2008 still needs declarations at the top of the scope, but Python 3.9
960770add699 setup: relax -Werror for declaration-after-statement on Python 3.9
Augie Fackler <augie@google.com>
parents: 44596
diff changeset
1372 # makes declarations not at the top of a scope in the headers.
960770add699 setup: relax -Werror for declaration-after-statement on Python 3.9
Augie Fackler <augie@google.com>
parents: 44596
diff changeset
1373 if os.name != 'nt' and sys.version_info[1] < 9:
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1374 common_cflags = ['-Werror=declaration-after-statement']
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1375
30418
ce9a3033c118 setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents: 30356
diff changeset
1376 osutil_cflags = []
25073
c1a9e31bec0f setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents: 25072
diff changeset
1377 osutil_ldflags = []
c1a9e31bec0f setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents: 25072
diff changeset
1378
31567
312e62640798 setup: detect statfs
Jun Wu <quark@fb.com>
parents: 31566
diff changeset
1379 # platform specific macros
31627
2243ba216f66 statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents: 31601
diff changeset
1380 for plat, func in [('bsd', 'setproctitle')]:
31567
312e62640798 setup: detect statfs
Jun Wu <quark@fb.com>
parents: 31566
diff changeset
1381 if re.search(plat, sys.platform) and hasfunction(new_compiler(), func):
30418
ce9a3033c118 setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents: 30356
diff changeset
1382 osutil_cflags.append('-DHAVE_%s' % func.upper())
ce9a3033c118 setup: test setproctitle before building osutil
Jun Wu <quark@fb.com>
parents: 30356
diff changeset
1383
31601
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1384 for plat, macro, code in [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1385 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1386 'bsd|darwin',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1387 'BSD_STATFS',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1388 '''
31601
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1389 #include <sys/param.h>
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1390 #include <sys/mount.h>
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1391 int main() { struct statfs s; return sizeof(s.f_fstypename); }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1392 ''',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1393 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1394 (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1395 'linux',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1396 'LINUX_STATFS',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1397 '''
31627
2243ba216f66 statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents: 31601
diff changeset
1398 #include <linux/magic.h>
2243ba216f66 statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents: 31601
diff changeset
1399 #include <sys/vfs.h>
2243ba216f66 statfs: change Linux feature detection
Jun Wu <quark@fb.com>
parents: 31601
diff changeset
1400 int main() { struct statfs s; return sizeof(s.f_type); }
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1401 ''',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1402 ),
31601
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1403 ]:
ab51a2b18f87 setup: use a more strict way to test BSD or OSX's statfs
Jun Wu <quark@fb.com>
parents: 31568
diff changeset
1404 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: 31568
diff changeset
1405 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: 31568
diff changeset
1406
25073
c1a9e31bec0f setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents: 25072
diff changeset
1407 if sys.platform == 'darwin':
c1a9e31bec0f setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents: 25072
diff changeset
1408 osutil_ldflags += ['-framework', 'ApplicationServices']
c1a9e31bec0f setup: move osutil_ldflags logic to before extmodules definition
Adrian Buehlmann <adrian@cadifra.com>
parents: 25072
diff changeset
1409
44220
539490756a72 setup: link osutil.so to libsocket on Solaris/illumos (issue6299)
Alexander Pyhalov <apyhalov@gmail.com>
parents: 44214
diff changeset
1410 if sys.platform == 'sunos5':
539490756a72 setup: link osutil.so to libsocket on Solaris/illumos (issue6299)
Alexander Pyhalov <apyhalov@gmail.com>
parents: 44214
diff changeset
1411 osutil_ldflags += ['-lsocket']
539490756a72 setup: link osutil.so to libsocket on Solaris/illumos (issue6299)
Alexander Pyhalov <apyhalov@gmail.com>
parents: 44214
diff changeset
1412
36704
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1413 xdiff_srcs = [
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1414 'mercurial/thirdparty/xdiff/xdiffi.c',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1415 'mercurial/thirdparty/xdiff/xprepare.c',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1416 'mercurial/thirdparty/xdiff/xutils.c',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1417 ]
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1418
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1419 xdiff_headers = [
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1420 'mercurial/thirdparty/xdiff/xdiff.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1421 'mercurial/thirdparty/xdiff/xdiffi.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1422 'mercurial/thirdparty/xdiff/xinclude.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1423 'mercurial/thirdparty/xdiff/xmacros.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1424 'mercurial/thirdparty/xdiff/xprepare.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1425 'mercurial/thirdparty/xdiff/xtypes.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1426 'mercurial/thirdparty/xdiff/xutils.h',
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1427 ]
430fdb717549 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com>
parents: 36636
diff changeset
1428
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1429
40979
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1430 class RustCompilationError(CCompilerError):
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1431 """Exception class for Rust compilation errors."""
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1432
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1433
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1434 class RustExtension(Extension):
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1435 """Base classes for concrete Rust Extension classes."""
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1436
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1437 rusttargetdir = os.path.join('rust', 'target', 'release')
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1438
48194
01c3dd208c75 rust: Make the hg-cpython crate default to Python 3
Simon Sapin <simon.sapin@octobus.net>
parents: 48192
diff changeset
1439 def __init__(self, mpath, sources, rustlibname, subcrate, **kw):
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1440 Extension.__init__(self, mpath, sources, **kw)
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1441 srcdir = self.rustsrcdir = os.path.join('rust', subcrate)
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1442
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1443 # adding Rust source and control files to depends so that the extension
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1444 # gets rebuilt if they've changed
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1445 self.depends.append(os.path.join(srcdir, 'Cargo.toml'))
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1446 cargo_lock = os.path.join(srcdir, 'Cargo.lock')
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1447 if os.path.exists(cargo_lock):
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1448 self.depends.append(cargo_lock)
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1449 for dirpath, subdir, fnames in os.walk(os.path.join(srcdir, 'src')):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1450 self.depends.extend(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1451 os.path.join(dirpath, fname)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1452 for fname in fnames
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1453 if os.path.splitext(fname)[1] == '.rs'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1454 )
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1455
42473
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1456 @staticmethod
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1457 def rustdylibsuffix():
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1458 """Return the suffix for shared libraries produced by rustc.
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1459
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1460 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: 42469
diff changeset
1461 """
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1462 if sys.platform == 'darwin':
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1463 return '.dylib'
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1464 elif os.name == 'nt':
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1465 return '.dll'
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1466 else:
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1467 return '.so'
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1468
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1469 def rustbuild(self):
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1470 env = os.environ.copy()
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1471 if 'HGTEST_RESTOREENV' in env:
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1472 # Mercurial tests change HOME to a temporary directory,
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1473 # but, if installed with rustup, the Rust toolchain needs
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1474 # HOME to be correct (otherwise the 'no default toolchain'
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1475 # error message is issued and the build fails).
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1476 # This happens currently with test-hghave.t, which does
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1477 # invoke this build.
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1478
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1479 # Unix only fix (os.path.expanduser not really reliable if
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1480 # HOME is shadowed like this)
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1481 import pwd
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1482
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1483 env['HOME'] = pwd.getpwuid(os.getuid()).pw_dir
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1484
44905
47787a48f469 setup: stop asking cargo to spam
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 44737
diff changeset
1485 cargocmd = ['cargo', 'rustc', '--release']
44348
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44302
diff changeset
1486
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44302
diff changeset
1487 rust_features = env.get("HG_RUST_FEATURES")
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44302
diff changeset
1488 if rust_features:
48933
649ff7f86f96 rust: enable Python 3 support unconditionally
Simon Sapin <simon.sapin@octobus.net>
parents: 48929
diff changeset
1489 cargocmd.extend(('--features', rust_features))
44348
d8d4fa9a7f18 rust-re2: add wrapper for calling Re2 from Rust
Raphaël Gomès <rgomes@octobus.net>
parents: 44302
diff changeset
1490
42475
85041e2b69c7 rust: switched to 'cargo rustc' in setup.py
Georges Racinet <georges.racinet@octobus.net>
parents: 42474
diff changeset
1491 cargocmd.append('--')
42474
8ee0fdf3b087 rust-cpython: fix build for MacOSX
Georges Racinet <georges.racinet@octobus.net>
parents: 42473
diff changeset
1492 if sys.platform == 'darwin':
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1493 cargocmd.extend(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1494 ("-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup")
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1495 )
40979
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1496 try:
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1497 subprocess.check_call(cargocmd, env=env, cwd=self.rustsrcdir)
49318
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1498 except FileNotFoundError:
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1499 raise RustCompilationError("Cargo not found")
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1500 except PermissionError:
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1501 raise RustCompilationError(
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1502 "Cargo found, but permission to execute it is denied"
050dc8730858 py3: catch specific OSError subclasses instead of checking errno
Manuel Jacob <me@manueljacob.de>
parents: 49128
diff changeset
1503 )
40979
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1504 except subprocess.CalledProcessError:
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1505 raise RustCompilationError(
1eaf62a67c1a rust: better treatment of cargo/rustc errors
Georges Racinet <gracinet@anybox.fr>
parents: 40877
diff changeset
1506 "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
1507 "command: %r, environment: %r"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1508 % (self.rustsrcdir, cargocmd, env)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1509 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1510
40273
3b275f549777 rust: exposing in parsers module
Georges Racinet <gracinet@anybox.fr>
parents: 40122
diff changeset
1511
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1512 class RustStandaloneExtension(RustExtension):
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1513 def __init__(self, pydottedname, rustcrate, dylibname, **kw):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1514 RustExtension.__init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1515 self, pydottedname, [], dylibname, rustcrate, **kw
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1516 )
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1517 self.dylibname = dylibname
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1518
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1519 def build(self, target_dir):
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1520 self.rustbuild()
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1521 target = [target_dir]
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1522 target.extend(self.name.split('.'))
42473
f4a65077e949 rust-cpython: management of shared libray suffix
Georges Racinet <georges.racinet@octobus.net>
parents: 42469
diff changeset
1523 target[-1] += DYLIB_SUFFIX
50019
ff4df0954742 setup: Ensure target directory exists with building rust extension
Cédric Krier <ced@b2ck.com>
parents: 49958
diff changeset
1524 target = os.path.join(*target)
ff4df0954742 setup: Ensure target directory exists with building rust extension
Cédric Krier <ced@b2ck.com>
parents: 49958
diff changeset
1525 os.makedirs(os.path.dirname(target), exist_ok=True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1526 shutil.copy2(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1527 os.path.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1528 self.rusttargetdir, self.dylibname + self.rustdylibsuffix()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1529 ),
50019
ff4df0954742 setup: Ensure target directory exists with building rust extension
Cédric Krier <ced@b2ck.com>
parents: 49958
diff changeset
1530 target,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1531 )
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1532
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1533
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
1534 extmodules = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1535 Extension(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1536 'mercurial.cext.base85',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1537 ['mercurial/cext/base85.c'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1538 include_dirs=common_include_dirs,
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1539 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1540 depends=common_depends,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1541 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1542 Extension(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1543 'mercurial.cext.bdiff',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1544 ['mercurial/bdiff.c', 'mercurial/cext/bdiff.c'] + xdiff_srcs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1545 include_dirs=common_include_dirs,
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1546 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1547 depends=common_depends + ['mercurial/bdiff.h'] + xdiff_headers,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1548 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1549 Extension(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1550 'mercurial.cext.mpatch',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1551 ['mercurial/mpatch.c', 'mercurial/cext/mpatch.c'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1552 include_dirs=common_include_dirs,
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1553 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1554 depends=common_depends,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1555 ),
44484
79ac59d3f73d setup-rust: remove the legacy 'direct-ffi' variant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44470
diff changeset
1556 Extension(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1557 'mercurial.cext.parsers',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1558 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1559 'mercurial/cext/charencode.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1560 'mercurial/cext/dirs.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1561 'mercurial/cext/manifest.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1562 'mercurial/cext/parsers.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1563 'mercurial/cext/pathencode.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1564 'mercurial/cext/revlog.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1565 ],
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1566 include_dirs=common_include_dirs,
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1567 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1568 depends=common_depends
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1569 + [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1570 'mercurial/cext/charencode.h',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1571 'mercurial/cext/revlog.h',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1572 ],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1573 ),
37182
922b3fae9c7d setup: register zope.interface packages and compile C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37133
diff changeset
1574 Extension(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1575 'mercurial.cext.osutil',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1576 ['mercurial/cext/osutil.c'],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1577 include_dirs=common_include_dirs,
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1578 extra_compile_args=common_cflags + osutil_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1579 extra_link_args=osutil_ldflags,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1580 depends=common_depends,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1581 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1582 Extension(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1583 'mercurial.thirdparty.zope.interface._zope_interface_coptimizations',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1584 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1585 'mercurial/thirdparty/zope/interface/_zope_interface_coptimizations.c',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1586 ],
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1587 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1588 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1589 Extension(
44058
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1590 'mercurial.thirdparty.sha1dc',
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1591 [
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1592 'mercurial/thirdparty/sha1dc/cext.c',
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1593 'mercurial/thirdparty/sha1dc/lib/sha1.c',
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1594 'mercurial/thirdparty/sha1dc/lib/ubc_check.c',
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1595 ],
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1596 extra_compile_args=common_cflags,
44058
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1597 ),
bde1cd4c99d9 sha1dc: initial implementation of Python extension
Augie Fackler <augie@google.com>
parents: 44028
diff changeset
1598 Extension(
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1599 'hgext.fsmonitor.pywatchman.bser',
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1600 ['hgext/fsmonitor/pywatchman/bser.c'],
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1601 extra_compile_args=common_cflags,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1602 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1603 RustStandaloneExtension(
48194
01c3dd208c75 rust: Make the hg-cpython crate default to Python 3
Simon Sapin <simon.sapin@octobus.net>
parents: 48192
diff changeset
1604 'mercurial.rustext',
01c3dd208c75 rust: Make the hg-cpython crate default to Python 3
Simon Sapin <simon.sapin@octobus.net>
parents: 48192
diff changeset
1605 'hg-cpython',
01c3dd208c75 rust: Make the hg-cpython crate default to Python 3
Simon Sapin <simon.sapin@octobus.net>
parents: 48192
diff changeset
1606 'librusthg',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1607 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1608 ]
5396
5105b119edd2 Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5197
diff changeset
1609
40980
462a26756f70 rust-cpython: build via HGWITHRUSTEXT=cpython
Georges Racinet <gracinet@anybox.fr>
parents: 40979
diff changeset
1610
30445
788ea4ac4388 setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30418
diff changeset
1611 sys.path.insert(0, 'contrib/python-zstandard')
788ea4ac4388 setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30418
diff changeset
1612 import setup_zstd
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1613
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1614 zstd = setup_zstd.get_c_extension(
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1615 name='mercurial.zstd', root=os.path.abspath(os.path.dirname(__file__))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1616 )
44596
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1617 zstd.extra_compile_args += common_cflags
2a98b0cd4995 setup: build C extensions with -Werror=declaration-after-statement
Matt Harbison <matt_harbison@yahoo.com>
parents: 44499
diff changeset
1618 extmodules.append(zstd)
30445
788ea4ac4388 setup: compile zstd C extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30418
diff changeset
1619
23677
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1620 try:
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1621 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
1622
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1623 # the -mno-cygwin option has been deprecated for years
33663
7686cbb0ba41 setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents: 33600
diff changeset
1624 mingw32compilerclass = cygwinccompiler.Mingw32CCompiler
17121
d13f47c800fd setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents: 17061
diff changeset
1625
23677
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1626 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
1627 def __init__(self, *args, **kwargs):
33663
7686cbb0ba41 setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents: 33600
diff changeset
1628 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
1629 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
1630 try:
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1631 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
1632 except ValueError:
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1633 pass
17121
d13f47c800fd setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents: 17061
diff changeset
1634
23677
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1635 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
1636 except ImportError:
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1637 # 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
1638 # 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
1639 # DiskStation boxes
49037
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48941
diff changeset
1640 class HackedMingw32CCompiler:
23677
6bc1702e7333 setup: don't fail when Python doesn't have the cygwinccompiler package
Ludovic Chabant <ludovic@chabant.com>
parents: 23647
diff changeset
1641 pass
17121
d13f47c800fd setup: disable -mno-cygwin if building under mingw32
Bryan O'Sullivan <bryano@fb.com>
parents: 17061
diff changeset
1642
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1643
32802
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1644 if os.name == 'nt':
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1645 # 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: 32745
diff changeset
1646 # 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: 32745
diff changeset
1647 # effect.
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1648 from distutils import msvccompiler
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1649
33663
7686cbb0ba41 setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents: 33600
diff changeset
1650 msvccompilerclass = msvccompiler.MSVCCompiler
32802
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1651
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1652 class HackedMSVCCompiler(msvccompiler.MSVCCompiler):
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1653 def initialize(self):
33663
7686cbb0ba41 setup: fix installing in a mingw environment
Mike Hommey <mh@glandium.org>
parents: 33600
diff changeset
1654 msvccompilerclass.initialize(self)
32802
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1655 # "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: 32745
diff changeset
1656 self.ldflags_shared.append('/ignore:4197')
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1657 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: 32745
diff changeset
1658
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1659 msvccompiler.MSVCCompiler = HackedMSVCCompiler
9a4adc76c88a setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com>
parents: 32745
diff changeset
1660
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1661 packagedata = {
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1662 'mercurial': [
50801
c51b178b0b7e configitems: declare items in a TOML file
Raphaël Gomès <rgomes@octobus.net>
parents: 50800
diff changeset
1663 'configitems.toml',
45957
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1664 'locale/*/LC_MESSAGES/hg.mo',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1665 'dummycert.pem',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1666 ],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1667 'mercurial.defaultrc': [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1668 '*.rc',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1669 ],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1670 'mercurial.helptext': [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1671 '*.txt',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1672 ],
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1673 'mercurial.helptext.internals': [
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1674 '*.txt',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45954
diff changeset
1675 ],
49771
54421ef8a423 setup: include vendored 3rd party type stubs
Matt Harbison <matt_harbison@yahoo.com>
parents: 49441
diff changeset
1676 'mercurial.thirdparty.attr': [
54421ef8a423 setup: include vendored 3rd party type stubs
Matt Harbison <matt_harbison@yahoo.com>
parents: 49441
diff changeset
1677 '*.pyi',
54421ef8a423 setup: include vendored 3rd party type stubs
Matt Harbison <matt_harbison@yahoo.com>
parents: 49441
diff changeset
1678 'py.typed',
54421ef8a423 setup: include vendored 3rd party type stubs
Matt Harbison <matt_harbison@yahoo.com>
parents: 49441
diff changeset
1679 ],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1680 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1681
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
1682
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
1683 def ordinarypath(p):
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
1684 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
1685
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1686
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
1687 for root in ('templates',):
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
1688 for curdir, dirs, files in os.walk(os.path.join('mercurial', root)):
45326
e2320bb7a99f packaging: include templates with their package as key in package_data
Martin von Zweigbergk <martinvonz@google.com>
parents: 45325
diff changeset
1689 packagename = curdir.replace(os.sep, '.')
e2320bb7a99f packaging: include templates with their package as key in package_data
Martin von Zweigbergk <martinvonz@google.com>
parents: 45325
diff changeset
1690 packagedata[packagename] = list(filter(ordinarypath, files))
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
1691
7648
02e358a3a8a7 i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents: 7647
diff changeset
1692 datafiles = []
31325
70bc35df3e54 setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31317
diff changeset
1693
70bc35df3e54 setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31317
diff changeset
1694 # distutils expects version to be str/unicode. Converting it to
70bc35df3e54 setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31317
diff changeset
1695 # 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: 31317
diff changeset
1696 # non-ascii bytes and will be implicitly converted back to bytes
70bc35df3e54 setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31317
diff changeset
1697 # when operated on.
46564
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
1698 assert isinstance(version, str)
866eb4d6bd9f build: fake PEP440 versions
Joerg Sonnenberger <joerg@bec.de>
parents: 46483
diff changeset
1699 setupversion = version
31325
70bc35df3e54 setup: convert setupversion to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31317
diff changeset
1700
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1701 extra = {}
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1702
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1703 py2exepackages = [
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1704 'hgdemandimport',
41923
5d9fdc9b0178 setup: include hgext3rd package in py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41922
diff changeset
1705 'hgext3rd',
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1706 'hgext',
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1707 'email',
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1708 # implicitly imported per module policy
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1709 # (cffi wouldn't be used as a frozen exe)
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1710 'mercurial.cext',
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1711 #'mercurial.cffi',
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1712 'mercurial.pure',
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1713 ]
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1714
46350
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1715 py2exe_includes = []
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1716
41921
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1717 py2exeexcludes = []
41959
e5ac701e5b7c setup: exclude crypt32.dll in py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41958
diff changeset
1718 py2exedllexcludes = ['crypt32.dll']
41921
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1719
33600
47829b89c8c6 setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents: 33599
diff changeset
1720 if issetuptools:
47829b89c8c6 setup: silence warning of unknown option python_requires on distutils
Yuya Nishihara <yuya@tcha.org>
parents: 33599
diff changeset
1721 extra['python_requires'] = supportedpy
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1722
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1723 if py2exeloaded:
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1724 extra['console'] = [
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1725 {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1726 'script': 'hg',
49615
bc59c1e5dd01 copyright: update to 2023
Matt Harbison <matt_harbison@yahoo.com>
parents: 49441
diff changeset
1727 'copyright': 'Copyright (C) 2005-2023 Olivia Mackall and others',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1728 'product_version': version,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1729 }
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1730 ]
41922
ac32e04e887f setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41921
diff changeset
1731 # 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: 41921
diff changeset
1732 # 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: 41921
diff changeset
1733 # build.sub_commands.
ac32e04e887f setup: properly install build_hgextindex for py2exe builds
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41921
diff changeset
1734 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
1735 # 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
1736 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
1737
41921
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1738 # We allow some configuration to be supplemented via environment
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1739 # 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: 41859
diff changeset
1740 # supplementing configs instead of replacing them.
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1741 extrapackages = os.environ.get('HG_PY2EXE_EXTRA_PACKAGES')
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1742 if extrapackages:
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1743 py2exepackages.extend(extrapackages.split(' '))
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1744
46350
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1745 extra_includes = os.environ.get('HG_PY2EXE_EXTRA_INCLUDES')
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1746 if extra_includes:
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1747 py2exe_includes.extend(extra_includes.split(' '))
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1748
41921
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1749 excludes = os.environ.get('HG_PY2EXE_EXTRA_EXCLUDES')
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1750 if excludes:
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1751 py2exeexcludes.extend(excludes.split(' '))
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1752
41921
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1753 dllexcludes = os.environ.get('HG_PY2EXE_EXTRA_DLL_EXCLUDES')
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1754 if dllexcludes:
260305e8ddbd setup: configure py2exe config via environment variables
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41859
diff changeset
1755 py2exedllexcludes.extend(dllexcludes.split(' '))
41856
ed35057421ae setup: include additional packages in py2exe distribution
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41855
diff changeset
1756
45132
9d532329ee97 extensions: make `hg help extensions` list disabled extensions with PyOxidizer
Martin von Zweigbergk <martinvonz@google.com>
parents: 44952
diff changeset
1757 if os.environ.get('PYOXIDIZER'):
9d532329ee97 extensions: make `hg help extensions` list disabled extensions with PyOxidizer
Martin von Zweigbergk <martinvonz@google.com>
parents: 44952
diff changeset
1758 hgbuild.sub_commands.insert(0, ('build_hgextindex', None))
9d532329ee97 extensions: make `hg help extensions` list disabled extensions with PyOxidizer
Martin von Zweigbergk <martinvonz@google.com>
parents: 44952
diff changeset
1759
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1760 if os.name == 'nt':
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
1761 # 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
1762 # 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
1763 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
1764
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1765 setup(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1766 name='mercurial',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1767 version=setupversion,
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46573
diff changeset
1768 author='Olivia Mackall and many others',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1769 author_email='mercurial@mercurial-scm.org',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1770 url='https://mercurial-scm.org/',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1771 download_url='https://mercurial-scm.org/release/',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1772 description=(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1773 'Fast scalable distributed SCM (revision control, version '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1774 'control) system'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1775 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1776 long_description=(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1777 'Mercurial is a distributed SCM tool written in Python.'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1778 ' It is used by a number of large projects that require'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1779 ' fast, reliable distributed revision control, such as '
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1780 'Mozilla.'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1781 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1782 license='GNU GPLv2 or any later version',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1783 classifiers=[
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1784 'Development Status :: 6 - Mature',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1785 'Environment :: Console',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1786 'Intended Audience :: Developers',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1787 'Intended Audience :: System Administrators',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1788 'License :: OSI Approved :: GNU General Public License (GPL)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1789 'Natural Language :: Danish',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1790 'Natural Language :: English',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1791 'Natural Language :: German',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1792 'Natural Language :: Italian',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1793 'Natural Language :: Japanese',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1794 'Natural Language :: Portuguese (Brazilian)',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1795 'Operating System :: Microsoft :: Windows',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1796 'Operating System :: OS Independent',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1797 'Operating System :: POSIX',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1798 'Programming Language :: C',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1799 'Programming Language :: Python',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1800 'Topic :: Software Development :: Version Control',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1801 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1802 scripts=scripts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1803 packages=packages,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1804 ext_modules=extmodules,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1805 data_files=datafiles,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1806 package_data=packagedata,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1807 cmdclass=cmdclass,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1808 distclass=hgdist,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1809 options={
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1810 'py2exe': {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1811 'bundle_files': 3,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1812 'dll_excludes': py2exedllexcludes,
46350
d6cfe45afb18 packaging: allow specifying modules to include with py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 46315
diff changeset
1813 'includes': py2exe_includes,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1814 'excludes': py2exeexcludes,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1815 'packages': py2exepackages,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1816 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1817 'bdist_mpkg': {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1818 'zipdist': False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1819 'license': 'COPYING',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1820 'readme': 'contrib/packaging/macosx/Readme.html',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1821 'welcome': 'contrib/packaging/macosx/Welcome.html',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1822 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1823 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1824 **extra
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43044
diff changeset
1825 )