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': 'https://launchpad.net/bzr/+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
packages.append("tbzrlib")
367
332
# collect up our icons.
368
333
cwd = os.getcwd()
369
ico_root = os.path.join(tbzr_root, 'tbreezy', 'resources')
334
ico_root = os.path.join(tbzr_root, 'tbzrlib', 'resources')
370
335
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'))
336
# First always bzr's icon and its in the root of the bzr tree.
337
icos.append(('', 'bzr.ico'))
373
338
for root, dirs, files in os.walk(ico_root):
374
icos.extend([(ico_root, os.path.join(root, f)[len(ico_root) + 1:])
339
icos.extend([(ico_root, os.path.join(root, f)[len(ico_root)+1:])
375
340
for f in files if f.endswith('.ico')])
376
341
# allocate an icon ID for each file and the full path to the ico
377
342
icon_resources = [(rid, os.path.join(ico_dir, ico_name))
392
357
# tbzrcache executables - a "console" version for debugging and a
393
358
# GUI version that is generally used.
394
359
tbzrcache = dict(
395
script=os.path.join(tbzr_root, "scripts", "tbzrcache.py"),
396
icon_resources=icon_resources,
397
other_resources=other_resources,
360
script = os.path.join(tbzr_root, "scripts", "tbzrcache.py"),
361
icon_resources = icon_resources,
362
other_resources = other_resources,
399
364
console_targets.append(tbzrcache)
401
366
# Make a windows version which is the same except for the base name.
402
367
tbzrcachew = tbzrcache.copy()
403
tbzrcachew["dest_base"] = "tbzrcachew"
368
tbzrcachew["dest_base"]="tbzrcachew"
404
369
gui_targets.append(tbzrcachew)
406
371
# ditto for the tbzrcommand tool
407
372
tbzrcommand = dict(
408
script=os.path.join(tbzr_root, "scripts", "tbzrcommand.py"),
409
icon_resources=icon_resources,
410
other_resources=other_resources,
373
script = os.path.join(tbzr_root, "scripts", "tbzrcommand.py"),
374
icon_resources = [(0,'bzr.ico')],
412
376
console_targets.append(tbzrcommand)
413
377
tbzrcommandw = tbzrcommand.copy()
414
tbzrcommandw["dest_base"] = "tbzrcommandw"
378
tbzrcommandw["dest_base"]="tbzrcommandw"
415
379
gui_targets.append(tbzrcommandw)
417
381
# A utility to see python output from both C++ and Python based shell
419
383
tracer = dict(script=os.path.join(tbzr_root, "scripts", "tbzrtrace.py"))
428
392
def get_qbzr_py2exe_info(includes, excludes, packages, data_files):
429
393
# 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')
394
packages.append('PyQt4')
395
excludes.append('PyQt4.elementtree.ElementTree')
433
396
includes.append('sip') # extension module required for Qt.
434
397
packages.append('pygments') # colorizer for qbzr
435
398
packages.append('docutils') # html formatting
436
399
includes.append('win32event') # for qsubprocess stuff
400
# but we can avoid many Qt4 Dlls.
402
"""QtAssistantClient4.dll QtCLucene4.dll QtDesigner4.dll
403
QtHelp4.dll QtNetwork4.dll QtOpenGL4.dll QtScript4.dll
404
QtSql4.dll QtTest4.dll QtWebKit4.dll QtXml4.dll
405
qscintilla2.dll""".split())
437
406
# the qt binaries might not be on PATH...
438
407
# They seem to install to a place like C:\Python25\PyQt4\*
439
408
# Which is not the same as C:\Python25\Lib\site-packages\PyQt4
479
448
def get_svn_py2exe_info(includes, excludes, packages):
480
449
packages.append('subvertpy')
481
packages.append('sqlite3')
484
def get_git_py2exe_info(includes, excludes, packages):
485
packages.append('dulwich')
488
def get_fastimport_py2exe_info(includes, excludes, packages):
489
# This is the python-fastimport package, not to be confused with the
490
# brz-fastimport plugin.
491
packages.append('fastimport')
494
452
if 'bdist_wininst' in sys.argv:
497
455
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'):
458
if (os.path.splitext(f)[1] in ('.html','.css','.png','.pdf')
459
or f == 'quick-start-summary.svg'):
502
460
r.append(os.path.join(root, f))
504
462
relative = root[4:]
506
target = os.path.join('Doc\\Breezy', relative)
464
target = os.path.join('Doc\\Bazaar', relative)
508
target = 'Doc\\Breezy'
466
target = 'Doc\\Bazaar'
509
467
docs.append((target, r))
512
470
# python's distutils-based win32 installer
513
ARGS = {'scripts': ['brz', 'tools/win32/brz-win32-bdist-postinstall.py'],
471
ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
514
472
'ext_modules': ext_modules,
516
474
'data_files': find_docs(),
517
# for building cython extensions
518
'cmdclass': command_classes,
475
# for building pyrex extensions
476
'cmdclass': {'build_ext': build_ext_if_possible},
521
479
ARGS.update(META_INFO)
523
PKG_DATA['package_data']['breezy'].append('locale/*/LC_MESSAGES/*.mo')
524
481
ARGS.update(PKG_DATA)
528
485
elif 'py2exe' in sys.argv:
532
# pick real brz version
490
# pick real bzr version
535
493
version_number = []
536
for i in breezy.version_info[:4]:
494
for i in bzrlib.version_info[:4]:
539
497
except ValueError:
552
510
install_data.run(self)
554
512
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
513
optimize = py2exe.optimize
558
514
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
515
byte_compile(compile_names,
568
516
optimize=optimize,
569
517
force=self.force, prefix=self.install_dir,
570
518
dry_run=self.dry_run)
571
self.outfiles.extend([f + 'o' for f in compile_names])
523
self.outfiles.extend([f + suffix for f in compile_names])
572
524
# 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"
526
target = py2exe.build_exe.Target(script = "bzr",
528
icon_resources = [(0,'bzr.ico')],
529
name = META_INFO['name'],
530
version = version_str,
531
description = META_INFO['description'],
532
author = META_INFO['author'],
533
copyright = "(c) Canonical Ltd, 2005-2009",
534
company_name = "Canonical Ltd.",
535
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')]
538
packages = BZRLIB['packages']
539
packages.remove('bzrlib')
540
packages = [i for i in packages if not i.startswith('bzrlib.plugins')]
593
for i in glob.glob('breezy\\*.py'):
542
for i in glob.glob('bzrlib\\*.py'):
594
543
module = i[:-3].replace('\\', '.')
595
544
if module.endswith('__init__'):
596
545
module = module[:-len('__init__')]
597
546
includes.append(module)
599
548
additional_packages = set()
549
if sys.version.startswith('2.4'):
550
# adding elementtree package
551
additional_packages.add('elementtree')
552
elif sys.version.startswith('2.5'):
553
additional_packages.add('xml.etree')
556
warnings.warn('Unknown Python version.\n'
557
'Please check setup.py script for compatibility.')
601
559
# Although we currently can't enforce it, we consider it an error for
602
560
# py2exe to report any files are "missing". Such modules we know aren't
630
589
# which hard-codes the list of plugins, gets more upset if modules are
632
591
plugins = None # will be a set after plugin sniffing...
633
for root, dirs, files in os.walk('breezy/plugins'):
634
if root == 'breezy/plugins':
592
for root, dirs, files in os.walk('bzrlib/plugins'):
593
if root == 'bzrlib/plugins':
635
594
plugins = set(dirs)
636
595
# We ship plugins as normal files on the file-system - however,
637
596
# the build process can cause *some* of these plugin files to end
639
598
# library.zip, and then saw import errors related to that as the
640
599
# rest of the svn plugin wasn't. So we tell py2exe to leave the
641
600
# plugins out of the .zip file
642
excludes.extend(["breezy.plugins." + d for d in dirs])
601
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"]:
604
if os.path.splitext(i)[1] not in [".py", ".pyd", ".dll", ".mo"]:
651
if i == '__init__.py' and root == 'breezy/plugins':
606
if i == '__init__.py' and root == 'bzrlib/plugins':
653
608
x.append(os.path.join(root, i))
655
target_dir = root[len('breezy/'):] # install to 'plugins/...'
610
target_dir = root[len('bzrlib/'):] # install to 'plugins/...'
656
611
plugins_files.append((target_dir, x))
657
612
# find modules for built-in plugins
658
613
import tools.package_mf
659
614
mf = tools.package_mf.CustomModuleFinder()
660
mf.run_package('breezy/plugins')
615
mf.run_package('bzrlib/plugins')
661
616
packs, mods = mf.get_result()
662
617
additional_packages.update(packs)
663
618
includes.extend(mods)
704
653
# print this warning to stderr as output is redirected, so it is seen
705
654
# at build time. Also to stdout so it appears in the log
706
655
for f in (sys.stderr, sys.stdout):
707
f.write("Skipping TBZR binaries - "
708
"please set TBZR to a directory to enable\n")
657
"Skipping TBZR binaries - please set TBZR to a directory to enable"
710
659
# MSWSOCK.dll is a system-specific library, which py2exe accidentally pulls
712
dll_excludes.extend(["MSWSOCK.dll",
661
dll_excludes.extend(["MSWSOCK.dll", "MSVCP60.dll", "powrprof.dll"])
717
662
options_list = {"py2exe": {"packages": packages + list(additional_packages),
718
663
"includes": includes,
719
664
"excludes": excludes,
720
665
"dll_excludes": dll_excludes,
721
666
"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,
671
setup(options=options_list,
672
console=console_targets,
674
zipfile='lib/library.zip',
675
data_files=data_files,
676
cmdclass={'install_data': install_data_with_bytecompile},
749
680
# 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
682
if not 'bdist_egg' in sys.argv:
683
# generate and install bzr.1 only with plain install, not the
753
684
# easy_install one
754
DATA_FILES = [('man/man1', ['brz.1', 'breezy/git/git-remote-bzr.1'])]
685
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'],
688
ARGS = {'scripts': ['bzr'],
764
689
'data_files': DATA_FILES,
765
690
'cmdclass': command_classes,
766
691
'ext_modules': ext_modules,
769
694
ARGS.update(META_INFO)
771
696
ARGS.update(PKG_DATA)
773
if __name__ == '__main__':