99
100
Create bzr.bat for win32.
105
103
install_scripts.run(self) # standard action
107
105
if sys.platform == "win32":
109
scripts_dir = self.install_dir
107
scripts_dir = os.path.join(sys.prefix, 'Scripts')
110
108
script_path = self._quoted_path(os.path.join(scripts_dir,
112
110
python_exe = self._quoted_path(sys.executable)
113
111
args = self._win_batch_args()
114
112
batch_str = "@%s %s %s" % (python_exe, script_path, args)
115
batch_path = script_path + ".bat"
113
batch_path = os.path.join(self.install_dir, "bzr.bat")
116
114
f = file(batch_path, "w")
117
115
f.write(batch_str)
150
149
########################
151
command_classes = {'install_scripts': my_install_scripts,
153
from distutils import log
154
from distutils.errors import CCompilerError, DistutilsPlatformError
155
from distutils.extension import Extension
158
from Pyrex.Distutils import build_ext
161
# try to build the extension from the prior generated source.
163
print ("The python package 'Pyrex' is not available."
164
" If the .c files are available,")
165
print ("they will be built,"
166
" but modifying the .pyx files will not rebuild them.")
168
from distutils.command.build_ext import build_ext
173
class build_ext_if_possible(build_ext):
178
except DistutilsPlatformError, e:
180
log.warn('Extensions cannot be built, '
181
'will use the Python versions instead')
183
def build_extension(self, ext):
185
build_ext.build_extension(self, ext)
186
except CCompilerError:
187
log.warn('Building of "%s" extension failed, '
188
'will use the Python version instead' % (ext.name,))
191
# Override the build_ext if we have Pyrex available
192
command_classes['build_ext'] = build_ext_if_possible
193
unavailable_files = []
196
def add_pyrex_extension(module_name, **kwargs):
197
"""Add a pyrex module to build.
199
This will use Pyrex to auto-generate the .c file if it is available.
200
Otherwise it will fall back on the .c file. If the .c file is not
201
available, it will warn, and not add anything.
203
You can pass any extra options to Extension through kwargs. One example is
206
:param module_name: The python path to the module. This will be used to
207
determine the .pyx and .c files to use.
209
path = module_name.replace('.', '/')
210
pyrex_name = path + '.pyx'
213
ext_modules.append(Extension(module_name, [pyrex_name]))
215
if not os.path.isfile(c_name):
216
unavailable_files.append(c_name)
218
ext_modules.append(Extension(module_name, [c_name]))
221
add_pyrex_extension('bzrlib._dirstate_helpers_c')
222
add_pyrex_extension('bzrlib._knit_load_data_c')
223
ext_modules.append(Extension('bzrlib._patiencediff_c', ['bzrlib/_patiencediff_c.c']))
226
if unavailable_files:
227
print 'C extension(s) not found:'
228
print ' %s' % ('\n '.join(unavailable_files),)
229
print 'The python versions will be used instead.'
152
233
if 'bdist_wininst' in sys.argv:
155
docs = glob.glob('doc/*.htm') + ['doc/default.css']
236
for root, dirs, files in os.walk('doc'):
239
if os.path.splitext(f)[1] in ('.html', '.css'):
240
r.append(os.path.join(root, f))
244
target = os.path.join('Doc\\Bazaar', relative)
246
target = 'Doc\\Bazaar'
247
docs.append((target, r))
156
250
# python's distutils-based win32 installer
157
251
ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
252
'ext_modules': ext_modules,
159
'data_files': [('Doc/Bazaar', docs)],
254
'data_files': find_docs(),
255
# for building pyrex extensions
256
'cmdclass': {'build_ext': build_ext_if_possible},
162
259
ARGS.update(META_INFO)
188
285
version = version_str,
189
286
description = META_INFO['description'],
190
287
author = META_INFO['author'],
191
copyright = "(c) Canonical Ltd, 2005-2006",
288
copyright = "(c) Canonical Ltd, 2005-2007",
192
289
company_name = "Canonical Ltd.",
193
290
comments = META_INFO['description'],
293
additional_packages = []
294
if sys.version.startswith('2.4'):
295
# adding elementtree package
296
additional_packages.append('elementtree')
297
elif sys.version.startswith('2.5'):
298
additional_packages.append('xml.etree')
301
warnings.warn('Unknown Python version.\n'
302
'Please check setup.py script for compatibility.')
303
# email package from std python library use lazy import,
304
# so we need to explicitly add all package
305
additional_packages.append('email')
195
307
options_list = {"py2exe": {"packages": BZRLIB['packages'] +
197
"excludes": ["Tkinter", "medusa"],
309
"excludes": ["Tkinter", "medusa", "tools"],
198
310
"dist_dir": "win32_bzr.exe",
205
317
zipfile='lib/library.zip')
320
# ad-hoc for easy_install
322
if not 'bdist_egg' in sys.argv:
323
# generate and install bzr.1 only with plain install, not easy_install one
324
DATA_FILES = [('man/man1', ['bzr.1'])]
209
327
ARGS = {'scripts': ['bzr'],
210
'data_files': [('man/man1', ['bzr.1'])],
211
'cmdclass': {'build': bzr_build,
212
'install_scripts': my_install_scripts,
328
'data_files': DATA_FILES,
329
'cmdclass': command_classes,
330
'ext_modules': ext_modules,
216
333
ARGS.update(META_INFO)
217
334
ARGS.update(BZRLIB)
218
335
ARGS.update(PKG_DATA)