Show More
@@ -63,7 +63,7 b' else:' | |||||
63 | raise SystemExit( |
|
63 | raise SystemExit( | |
64 | "Couldn't import standard bz2 (incomplete Python install).") |
|
64 | "Couldn't import standard bz2 (incomplete Python install).") | |
65 |
|
65 | |||
66 | import os, subprocess, time |
|
66 | import os, stat, subprocess, time | |
67 | import re |
|
67 | import re | |
68 | import shutil |
|
68 | import shutil | |
69 | import tempfile |
|
69 | import tempfile | |
@@ -73,9 +73,10 b' from distutils.dist import Distribution' | |||||
73 | from distutils.command.build import build |
|
73 | from distutils.command.build import build | |
74 | from distutils.command.build_ext import build_ext |
|
74 | from distutils.command.build_ext import build_ext | |
75 | from distutils.command.build_py import build_py |
|
75 | from distutils.command.build_py import build_py | |
|
76 | from distutils.command.install_lib import install_lib | |||
76 | from distutils.command.install_scripts import install_scripts |
|
77 | from distutils.command.install_scripts import install_scripts | |
77 | from distutils.spawn import spawn, find_executable |
|
78 | from distutils.spawn import spawn, find_executable | |
78 | from distutils import cygwinccompiler |
|
79 | from distutils import cygwinccompiler, file_util | |
79 | from distutils.errors import CCompilerError, DistutilsExecError |
|
80 | from distutils.errors import CCompilerError, DistutilsExecError | |
80 | from distutils.sysconfig import get_python_inc, get_config_var |
|
81 | from distutils.sysconfig import get_python_inc, get_config_var | |
81 | from distutils.version import StrictVersion |
|
82 | from distutils.version import StrictVersion | |
@@ -375,6 +376,39 b' class buildhgexe(build_ext):' | |||||
375 | libraries=[], |
|
376 | libraries=[], | |
376 | output_dir=self.build_temp) |
|
377 | output_dir=self.build_temp) | |
377 |
|
378 | |||
|
379 | class hginstalllib(install_lib): | |||
|
380 | ''' | |||
|
381 | This is a specialization of install_lib that replaces the copy_file used | |||
|
382 | there so that it supports setting the mode of files after copying them, | |||
|
383 | instead of just preserving the mode that the files originally had. If your | |||
|
384 | system has a umask of something like 027, preserving the permissions when | |||
|
385 | copying will lead to a broken install. | |||
|
386 | ||||
|
387 | Note that just passing keep_permissions=False to copy_file would be | |||
|
388 | insufficient, as it might still be applying a umask. | |||
|
389 | ''' | |||
|
390 | ||||
|
391 | def run(self): | |||
|
392 | realcopyfile = file_util.copy_file | |||
|
393 | def copyfileandsetmode(*args, **kwargs): | |||
|
394 | src, dst = args[0], args[1] | |||
|
395 | dst, copied = realcopyfile(*args, **kwargs) | |||
|
396 | if copied: | |||
|
397 | st = os.stat(src) | |||
|
398 | # Persist executable bit (apply it to group and other if user | |||
|
399 | # has it) | |||
|
400 | if st[stat.ST_MODE] & stat.S_IXUSR: | |||
|
401 | setmode = 0755 | |||
|
402 | else: | |||
|
403 | setmode = 0644 | |||
|
404 | os.chmod(dst, (stat.S_IMODE(st[stat.ST_MODE]) & ~0777) | | |||
|
405 | setmode) | |||
|
406 | file_util.copy_file = copyfileandsetmode | |||
|
407 | try: | |||
|
408 | install_lib.run(self) | |||
|
409 | finally: | |||
|
410 | file_util.copy_file = realcopyfile | |||
|
411 | ||||
378 | class hginstallscripts(install_scripts): |
|
412 | class hginstallscripts(install_scripts): | |
379 | ''' |
|
413 | ''' | |
380 | This is a specialization of install_scripts that replaces the @LIBDIR@ with |
|
414 | This is a specialization of install_scripts that replaces the @LIBDIR@ with | |
@@ -426,6 +460,7 b" cmdclass = {'build': hgbuild," | |||||
426 | 'build_ext': hgbuildext, |
|
460 | 'build_ext': hgbuildext, | |
427 | 'build_py': hgbuildpy, |
|
461 | 'build_py': hgbuildpy, | |
428 | 'build_hgextindex': buildhgextindex, |
|
462 | 'build_hgextindex': buildhgextindex, | |
|
463 | 'install_lib': hginstalllib, | |||
429 | 'install_scripts': hginstallscripts, |
|
464 | 'install_scripts': hginstallscripts, | |
430 | 'build_hgexe': buildhgexe, |
|
465 | 'build_hgexe': buildhgexe, | |
431 | } |
|
466 | } |
General Comments 0
You need to be logged in to leave comments.
Login now