15
if sys.version_info < (3, 5):
16
sys.stderr.write("[ERROR] Not a supported Python version. Need 3.5+\n")
23
sys.stderr.write("[ERROR] Please install setuptools\n")
13
if sys.version_info < (2, 4):
14
sys.stderr.write("[ERROR] Not a supported Python version. Need 2.4+\n")
27
17
# NOTE: The directory containing setup.py, whether run by 'python setup.py' or
28
18
# './setup.py' or the equivalent with another path, should always be at the
29
19
# start of the path, so this should find the right one...
32
22
def get_long_description():
33
23
dirname = os.path.dirname(__file__)
34
readme = os.path.join(dirname, 'README.rst')
35
with open(readme, 'r') as f:
24
readme = os.path.join(dirname, 'README')
25
f = open(readme, 'rb')
40
33
# META INFORMATION FOR SETUP
41
34
# see http://docs.python.org/dist/meta-data.html
44
'version': breezy.__version__,
45
'maintainer': 'Breezy Developers',
46
'maintainer_email': 'team@breezy-vcs.org',
47
'url': 'https://www.breezy-vcs.org/',
48
'description': 'Friendly distributed version control system',
49
'license': 'GNU GPL v2',
50
'download_url': 'https://launchpad.net/brz/+download',
37
'version': bzrlib.__version__,
38
'author': 'Canonical Ltd',
39
'author_email': 'bazaar@lists.canonical.com',
40
'url': 'http://www.bazaar-vcs.org/',
41
'description': 'Friendly distributed version control system',
42
'license': 'GNU GPL v2',
43
'download_url': 'http://bazaar-vcs.org/Download',
51
44
'long_description': get_long_description(),
53
46
'Development Status :: 6 - Mature',
62
55
'Programming Language :: C',
63
56
'Topic :: Software Development :: Version Control',
68
# Technically, Breezy works without these two dependencies too. But there's
69
# no way to enable them by default and let users opt out.
70
'dulwich>=0.19.12;python_version>="3.5"',
71
'dulwich<0.20,>=0.19.12;python_version<"3.0"',
76
'launchpad': ['launchpadlib>=1.6.3'],
77
'workspace': ['pyinotify'],
81
'testtools<=2.4.0;python_version<"3.0"',
86
60
# The list of packages is automatically generated later. Add other things
87
# that are part of BREEZY here.
91
# install files from selftest suite
92
'package_data': {'breezy': ['doc/api/*.txt',
93
'tests/test_patches_data/*',
94
'help_topics/en/*.txt',
95
'tests/ssl_certs/ca.crt',
96
'tests/ssl_certs/server_without_pass.key',
97
'tests/ssl_certs/server_with_pass.key',
98
'tests/ssl_certs/server.crt',
102
for filepath in glob.glob("breezy/locale/*/LC_MESSAGES/*.mo"):
103
langfile = filepath[len("breezy/locale/"):]
104
targetpath = os.path.dirname(os.path.join("share/locale", langfile))
105
I18N_FILES.append((targetpath, [filepath]))
107
def get_breezy_packages():
108
"""Recurse through the breezy directory, and extract the package names"""
61
# that are part of BZRLIB here.
64
PKG_DATA = {# install files from selftest suite
65
'package_data': {'bzrlib': ['doc/api/*.txt',
66
'tests/test_patches_data/*',
67
'help_topics/en/*.txt',
68
'tests/ssl_certs/server_without_pass.key',
69
'tests/ssl_certs/server_with_pass.key',
70
'tests/ssl_certs/server.crt'
75
def get_bzrlib_packages():
76
"""Recurse through the bzrlib directory, and extract the package names"""
111
base_path = os.path.dirname(os.path.abspath(breezy.__file__))
79
base_path = os.path.dirname(os.path.abspath(bzrlib.__file__))
112
80
for root, dirs, files in os.walk(base_path):
113
81
if '__init__.py' in files:
114
82
assert root.startswith(base_path)
115
# Get just the path below breezy
83
# Get just the path below bzrlib
116
84
package_path = root[len(base_path):]
117
85
# Remove leading and trailing slashes
118
86
package_path = package_path.strip('\\/')
119
87
if not package_path:
120
package_name = 'breezy'
88
package_name = 'bzrlib'
124
package_path.replace('/', '.').replace('\\', '.'))
90
package_name = ('bzrlib.' +
91
package_path.replace('/', '.').replace('\\', '.'))
125
92
packages.append(package_name)
126
93
return sorted(packages)
129
BREEZY['packages'] = get_breezy_packages()
132
from setuptools import setup
133
from distutils.version import LooseVersion
96
BZRLIB['packages'] = get_bzrlib_packages()
99
from distutils import log
100
from distutils.core import setup
134
101
from distutils.command.install_scripts import install_scripts
135
102
from distutils.command.install_data import install_data
136
103
from distutils.command.build import build
151
118
scripts_dir = os.path.join(sys.prefix, 'Scripts')
152
119
script_path = self._quoted_path(os.path.join(scripts_dir,
154
121
python_exe = self._quoted_path(sys.executable)
155
batch_str = "@%s %s %%*" % (python_exe, script_path)
156
batch_path = os.path.join(self.install_dir, "brz.bat")
157
with open(batch_path, "w") as f:
159
print(("Created: %s" % batch_path))
161
e = sys.exc_info()[1]
162
print(("ERROR: Unable to create %s: %s" % (batch_path, e)))
122
args = self._win_batch_args()
123
batch_str = "@%s %s %s" % (python_exe, script_path, args)
124
batch_path = os.path.join(self.install_dir, "bzr.bat")
125
f = file(batch_path, "w")
128
print "Created:", batch_path
130
print "ERROR: Unable to create %s: %s" % (batch_path, e)
164
132
def _quoted_path(self, path):
166
134
return '"' + path + '"'
138
def _win_batch_args(self):
139
from bzrlib.win32utils import winver
140
if winver == 'Windows NT':
143
return '%1 %2 %3 %4 %5 %6 %7 %8 %9'
169
144
#/class my_install_scripts
172
147
class bzr_build(build):
173
148
"""Customized build distutils action.
177
sub_commands = build.sub_commands + [
178
('build_mo', lambda _: True),
184
155
from tools import generate_docs
185
generate_docs.main(argv=["brz", "man"])
156
generate_docs.main(argv=["bzr", "man"])
188
159
########################
190
161
########################
192
from breezy.bzr_distutils import build_mo
194
163
command_classes = {'install_scripts': my_install_scripts,
196
'build_mo': build_mo,
198
165
from distutils import log
199
166
from distutils.errors import CCompilerError, DistutilsPlatformError
200
167
from distutils.extension import Extension
203
from Cython.Distutils import build_ext
204
from Cython.Compiler.Version import version as cython_version
170
from Pyrex.Distutils import build_ext
205
171
except ImportError:
207
173
# try to build the extension from the prior generated source.
209
print("The python package 'Cython' is not available."
210
" If the .c files are available,")
211
print("they will be built,"
212
" but modifying the .pyx files will not rebuild them.")
175
print ("The python package 'Pyrex' is not available."
176
" If the .c files are available,")
177
print ("they will be built,"
178
" but modifying the .pyx files will not rebuild them.")
214
180
from distutils.command.build_ext import build_ext
216
minimum_cython_version = '0.29'
217
cython_version_info = LooseVersion(cython_version)
218
if cython_version_info < LooseVersion(minimum_cython_version):
219
print("Version of Cython is too old. "
220
"Current is %s, need at least %s."
221
% (cython_version, minimum_cython_version))
222
print("If the .c files are available, they will be built,"
223
" but modifying the .pyx files will not rebuild them.")
183
from Pyrex.Compiler.Version import version as pyrex_version
229
186
class build_ext_if_possible(build_ext):
270
# Override the build_ext if we have Cython available
226
# Override the build_ext if we have Pyrex available
271
227
command_classes['build_ext'] = build_ext_if_possible
272
228
unavailable_files = []
275
def add_cython_extension(module_name, libraries=None, extra_source=[]):
276
"""Add a cython module to build.
231
def add_pyrex_extension(module_name, libraries=None, extra_source=[]):
232
"""Add a pyrex module to build.
278
This will use Cython to auto-generate the .c file if it is available.
234
This will use Pyrex to auto-generate the .c file if it is available.
279
235
Otherwise it will fall back on the .c file. If the .c file is not
280
236
available, it will warn, and not add anything.
286
242
determine the .pyx and .c files to use.
288
244
path = module_name.replace('.', '/')
289
cython_name = path + '.pyx'
245
pyrex_name = path + '.pyx'
290
246
c_name = path + '.c'
291
247
define_macros = []
292
248
if sys.platform == 'win32':
293
# cython uses the macro WIN32 to detect the platform, even though it
249
# pyrex uses the macro WIN32 to detect the platform, even though it
294
250
# should be using something like _WIN32 or MS_WINDOWS, oh well, we can
295
251
# give it the right value.
296
252
define_macros.append(('WIN32', None))
298
source = [cython_name]
254
source = [pyrex_name]
300
256
if not os.path.isfile(c_name):
301
257
unavailable_files.append(c_name)
304
260
source = [c_name]
305
261
source.extend(extra_source)
306
include_dirs = ['breezy']
309
module_name, source, define_macros=define_macros,
310
libraries=libraries, include_dirs=include_dirs))
313
add_cython_extension('breezy._simple_set_pyx')
314
ext_modules.append(Extension('breezy._static_tuple_c',
315
['breezy/_static_tuple_c.c']))
316
add_cython_extension('breezy._annotator_pyx')
317
add_cython_extension('breezy._bencode_pyx')
318
add_cython_extension('breezy._chunks_to_lines_pyx')
319
add_cython_extension('breezy.bzr._groupcompress_pyx',
320
extra_source=['breezy/bzr/diff-delta.c'])
321
add_cython_extension('breezy.bzr._knit_load_data_pyx')
322
add_cython_extension('breezy._known_graph_pyx')
323
add_cython_extension('breezy._rio_pyx')
262
ext_modules.append(Extension(module_name, source,
263
define_macros=define_macros, libraries=libraries))
266
add_pyrex_extension('bzrlib._annotator_pyx')
267
add_pyrex_extension('bzrlib._bencode_pyx')
268
add_pyrex_extension('bzrlib._btree_serializer_pyx')
269
add_pyrex_extension('bzrlib._chunks_to_lines_pyx')
270
add_pyrex_extension('bzrlib._groupcompress_pyx',
271
extra_source=['bzrlib/diff-delta.c'])
272
add_pyrex_extension('bzrlib._knit_load_data_pyx')
273
add_pyrex_extension('bzrlib._known_graph_pyx')
274
add_pyrex_extension('bzrlib._rio_pyx')
324
275
if sys.platform == 'win32':
325
add_cython_extension('breezy.bzr._dirstate_helpers_pyx',
326
libraries=['Ws2_32'])
327
add_cython_extension('breezy._walkdirs_win32')
276
add_pyrex_extension('bzrlib._dirstate_helpers_pyx',
277
libraries=['Ws2_32'])
278
add_pyrex_extension('bzrlib._walkdirs_win32')
329
add_cython_extension('breezy.bzr._dirstate_helpers_pyx')
330
add_cython_extension('breezy._readdir_pyx')
331
add_cython_extension('breezy.bzr._chk_map_pyx')
332
add_cython_extension('breezy.bzr._btree_serializer_pyx')
281
if have_pyrex and pyrex_version == '0.9.4.1':
282
# Pyrex 0.9.4.1 fails to compile this extension correctly
283
# The code it generates re-uses a "local" pointer and
284
# calls "PY_DECREF" after having set it to NULL. (It mixes PY_XDECREF
285
# which is NULL safe with PY_DECREF which is not.)
286
print 'Cannot build extension "bzrlib._dirstate_helpers_pyx" using'
287
print 'your version of pyrex "%s". Please upgrade your pyrex' % (
289
print 'install. For now, the non-compiled (python) version will'
290
print 'be used instead.'
292
add_pyrex_extension('bzrlib._dirstate_helpers_pyx')
293
add_pyrex_extension('bzrlib._readdir_pyx')
295
add_pyrex_extension('bzrlib._chk_map_pyx', libraries=[z_lib])
296
ext_modules.append(Extension('bzrlib._patiencediff_c',
297
['bzrlib/_patiencediff_c.c']))
335
300
if unavailable_files:
336
print('C extension(s) not found:')
337
print((' %s' % ('\n '.join(unavailable_files),)))
338
print('The python versions will be used instead.')
301
print 'C extension(s) not found:'
302
print ' %s' % ('\n '.join(unavailable_files),)
303
print 'The python versions will be used instead.'
342
307
def get_tbzr_py2exe_info(includes, excludes, packages, console_targets,
359
324
# TBZR points to the TBZR directory
360
325
tbzr_root = os.environ["TBZR"]
362
# Ensure tbreezy itself is on sys.path
327
# Ensure tbzrlib itself is on sys.path
363
328
sys.path.append(tbzr_root)
365
packages.append("tbreezy")
330
# Ensure our COM "entry-point" is on sys.path
331
sys.path.append(os.path.join(tbzr_root, "shellext", "python"))
333
packages.append("tbzrlib")
367
335
# collect up our icons.
368
336
cwd = os.getcwd()
369
ico_root = os.path.join(tbzr_root, 'tbreezy', 'resources')
337
ico_root = os.path.join(tbzr_root, 'tbzrlib', 'resources')
370
338
icos = [] # list of (path_root, relative_ico_path)
371
# First always brz's icon and its in the root of the brz tree.
372
icos.append(('', 'brz.ico'))
339
# First always bzr's icon and its in the root of the bzr tree.
340
icos.append(('', 'bzr.ico'))
373
341
for root, dirs, files in os.walk(ico_root):
374
icos.extend([(ico_root, os.path.join(root, f)[len(ico_root) + 1:])
342
icos.extend([(ico_root, os.path.join(root, f)[len(ico_root)+1:])
375
343
for f in files if f.endswith('.ico')])
376
344
# allocate an icon ID for each file and the full path to the ico
377
345
icon_resources = [(rid, os.path.join(ico_dir, ico_name))
384
352
for rid, (_, f) in enumerate(icos)]
385
353
ico_map = dict(map_items)
386
354
# Create a new resource type of 'ICON_MAP', and use ID=1
387
other_resources = [("ICON_MAP", 1, pickle.dumps(ico_map))]
355
other_resources = [ ("ICON_MAP", 1, pickle.dumps(ico_map))]
389
357
excludes.extend("""pywin pywin.dialogs pywin.dialogs.list
390
358
win32ui crawler.Crawler""".split())
360
# NOTE: We still create a DLL version of the Python implemented shell
361
# extension for testing purposes - but it is *not* registered by
362
# default - our C++ one is instead. To discourage people thinking
363
# this DLL is still necessary, its called 'tbzr_old.dll'
366
create_exe = False, # we only want a .dll
367
dest_base = 'tbzr_old',
369
com_targets.append(tbzr)
392
371
# tbzrcache executables - a "console" version for debugging and a
393
372
# GUI version that is generally used.
394
373
tbzrcache = dict(
395
script=os.path.join(tbzr_root, "scripts", "tbzrcache.py"),
396
icon_resources=icon_resources,
397
other_resources=other_resources,
374
script = os.path.join(tbzr_root, "scripts", "tbzrcache.py"),
375
icon_resources = icon_resources,
376
other_resources = other_resources,
399
378
console_targets.append(tbzrcache)
401
380
# Make a windows version which is the same except for the base name.
402
381
tbzrcachew = tbzrcache.copy()
403
tbzrcachew["dest_base"] = "tbzrcachew"
382
tbzrcachew["dest_base"]="tbzrcachew"
404
383
gui_targets.append(tbzrcachew)
406
385
# ditto for the tbzrcommand tool
407
386
tbzrcommand = dict(
408
script=os.path.join(tbzr_root, "scripts", "tbzrcommand.py"),
409
icon_resources=icon_resources,
410
other_resources=other_resources,
387
script = os.path.join(tbzr_root, "scripts", "tbzrcommand.py"),
388
icon_resources = [(0,'bzr.ico')],
412
390
console_targets.append(tbzrcommand)
413
391
tbzrcommandw = tbzrcommand.copy()
414
tbzrcommandw["dest_base"] = "tbzrcommandw"
392
tbzrcommandw["dest_base"]="tbzrcommandw"
415
393
gui_targets.append(tbzrcommandw)
417
395
# A utility to see python output from both C++ and Python based shell
419
397
tracer = dict(script=os.path.join(tbzr_root, "scripts", "tbzrtrace.py"))
420
398
console_targets.append(tracer)
422
400
# The C++ implemented shell extensions.
423
dist_dir = os.path.join(tbzr_root, "shellext", "build")
401
dist_dir = os.path.join(tbzr_root, "shellext", "cpp", "tbzrshellext",
424
403
data_files.append(('', [os.path.join(dist_dir, 'tbzrshellext_x86.dll')]))
425
404
data_files.append(('', [os.path.join(dist_dir, 'tbzrshellext_x64.dll')]))
428
407
def get_qbzr_py2exe_info(includes, excludes, packages, data_files):
429
408
# PyQt4 itself still escapes the plugin detection code for some reason...
430
includes.append('PyQt4.QtCore')
431
includes.append('PyQt4.QtGui')
432
includes.append('PyQt4.QtTest')
409
packages.append('PyQt4')
410
excludes.append('PyQt4.elementtree.ElementTree')
433
411
includes.append('sip') # extension module required for Qt.
434
412
packages.append('pygments') # colorizer for qbzr
435
413
packages.append('docutils') # html formatting
436
includes.append('win32event') # for qsubprocess stuff
414
# but we can avoid many Qt4 Dlls.
416
"""QtAssistantClient4.dll QtCLucene4.dll QtDesigner4.dll
417
QtHelp4.dll QtNetwork4.dll QtOpenGL4.dll QtScript4.dll
418
QtSql4.dll QtTest4.dll QtWebKit4.dll QtXml4.dll
419
qscintilla2.dll""".split())
437
420
# the qt binaries might not be on PATH...
438
421
# They seem to install to a place like C:\Python25\PyQt4\*
439
422
# Which is not the same as C:\Python25\Lib\site-packages\PyQt4
497
469
for root, dirs, files in os.walk('doc'):
500
if (os.path.splitext(f)[1] in ('.html', '.css', '.png', '.pdf')
501
or f == 'quick-start-summary.svg'):
472
if (os.path.splitext(f)[1] in ('.html','.css','.png','.pdf')
473
or f == 'quick-start-summary.svg'):
502
474
r.append(os.path.join(root, f))
504
476
relative = root[4:]
506
target = os.path.join('Doc\\Breezy', relative)
478
target = os.path.join('Doc\\Bazaar', relative)
508
target = 'Doc\\Breezy'
480
target = 'Doc\\Bazaar'
509
481
docs.append((target, r))
512
484
# python's distutils-based win32 installer
513
ARGS = {'scripts': ['brz', 'tools/win32/brz-win32-bdist-postinstall.py'],
485
ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
514
486
'ext_modules': ext_modules,
516
488
'data_files': find_docs(),
517
# for building cython extensions
518
'cmdclass': command_classes,
489
# for building pyrex extensions
490
'cmdclass': {'build_ext': build_ext_if_possible},
521
493
ARGS.update(META_INFO)
523
PKG_DATA['package_data']['breezy'].append('locale/*/LC_MESSAGES/*.mo')
524
495
ARGS.update(PKG_DATA)
528
499
elif 'py2exe' in sys.argv:
532
# pick real brz version
504
# pick real bzr version
535
507
version_number = []
536
for i in breezy.version_info[:4]:
508
for i in bzrlib.version_info[:4]:
539
511
except ValueError:
552
524
install_data.run(self)
554
526
py2exe = self.distribution.get_command_obj('py2exe', False)
555
# GZ 2010-04-19: Setup has py2exe.optimize as 2, but give plugins
556
# time before living with docstring stripping
527
optimize = py2exe.optimize
558
528
compile_names = [f for f in self.outfiles if f.endswith('.py')]
559
# Round mtime to nearest even second so that installing on a FAT
560
# filesystem bytecode internal and script timestamps will match
561
for f in compile_names:
562
mtime = os.stat(f).st_mtime
563
remainder = mtime % 2
566
os.utime(f, (mtime, mtime))
567
529
byte_compile(compile_names,
568
530
optimize=optimize,
569
531
force=self.force, prefix=self.install_dir,
570
532
dry_run=self.dry_run)
571
self.outfiles.extend([f + 'o' for f in compile_names])
537
self.outfiles.extend([f + suffix for f in compile_names])
572
538
# end of class install_data_with_bytecompile
574
target = py2exe.build_exe.Target(
577
icon_resources=[(0, 'brz.ico')],
578
name=META_INFO['name'],
580
description=META_INFO['description'],
581
author=META_INFO['author'],
582
copyright="(c) Canonical Ltd, 2005-2010",
583
company_name="Canonical Ltd.",
584
comments=META_INFO['description'],
586
gui_target = copy.copy(target)
587
gui_target.dest_base = "bzrw"
540
target = py2exe.build_exe.Target(script = "bzr",
542
icon_resources = [(0,'bzr.ico')],
543
name = META_INFO['name'],
544
version = version_str,
545
description = META_INFO['description'],
546
author = META_INFO['author'],
547
copyright = "(c) Canonical Ltd, 2005-2007",
548
company_name = "Canonical Ltd.",
549
comments = META_INFO['description'],
589
packages = BREEZY['packages']
590
packages.remove('breezy')
591
packages = [i for i in packages if not i.startswith('breezy.plugins')]
552
packages = BZRLIB['packages']
553
packages.remove('bzrlib')
554
packages = [i for i in packages if not i.startswith('bzrlib.plugins')]
593
for i in glob.glob('breezy\\*.py'):
556
for i in glob.glob('bzrlib\\*.py'):
594
557
module = i[:-3].replace('\\', '.')
595
558
if module.endswith('__init__'):
596
559
module = module[:-len('__init__')]
597
560
includes.append(module)
599
562
additional_packages = set()
563
if sys.version.startswith('2.4'):
564
# adding elementtree package
565
additional_packages.add('elementtree')
566
elif sys.version.startswith('2.5'):
567
additional_packages.add('xml.etree')
570
warnings.warn('Unknown Python version.\n'
571
'Please check setup.py script for compatibility.')
601
573
# Although we currently can't enforce it, we consider it an error for
602
574
# py2exe to report any files are "missing". Such modules we know aren't
639
612
# library.zip, and then saw import errors related to that as the
640
613
# rest of the svn plugin wasn't. So we tell py2exe to leave the
641
614
# plugins out of the .zip file
642
excludes.extend(["breezy.plugins." + d for d in dirs])
615
excludes.extend(["bzrlib.plugins." + d for d in dirs])
645
# Throw away files we don't want packaged. Note that plugins may
646
# have data files with all sorts of extensions so we need to
647
# be conservative here about what we ditch.
648
ext = os.path.splitext(i)[1]
649
if ext.endswith('~') or ext in [".pyc", ".swp"]:
618
if os.path.splitext(i)[1] not in [".py", ".pyd", ".dll", ".mo"]:
651
if i == '__init__.py' and root == 'breezy/plugins':
620
if i == '__init__.py' and root == 'bzrlib/plugins':
653
622
x.append(os.path.join(root, i))
655
target_dir = root[len('breezy/'):] # install to 'plugins/...'
624
target_dir = root[len('bzrlib/'):] # install to 'plugins/...'
656
625
plugins_files.append((target_dir, x))
657
626
# find modules for built-in plugins
658
627
import tools.package_mf
659
628
mf = tools.package_mf.CustomModuleFinder()
660
mf.run_package('breezy/plugins')
629
mf.run_package('bzrlib/plugins')
661
630
packs, mods = mf.get_result()
662
631
additional_packages.update(packs)
663
632
includes.extend(mods)
704
668
# print this warning to stderr as output is redirected, so it is seen
705
669
# at build time. Also to stdout so it appears in the log
706
670
for f in (sys.stderr, sys.stdout):
707
f.write("Skipping TBZR binaries - "
708
"please set TBZR to a directory to enable\n")
672
"Skipping TBZR binaries - please set TBZR to a directory to enable"
710
674
# MSWSOCK.dll is a system-specific library, which py2exe accidentally pulls
712
dll_excludes.extend(["MSWSOCK.dll",
676
dll_excludes.extend(["MSWSOCK.dll", "MSVCP60.dll", "powrprof.dll"])
717
677
options_list = {"py2exe": {"packages": packages + list(additional_packages),
718
678
"includes": includes,
719
679
"excludes": excludes,
720
680
"dll_excludes": dll_excludes,
721
681
"dist_dir": "win32_bzr.exe",
723
"custom_boot_script":
724
"tools/win32/py2exe_boot_common.py",
728
# We want the libaray.zip to have optimize = 2, but the exe to have
729
# optimize = 1, so that .py files that get compilied at run time
730
# (e.g. user installed plugins) dont have their doc strings removed.
731
class py2exe_no_oo_exe(py2exe.build_exe.py2exe):
732
def build_executable(self, *args, **kwargs):
734
py2exe.build_exe.py2exe.build_executable(self, *args, **kwargs)
737
if __name__ == '__main__':
738
command_classes['install_data'] = install_data_with_bytecompile
739
command_classes['py2exe'] = py2exe_no_oo_exe
740
setup(options=options_list,
741
console=console_targets,
743
zipfile='lib/library.zip',
744
data_files=data_files,
745
cmdclass=command_classes,
686
setup(options=options_list,
687
console=console_targets,
689
com_server=com_targets,
690
zipfile='lib/library.zip',
691
data_files=data_files,
692
cmdclass={'install_data': install_data_with_bytecompile},
749
696
# ad-hoc for easy_install
751
if 'bdist_egg' not in sys.argv:
752
# generate and install brz.1 only with plain install, not the
698
if not 'bdist_egg' in sys.argv:
699
# generate and install bzr.1 only with plain install, not the
753
700
# easy_install one
754
DATA_FILES = [('man/man1', ['brz.1', 'breezy/git/git-remote-bzr.1'])]
701
DATA_FILES = [('man/man1', ['bzr.1'])]
756
DATA_FILES = DATA_FILES + I18N_FILES
758
ARGS = {'scripts': ['brz',
759
# TODO(jelmer): Only install the git scripts if
761
'breezy/git/git-remote-bzr',
762
'breezy/git/bzr-receive-pack',
763
'breezy/git/bzr-upload-pack'],
704
ARGS = {'scripts': ['bzr'],
764
705
'data_files': DATA_FILES,
765
706
'cmdclass': command_classes,
766
707
'ext_modules': ext_modules,
769
710
ARGS.update(META_INFO)
771
712
ARGS.update(PKG_DATA)
773
if __name__ == '__main__':