annotate contrib/setup3k.py @ 12667:f5735bb80d77

revsets: fix stray * in help topic
author Martin Geisler <mg@lazybytes.net>
date Sat, 09 Oct 2010 22:05:24 +0200
parents 88d4911930bf
children 4c50552fc9bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
1 #!/usr/bin/env python
575
7f5ce4bbdd7b More whitespace cleanups
mpm@selenic.com
parents: 429
diff changeset
2 #
11948
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
3 # This is an experimental py3k-enabled mercurial setup script.
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
4 #
4816
c10d3bc05a8d setup.py not executable: change instructions at beginning of file
Christian Ebert <blacktrash@gmx.net>
parents: 4628
diff changeset
5 # '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
6 # 'python setup.py --help' for more options
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
7
11948
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
8 from distutils.command.build_py import build_py_2to3
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
9 from lib2to3.refactor import get_fixers_from_package as getfixers
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
10
1873
205f04b04ec6 Added check for minimal python version to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1777
diff changeset
11 import sys
8286
707bc82ba0d7 setup: require Python 2.4
Martin Geisler <mg@lazybytes.net>
parents: 8283
diff changeset
12 if not hasattr(sys, 'version_info') or sys.version_info < (2, 4, 0, 'final'):
707bc82ba0d7 setup: require Python 2.4
Martin Geisler <mg@lazybytes.net>
parents: 8283
diff changeset
13 raise SystemExit("Mercurial requires Python 2.4 or later.")
1873
205f04b04ec6 Added check for minimal python version to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1777
diff changeset
14
11532
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
15 if sys.version_info[0] >= 3:
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
16 def b(s):
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
17 '''A helper function to emulate 2.6+ bytes literals using string
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
18 literals.'''
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
19 return s.encode('latin1')
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
20 else:
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
21 def b(s):
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
22 '''A helper function to emulate 2.6+ bytes literals using string
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
23 literals.'''
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
24 return s
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
25
7558
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
26 # Solaris Python packaging brain damage
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
27 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
28 import hashlib
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
29 sha = hashlib.sha1()
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
30 except:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
31 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
32 import sha
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
33 except:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
34 raise SystemExit(
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
35 "Couldn't import standard hashlib (incomplete Python install).")
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
36
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
37 try:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
38 import zlib
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
39 except:
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
40 raise SystemExit(
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
41 "Couldn't import standard zlib (incomplete Python install).")
dc211ad8d681 setup: warn about missing standard Python components
Matt Mackall <mpm@selenic.com>
parents: 7081
diff changeset
42
10761
16a13fdb4b36 setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10521
diff changeset
43 try:
10768
95b7a15b2f05 setup.py: don't use tabs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10761
diff changeset
44 import bz2
10761
16a13fdb4b36 setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10521
diff changeset
45 except:
10768
95b7a15b2f05 setup.py: don't use tabs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10761
diff changeset
46 raise SystemExit(
95b7a15b2f05 setup.py: don't use tabs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10761
diff changeset
47 "Couldn't import standard bz2 (incomplete Python install).")
10761
16a13fdb4b36 setup: fail if bz2 is not available
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 10521
diff changeset
48
8547
548fd7a05373 setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents: 8494
diff changeset
49 import os, subprocess, time
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
50 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
51 import tempfile
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
52 from distutils import log
72
4a6ab4d80dc4 Add an O(m + nlog n) patching extension
mpm@selenic.com
parents: 67
diff changeset
53 from distutils.core import setup, Extension
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
54 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
55 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
56 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
57 from distutils.command.build_py import build_py
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
58 from distutils.spawn import spawn, find_executable
6245
0d0939b2d272 setup.py: skip inotify if there's no inotify_add_watch
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6241
diff changeset
59 from distutils.ccompiler import new_compiler
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
60 from distutils.errors import CCompilerError
157
2653740d8118 Install the templates where they can be found by hgweb.py
mpm@selenic.com
parents: 155
diff changeset
61
6513
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
62 scripts = ['hg']
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
63 if os.name == 'nt':
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
64 scripts.append('contrib/win32/hg.bat')
3893
070628929e1f Fix setup.py warning
Matt Mackall <mpm@selenic.com>
parents: 3892
diff changeset
65
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
66 # simplified version of distutils.ccompiler.CCompiler.has_function
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
67 # that actually removes its temporary files.
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
68 def hasfunction(cc, funcname):
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
69 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
70 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
71 try:
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
72 try:
6373
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
73 fname = os.path.join(tmpdir, 'funcname.c')
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
74 f = open(fname, 'w')
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
75 f.write('int main(void) {\n')
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
76 f.write(' %s();\n' % funcname)
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
77 f.write('}\n')
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
78 f.close()
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
79 # Redirect stderr to /dev/null to hide any error messages
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
80 # from the compiler.
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
81 # This will have to be changed if we ever have to check
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
82 # for a function on Windows.
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
83 devnull = open('/dev/null', 'w')
7010e4557963 setup.py: hide compiler error messages while searching for inotify
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6251
diff changeset
84 oldstderr = os.dup(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
85 os.dup2(devnull.fileno(), sys.stderr.fileno())
9124
632df73485ae setup.py: don't pollute the current directory with temporary files
Bryan O'Sullivan <bos@serpentine.com>
parents: 8936
diff changeset
86 objects = cc.compile([fname], output_dir=tmpdir)
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
87 cc.link_executable(objects, os.path.join(tmpdir, "a.out"))
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
88 except:
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
89 return False
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
90 return True
87053f0b0fad setup.py: use a simplified custom version of CCompiler.has_function
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 6245
diff changeset
91 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
92 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
93 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
94 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
95 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
96 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
97
1283
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
98 # py2exe needs to be installed to work
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
99 try:
1294
372971e1c40d Clean up whitespace damage.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1284
diff changeset
100 import py2exe
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
101 py2exeloaded = True
1283
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
102
1422
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
103 # Help py2exe to find win32com.shell
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
104 try:
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
105 import modulefinder
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
106 import win32com
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
107 for p in win32com.__path__[1:]: # Take the path to win32comext
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
108 modulefinder.AddPackagePath("win32com", p)
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
109 pn = "win32com.shell"
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
110 __import__(pn)
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
111 m = sys.modules[pn]
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
112 for p in m.__path__[1:]:
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
113 modulefinder.AddPackagePath(pn, p)
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
114 except ImportError:
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
115 pass
a7e8408ac79c py2exe is not able to handle win32com.shell
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 1421
diff changeset
116
1284
59d07a6bd513 Fix Volker's modifications to setup.py for non-Windows systems.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1283
diff changeset
117 except ImportError:
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
118 py2exeloaded = False
3890
2eec996f2fb9 Fix demandload bits of setup.py py2exe support
Matt Mackall <mpm@selenic.com>
parents: 3887
diff changeset
119 pass
1283
f5faab34f32e Support for the distutils extention 'py2exe' added.
Volker.Kleinfeld@gmx.de
parents: 575
diff changeset
120
9807
f359d4f528aa setup: fix f51d1822d6fd refactoring, propagate env to runcmd
Christian Boos <cboos@bct-technology.com>
parents: 9615
diff changeset
121 def runcmd(cmd, 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
122 p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
123 stderr=subprocess.PIPE, env=env)
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
124 out, err = p.communicate()
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
125 # If root is executing setup.py, but the repository is owned by
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
126 # another user (as in "sudo python setup.py install") we will get
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
127 # trust warnings since the .hg/hgrc file is untrusted. That is
10120
fb890a546d44 setup: ignore 'not importing' warnings during version detection
Steve Borho <steve@borho.org>
parents: 9856
diff changeset
128 # fine, we don't want to load it anyway. Python may warn about
fb890a546d44 setup: ignore 'not importing' warnings during version detection
Steve Borho <steve@borho.org>
parents: 9856
diff changeset
129 # a missing __init__.py in mercurial/locale, we also ignore that.
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
130 err = [e for e in err.splitlines()
11532
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
131 if not e.startswith(b('Not trusting file')) \
f3732ab1149f setup.py: Adjustments to make setup.py run in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11468
diff changeset
132 and not e.startswith(b('warning: Not importing'))]
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
133 if err:
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
134 return ''
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
135 return out
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
136
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
137 version = ''
8548
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
138
8547
548fd7a05373 setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents: 8494
diff changeset
139 if os.path.isdir('.hg'):
8629
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
140 # Execute hg out of this directory with a custom environment which
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
141 # includes the pure Python modules in mercurial/pure. We also take
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
142 # care to not use any hgrc files and do no localization.
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
143 pypath = ['mercurial', os.path.join('mercurial', 'pure')]
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
144 env = {'PYTHONPATH': os.pathsep.join(pypath),
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
145 'HGRCPATH': '',
8e69a22f6792 setup: execute hg in C locale
Martin Geisler <mg@lazybytes.net>
parents: 8628
diff changeset
146 'LANGUAGE': 'C'}
9856
ed362d41d1f6 setup: pass LD_LIBRARY_PATH to subprocess when determining version.
Christian Boos <cboos@bct-technology.com>
parents: 9807
diff changeset
147 if 'LD_LIBRARY_PATH' in os.environ:
ed362d41d1f6 setup: pass LD_LIBRARY_PATH to subprocess when determining version.
Christian Boos <cboos@bct-technology.com>
parents: 9807
diff changeset
148 env['LD_LIBRARY_PATH'] = os.environ['LD_LIBRARY_PATH']
8648
ca443bac7ed4 fixed 0xc0150004 error building Mercurial under Python 2.6 for Windows
Garth Roxburgh-Kidd <garth@deadlybloodyserious.com>
parents: 8629
diff changeset
149 if 'SystemRoot' in os.environ:
ca443bac7ed4 fixed 0xc0150004 error building Mercurial under Python 2.6 for Windows
Garth Roxburgh-Kidd <garth@deadlybloodyserious.com>
parents: 8629
diff changeset
150 # Copy SystemRoot into the custom environment for Python 2.6
ca443bac7ed4 fixed 0xc0150004 error building Mercurial under Python 2.6 for Windows
Garth Roxburgh-Kidd <garth@deadlybloodyserious.com>
parents: 8629
diff changeset
151 # under Windows. Otherwise, the subprocess will fail with
ca443bac7ed4 fixed 0xc0150004 error building Mercurial under Python 2.6 for Windows
Garth Roxburgh-Kidd <garth@deadlybloodyserious.com>
parents: 8629
diff changeset
152 # error 0xc0150004. See: http://bugs.python.org/issue3440
ca443bac7ed4 fixed 0xc0150004 error building Mercurial under Python 2.6 for Windows
Garth Roxburgh-Kidd <garth@deadlybloodyserious.com>
parents: 8629
diff changeset
153 env['SystemRoot'] = os.environ['SystemRoot']
8547
548fd7a05373 setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents: 8494
diff changeset
154 cmd = [sys.executable, 'hg', 'id', '-i', '-t']
9807
f359d4f528aa setup: fix f51d1822d6fd refactoring, propagate env to runcmd
Christian Boos <cboos@bct-technology.com>
parents: 9615
diff changeset
155 l = runcmd(cmd, env).split()
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
156 while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
157 l.pop()
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
158 if len(l) > 1: # tag found
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
159 version = l[-1]
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
160 if l[0].endswith('+'): # propagate the dirty status to the tag
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
161 version += '+'
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
162 elif len(l) == 1: # no tag found
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
163 cmd = [sys.executable, 'hg', 'parents', '--template',
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
164 '{latesttag}+{latesttagdistance}-']
9807
f359d4f528aa setup: fix f51d1822d6fd refactoring, propagate env to runcmd
Christian Boos <cboos@bct-technology.com>
parents: 9615
diff changeset
165 version = runcmd(cmd, env) + l[0]
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
166 if version.endswith('+'):
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
167 version += time.strftime('%Y%m%d')
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
168 elif os.path.exists('.hg_archival.txt'):
10124
08384d8777a4 setup.py: keep Python 2.3 compatibility
Martin Geisler <mg@lazybytes.net>
parents: 10120
diff changeset
169 kw = dict([[t.strip() for t in l.split(':', 1)]
08384d8777a4 setup.py: keep Python 2.3 compatibility
Martin Geisler <mg@lazybytes.net>
parents: 10120
diff changeset
170 for l in open('.hg_archival.txt')])
9615
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
171 if 'tag' in kw:
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
172 version = kw['tag']
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
173 elif 'latesttag' in kw:
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
174 version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw
8547
548fd7a05373 setup.py: subprocess instead of os.popen, sys.stderr.write instead of print
Christian Ebert <blacktrash@gmx.net>
parents: 8494
diff changeset
175 else:
9615
f51d1822d6fd setup: refactor the version string to a subset of tag+tagdist-hash+date
Gilles Moris <gilles.moris@free.fr>
parents: 9539
diff changeset
176 version = kw.get('node', '')[:12]
7632
9626819b2e3d refactor version code
Matt Mackall <mpm@selenic.com>
parents: 7558
diff changeset
177
8548
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
178 if version:
9031
3b76321aa0de compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents: 8936
diff changeset
179 f = open("mercurial/__version__.py", "w")
8548
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
180 f.write('# this file is autogenerated by setup.py\n')
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
181 f.write('version = "%s"\n' % version)
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
182 f.close()
3ccbe42ff72f setup: read .hg_archival.txt for version info (issue1670)
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 8547
diff changeset
183
8493
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
184
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
185 try:
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
186 from mercurial import __version__
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
187 version = __version__.version
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
188 except ImportError:
4c030ada58d2 Fix how setup.py identifies the Mercurial version.
Jeremy Whitlock <jcscoobyrs@gmail.com>
parents: 7826
diff changeset
189 version = 'unknown'
7632
9626819b2e3d refactor version code
Matt Mackall <mpm@selenic.com>
parents: 7558
diff changeset
190
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
191 class hgbuildmo(build):
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
192
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
193 description = "build translations (.mo files)"
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
194
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
195 def run(self):
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
196 if not find_executable('msgfmt'):
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
197 self.warn("could not find msgfmt executable, no translations "
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
198 "will be built")
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
199 return
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
200
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
201 podir = 'i18n'
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
202 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
203 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
204 return
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
205
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
206 join = os.path.join
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
207 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
208 if not po.endswith('.po'):
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
209 continue
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
210 pofile = join(podir, po)
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
211 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
212 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
213 mobuildfile = join('mercurial', mofile)
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
214 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
215 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
216 # 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
217 cmd.append('-c')
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
218 self.mkpath(join('mercurial', modir))
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
219 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
220
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
221 # Insert hgbuildmo first so that files in mercurial/locale/ are found
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
222 # when build_py is run next.
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
223 build.sub_commands.insert(0, ('build_mo', None))
11948
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
224 # We also need build_ext before build_py. Otherwise, when 2to3 is called (in
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
225 # build_py), it will not find osutil & friends, thinking that those modules are
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
226 # global and, consequently, making a mess, now that all module imports are
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
227 # global.
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
228 build.sub_commands.insert(1, ('build_ext', None))
7649
a489e3a94443 i18n: new build_mo command for setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7648
diff changeset
229
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
230 Distribution.pure = 0
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
231 Distribution.global_options.append(('pure', None, "use pure (slow) Python "
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
232 "code instead of C extensions"))
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
233
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
234 class hgbuildext(build_ext):
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
235
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
236 def build_extension(self, ext):
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
237 try:
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
238 build_ext.build_extension(self, ext)
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
239 except CCompilerError:
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
240 if not hasattr(ext, 'optional') or not ext.optional:
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
241 raise
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
242 log.warn("Failed to build optional extension '%s' (skipping)",
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
243 ext.name)
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
244
11948
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
245 class hgbuildpy(build_py_2to3):
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
246 fixer_names = sorted(set(getfixers("lib2to3.fixes") +
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
247 getfixers("hgfixes")))
7722
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
248
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
249 def finalize_options(self):
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
250 build_py.finalize_options(self)
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
251
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
252 if self.distribution.pure:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
253 if self.py_modules is None:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
254 self.py_modules = []
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
255 for ext in self.distribution.ext_modules:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
256 if ext.name.startswith("mercurial."):
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
257 self.py_modules.append("mercurial.pure.%s" % ext.name[10:])
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
258 self.distribution.ext_modules = []
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
259
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
260 def find_modules(self):
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
261 modules = build_py.find_modules(self)
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
262 for module in modules:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
263 if module[0] == "mercurial.pure":
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
264 if module[1] != "__init__":
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
265 yield ("mercurial", module[1], module[2])
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
266 else:
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
267 yield module
103127a8cbdb add --pure flag to setup.py
Martin Geisler <mg@daimi.au.dk>
parents: 7721
diff changeset
268
11948
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
269 def run(self):
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
270 # In the build_py_2to3 class, self.updated_files = [], but I couldn't
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
271 # see when that variable was updated to point to the updated files, as
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
272 # its names suggests. Thus, I decided to just find_all_modules and feed
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
273 # them to 2to3. Unfortunately, subsequent calls to setup3k.py will
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
274 # incur in 2to3 analysis overhead.
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
275 self.updated_files = [i[2] for i in self.find_all_modules()]
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
276
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
277 # Base class code
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
278 if self.py_modules:
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
279 self.build_modules()
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
280 if self.packages:
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
281 self.build_packages()
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
282 self.build_package_data()
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
283
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
284 # 2to3
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
285 self.run_2to3(self.updated_files)
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
286
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
287 # Remaining base class code
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
288 self.byte_compile(self.get_outputs(include_bytecode=0))
88d4911930bf contrib/setup3k.py: added script to build hg with py3k
Renato Cunha <renatoc@gmail.com>
parents: 11533
diff changeset
289
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
290 cmdclass = {'build_mo': hgbuildmo,
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
291 'build_ext': hgbuildext,
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
292 'build_py': hgbuildpy}
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
293
10521
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
294 packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert',
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
295 'hgext.highlight', 'hgext.zeroconf']
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
296
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
297 pymodules = []
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
298
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
299 extmodules = [
6389
0231f763ebc8 manifest: improve parsing performance by 8x via a new C extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6373
diff changeset
300 Extension('mercurial.base85', ['mercurial/base85.c']),
5396
5105b119edd2 Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5197
diff changeset
301 Extension('mercurial.bdiff', ['mercurial/bdiff.c']),
6389
0231f763ebc8 manifest: improve parsing performance by 8x via a new C extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6373
diff changeset
302 Extension('mercurial.diffhelpers', ['mercurial/diffhelpers.c']),
0231f763ebc8 manifest: improve parsing performance by 8x via a new C extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6373
diff changeset
303 Extension('mercurial.mpatch', ['mercurial/mpatch.c']),
0231f763ebc8 manifest: improve parsing performance by 8x via a new C extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6373
diff changeset
304 Extension('mercurial.parsers', ['mercurial/parsers.c']),
5396
5105b119edd2 Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5197
diff changeset
305 ]
5105b119edd2 Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5197
diff changeset
306
10521
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
307 # disable osutil.c under windows + python 2.4 (issue1364)
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
308 if sys.platform == 'win32' and sys.version_info < (2, 5, 0, 'final'):
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
309 pymodules.append('mercurial.pure.osutil')
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
310 else:
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
311 extmodules.append(Extension('mercurial.osutil', ['mercurial/osutil.c']))
6239
39cfcef4f463 Add inotify extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6009
diff changeset
312
8283
d6134b800797 setup: cleanup old left-over code
Martin Geisler <mg@lazybytes.net>
parents: 7958
diff changeset
313 if sys.platform == 'linux2' and os.uname()[2] > '2.6':
d6134b800797 setup: cleanup old left-over code
Martin Geisler <mg@lazybytes.net>
parents: 7958
diff changeset
314 # The inotify extension is only usable with Linux 2.6 kernels.
d6134b800797 setup: cleanup old left-over code
Martin Geisler <mg@lazybytes.net>
parents: 7958
diff changeset
315 # You also need a reasonably recent C library.
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
316 # In any case, if it fails to build the error will be skipped ('optional').
8283
d6134b800797 setup: cleanup old left-over code
Martin Geisler <mg@lazybytes.net>
parents: 7958
diff changeset
317 cc = new_compiler()
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
318 if hasfunction(cc, 'inotify_add_watch'):
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
319 inotify = Extension('hgext.inotify.linux._inotify',
11533
5be8760d2fb3 setup.py: Add 'mercurial' as include dir for the inotify compiler.
Renato Cunha <renatoc@gmail.com>
parents: 11532
diff changeset
320 ['hgext/inotify/linux/_inotify.c'],
5be8760d2fb3 setup.py: Add 'mercurial' as include dir for the inotify compiler.
Renato Cunha <renatoc@gmail.com>
parents: 11532
diff changeset
321 ['mercurial'])
11468
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
322 inotify.optional = True
1c1126b1d919 setup: ignore failures to build optional inotify extension
Christian Boos <cboos@neuf.fr>
parents: 10905
diff changeset
323 extmodules.append(inotify)
8283
d6134b800797 setup: cleanup old left-over code
Martin Geisler <mg@lazybytes.net>
parents: 7958
diff changeset
324 packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
5396
5105b119edd2 Add osutil module, containing a listdir function.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5197
diff changeset
325
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
326 packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo',
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
327 'help/*.txt']}
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
328
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
329 def ordinarypath(p):
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
330 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
331
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10264
diff changeset
332 for root in ('templates',):
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
333 for curdir, dirs, files in os.walk(os.path.join('mercurial', root)):
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
334 curdir = curdir.split(os.sep, 1)[1]
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
335 dirs[:] = filter(ordinarypath, dirs)
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
336 for f in filter(ordinarypath, files):
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
337 f = os.path.join(curdir, f)
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
338 packagedata['mercurial'].append(f)
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
339
7648
02e358a3a8a7 i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents: 7647
diff changeset
340 datafiles = []
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
341 setupversion = version
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
342 extra = {}
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
343
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
344 if py2exeloaded:
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
345 extra['console'] = [
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
346 {'script':'hg',
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
347 'copyright':'Copyright (C) 2005-2010 Matt Mackall and others',
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
348 'product_version':version}]
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
349
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
350 if os.name == 'nt':
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
351 # 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
352 # form W.X.Y.Z, where W,X,Y,Z are numbers in the range 0..65535
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
353 setupversion = version.split('+', 1)[0]
7648
02e358a3a8a7 i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents: 7647
diff changeset
354
1977
7eb694a1c1af Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1873
diff changeset
355 setup(name='mercurial',
10400
fb203201ce30 setup.py: fixing version info for Windows hg.exe (py2exe)
Adrian Buehlmann <adrian@cadifra.com>
parents: 10282
diff changeset
356 version=setupversion,
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
357 author='Matt Mackall',
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
358 author_email='mpm@selenic.com',
8936
1de6e7e1bb9f change wiki/bts URLs to point to new hostname
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8648
diff changeset
359 url='http://mercurial.selenic.com/',
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
360 description='Scalable distributed SCM',
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10124
diff changeset
361 license='GNU GPLv2+',
6513
66e87c11447d Add a batch file driver for Windows
Paul Moore <p.f.moore@gmail.com>
parents: 6389
diff changeset
362 scripts=scripts,
6239
39cfcef4f463 Add inotify extension
Bryan O'Sullivan <bos@serpentine.com>
parents: 6009
diff changeset
363 packages=packages,
10521
bde1bb250fc2 Do not use osutil.c with python 2.4 and Windows (issue1364)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 10400
diff changeset
364 py_modules=pymodules,
10000
16f49d671c7f setup: cleanup coding style
Martin Geisler <mg@lazybytes.net>
parents: 9999
diff changeset
365 ext_modules=extmodules,
7648
02e358a3a8a7 i18n: let Makefile generate i18n/hg.pot
Martin Geisler <mg@daimi.au.dk>
parents: 7647
diff changeset
366 data_files=datafiles,
9999
f91e5630ce7e setup: install translation files as package data
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 9998
diff changeset
367 package_data=packagedata,
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
368 cmdclass=cmdclass,
6789
c1c202e2d45d Force email package to be loaded in py2exe
Paul Moore <p.f.moore@gmail.com>
parents: 6373
diff changeset
369 options=dict(py2exe=dict(packages=['hgext', 'email']),
4628
02956be66a58 Fix for including hgext in Windows compiled version.
Lee Cantey <lcantey@gmail.com>
parents: 4519
diff changeset
370 bdist_mpkg=dict(zipdist=True,
3238
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
371 license='COPYING',
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
372 readme='contrib/macosx/Readme.html',
3dba9ec89164 Applied coding style to setup.py
Thomas Arendsen Hein <thomas@intevation.de>
parents: 2402
diff changeset
373 welcome='contrib/macosx/Welcome.html')),
3893
070628929e1f Fix setup.py warning
Matt Mackall <mpm@selenic.com>
parents: 3892
diff changeset
374 **extra)