setup.py
changeset 12661 10da5a1f25dd
parent 12649 6c0e1aee1b19
child 12676 ef500b2f100b
equal deleted inserted replaced
12660:6ed5ae6264c2 12661:10da5a1f25dd
    50 from distutils.core import setup, Extension
    50 from distutils.core import setup, Extension
    51 from distutils.dist import Distribution
    51 from distutils.dist import Distribution
    52 from distutils.command.build import build
    52 from distutils.command.build import build
    53 from distutils.command.build_ext import build_ext
    53 from distutils.command.build_ext import build_ext
    54 from distutils.command.build_py import build_py
    54 from distutils.command.build_py import build_py
       
    55 from distutils.command.install_scripts import install_scripts
    55 from distutils.spawn import spawn, find_executable
    56 from distutils.spawn import spawn, find_executable
    56 from distutils.ccompiler import new_compiler
    57 from distutils.ccompiler import new_compiler
    57 from distutils.errors import CCompilerError
    58 from distutils.errors import CCompilerError
    58 from distutils.sysconfig import get_python_inc
    59 from distutils.sysconfig import get_python_inc
    59 
    60 
   214                 # msgfmt on Solaris does not know about -c
   215                 # msgfmt on Solaris does not know about -c
   215                 cmd.append('-c')
   216                 cmd.append('-c')
   216             self.mkpath(join('mercurial', modir))
   217             self.mkpath(join('mercurial', modir))
   217             self.make_file([pofile], mobuildfile, spawn, (cmd,))
   218             self.make_file([pofile], mobuildfile, spawn, (cmd,))
   218 
   219 
       
   220 
   219 # Insert hgbuildmo first so that files in mercurial/locale/ are found
   221 # Insert hgbuildmo first so that files in mercurial/locale/ are found
   220 # when build_py is run next.
   222 # when build_py is run next.
   221 build.sub_commands.insert(0, ('build_mo', None))
   223 build.sub_commands.insert(0, ('build_mo', None))
   222 
   224 
   223 Distribution.pure = 0
   225 Distribution.pure = 0
   258                 if module[1] != "__init__":
   260                 if module[1] != "__init__":
   259                     yield ("mercurial", module[1], module[2])
   261                     yield ("mercurial", module[1], module[2])
   260             else:
   262             else:
   261                 yield module
   263                 yield module
   262 
   264 
       
   265 class hginstallscripts(install_scripts):
       
   266     '''
       
   267     This is a specialization of install_scripts that replaces the @LIBDIR@ with
       
   268     the configured directory for modules. If possible, the path is made relative
       
   269     to the directory for scripts.
       
   270     '''
       
   271 
       
   272     def initialize_options(self):
       
   273         install_scripts.initialize_options(self)
       
   274 
       
   275         self.install_lib = None
       
   276 
       
   277     def finalize_options(self):
       
   278         install_scripts.finalize_options(self)
       
   279         self.set_undefined_options('install',
       
   280                                    ('install_lib', 'install_lib'))
       
   281 
       
   282     def run(self):
       
   283         install_scripts.run(self)
       
   284 
       
   285         if (os.path.splitdrive(self.install_dir)[0] !=
       
   286             os.path.splitdrive(self.install_lib)[0]):
       
   287             # can't make relative paths from one drive to another, so use an
       
   288             # absolute path instead
       
   289             libdir = self.install_lib
       
   290         else:
       
   291             common = os.path.commonprefix((self.install_dir, self.install_lib))
       
   292             rest = self.install_dir[len(common):]
       
   293             uplevel = len([n for n in os.path.split(rest) if n])
       
   294 
       
   295             libdir =  uplevel * ('..' + os.sep) + self.install_lib[len(common):]
       
   296 
       
   297         for outfile in self.outfiles:
       
   298             data = open(outfile, 'rb').read()
       
   299 
       
   300             # skip binary files
       
   301             if '\0' in data:
       
   302                 continue
       
   303 
       
   304             data = data.replace('@LIBDIR@', libdir)
       
   305             open(outfile, 'wb').write(data)
       
   306 
   263 cmdclass = {'build_mo': hgbuildmo,
   307 cmdclass = {'build_mo': hgbuildmo,
   264             'build_ext': hgbuildext,
   308             'build_ext': hgbuildext,
   265             'build_py': hgbuildpy}
   309             'build_py': hgbuildpy,
       
   310             'install_scripts': hginstallscripts}
   266 
   311 
   267 packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert',
   312 packages = ['mercurial', 'mercurial.hgweb', 'hgext', 'hgext.convert',
   268             'hgext.highlight', 'hgext.zeroconf']
   313             'hgext.highlight', 'hgext.zeroconf']
   269 
   314 
   270 pymodules = []
   315 pymodules = []