Show More
@@ -79,11 +79,16 b' from distutils.dist import Distribution' | |||
|
79 | 79 | from distutils.command.build import build |
|
80 | 80 | from distutils.command.build_ext import build_ext |
|
81 | 81 | from distutils.command.build_py import build_py |
|
82 | from distutils.command.build_scripts import build_scripts | |
|
82 | 83 | from distutils.command.install_lib import install_lib |
|
83 | 84 | from distutils.command.install_scripts import install_scripts |
|
84 | 85 | from distutils.spawn import spawn, find_executable |
|
85 | 86 | from distutils import file_util |
|
86 |
from distutils.errors import |
|
|
87 | from distutils.errors import ( | |
|
88 | CCompilerError, | |
|
89 | DistutilsError, | |
|
90 | DistutilsExecError, | |
|
91 | ) | |
|
87 | 92 | from distutils.sysconfig import get_python_inc, get_config_var |
|
88 | 93 | from distutils.version import StrictVersion |
|
89 | 94 | |
@@ -102,6 +107,7 b' elif sys.version_info[0] >= 3:' | |||
|
102 | 107 | |
|
103 | 108 | scripts = ['hg'] |
|
104 | 109 | if os.name == 'nt': |
|
110 | # We remove hg.bat if we are able to build hg.exe. | |
|
105 | 111 | scripts.append('contrib/win32/hg.bat') |
|
106 | 112 | |
|
107 | 113 | # simplified version of distutils.ccompiler.CCompiler.has_function |
@@ -304,6 +310,31 b' class hgbuildext(build_ext):' | |||
|
304 | 310 | log.warn("Failed to build optional extension '%s' (skipping)", |
|
305 | 311 | ext.name) |
|
306 | 312 | |
|
313 | class hgbuildscripts(build_scripts): | |
|
314 | def run(self): | |
|
315 | if os.name != 'nt': | |
|
316 | return build_scripts.run(self) | |
|
317 | ||
|
318 | exebuilt = False | |
|
319 | try: | |
|
320 | self.run_command('build_hgexe') | |
|
321 | exebuilt = True | |
|
322 | except (DistutilsError, CCompilerError): | |
|
323 | log.warn('failed to build optional hg.exe') | |
|
324 | ||
|
325 | if exebuilt: | |
|
326 | # Copying hg.exe to the scripts build directory ensures it is | |
|
327 | # installed by the install_scripts command. | |
|
328 | hgexecommand = self.get_finalized_command('build_hgexe') | |
|
329 | dest = os.path.join(self.build_dir, 'hg.exe') | |
|
330 | self.mkpath(self.build_dir) | |
|
331 | self.copy_file(hgexecommand.hgexepath, dest) | |
|
332 | ||
|
333 | # Remove hg.bat because it is redundant with hg.exe. | |
|
334 | self.scripts.remove('contrib/win32/hg.bat') | |
|
335 | ||
|
336 | return build_scripts.run(self) | |
|
337 | ||
|
307 | 338 | class hgbuildpy(build_py): |
|
308 | 339 | if convert2to3: |
|
309 | 340 | fixer_names = sorted(set(getfixers("lib2to3.fixes") + |
@@ -389,6 +420,11 b' class buildhgexe(build_ext):' | |||
|
389 | 420 | libraries=[], |
|
390 | 421 | output_dir=self.build_temp) |
|
391 | 422 | |
|
423 | @property | |
|
424 | def hgexepath(self): | |
|
425 | dir = os.path.dirname(self.get_ext_fullpath('dummy')) | |
|
426 | return os.path.join(self.build_temp, dir, 'hg.exe') | |
|
427 | ||
|
392 | 428 | class hginstalllib(install_lib): |
|
393 | 429 | ''' |
|
394 | 430 | This is a specialization of install_lib that replaces the copy_file used |
@@ -473,6 +509,7 b" cmdclass = {'build': hgbuild," | |||
|
473 | 509 | 'build_mo': hgbuildmo, |
|
474 | 510 | 'build_ext': hgbuildext, |
|
475 | 511 | 'build_py': hgbuildpy, |
|
512 | 'build_scripts': hgbuildscripts, | |
|
476 | 513 | 'build_hgextindex': buildhgextindex, |
|
477 | 514 | 'install_lib': hginstalllib, |
|
478 | 515 | 'install_scripts': hginstallscripts, |
General Comments 0
You need to be logged in to leave comments.
Login now