mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-04 03:27:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			198 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
"""
 | 
						|
Distutils script for cx_Freeze.
 | 
						|
"""
 | 
						|
 | 
						|
import distutils.command.bdist_rpm
 | 
						|
import distutils.command.build_ext
 | 
						|
import distutils.command.build_scripts
 | 
						|
import distutils.command.install
 | 
						|
import distutils.command.install_data
 | 
						|
import distutils.sysconfig
 | 
						|
import os
 | 
						|
import sys
 | 
						|
 | 
						|
from distutils.core import setup
 | 
						|
from distutils.extension import Extension
 | 
						|
 | 
						|
class bdist_rpm(distutils.command.bdist_rpm.bdist_rpm):
 | 
						|
 | 
						|
    # rpm automatically byte compiles all Python files in a package but we
 | 
						|
    # don't want that to happen for initscripts and samples so we tell it to
 | 
						|
    # ignore those files
 | 
						|
    def _make_spec_file(self):
 | 
						|
        specFile = distutils.command.bdist_rpm.bdist_rpm._make_spec_file(self)
 | 
						|
        specFile.insert(0, "%define _unpackaged_files_terminate_build 0%{nil}")
 | 
						|
        return specFile
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        distutils.command.bdist_rpm.bdist_rpm.run(self)
 | 
						|
        specFile = os.path.join(self.rpm_base, "SPECS",
 | 
						|
                "%s.spec" % self.distribution.get_name())
 | 
						|
        queryFormat = "%{name}-%{version}-%{release}.%{arch}.rpm"
 | 
						|
        command = "rpm -q --qf '%s' --specfile %s" % (queryFormat, specFile)
 | 
						|
        origFileName = os.popen(command).read()
 | 
						|
        parts = origFileName.split("-")
 | 
						|
        parts.insert(2, "py%s%s" % sys.version_info[:2])
 | 
						|
        newFileName = "-".join(parts)
 | 
						|
        self.move_file(os.path.join("dist", origFileName),
 | 
						|
                os.path.join("dist", newFileName))
 | 
						|
 | 
						|
 | 
						|
class build_ext(distutils.command.build_ext.build_ext):
 | 
						|
 | 
						|
    def build_extension(self, ext):
 | 
						|
        if ext.name.find("bases") < 0:
 | 
						|
            distutils.command.build_ext.build_ext.build_extension(self, ext)
 | 
						|
            return
 | 
						|
        os.environ["LD_RUN_PATH"] = "${ORIGIN}:${ORIGIN}/../lib"
 | 
						|
        objects = self.compiler.compile(ext.sources,
 | 
						|
                output_dir = self.build_temp,
 | 
						|
                include_dirs = ext.include_dirs,
 | 
						|
                debug = self.debug,
 | 
						|
                depends = ext.depends)
 | 
						|
        fileName = os.path.splitext(self.get_ext_filename(ext.name))[0]
 | 
						|
        fullName = os.path.join(self.build_lib, fileName)
 | 
						|
        libraryDirs = ext.library_dirs or []
 | 
						|
        libraries = self.get_libraries(ext)
 | 
						|
        extraArgs = ext.extra_link_args or []
 | 
						|
        if sys.platform != "win32":
 | 
						|
            vars = distutils.sysconfig.get_config_vars()
 | 
						|
            libraryDirs.append(vars["LIBPL"])
 | 
						|
            libraries.append("python%s.%s" % sys.version_info[:2])
 | 
						|
            if vars["LINKFORSHARED"]:
 | 
						|
                extraArgs.extend(vars["LINKFORSHARED"].split())
 | 
						|
            if vars["LIBS"]:
 | 
						|
                extraArgs.extend(vars["LIBS"].split())
 | 
						|
            if vars["LIBM"]:
 | 
						|
                extraArgs.append(vars["LIBM"])
 | 
						|
            if vars["BASEMODLIBS"]:
 | 
						|
                extraArgs.extend(vars["BASEMODLIBS"].split())
 | 
						|
            if vars["LOCALMODLIBS"]:
 | 
						|
                extraArgs.extend(vars["LOCALMODLIBS"].split())
 | 
						|
            extraArgs.append("-s")
 | 
						|
        self.compiler.link_executable(objects, fullName,
 | 
						|
                libraries = libraries,
 | 
						|
                library_dirs = libraryDirs,
 | 
						|
                runtime_library_dirs = ext.runtime_library_dirs,
 | 
						|
                extra_postargs = extraArgs,
 | 
						|
                debug = self.debug)
 | 
						|
 | 
						|
    def get_ext_filename(self, name):
 | 
						|
        fileName = distutils.command.build_ext.build_ext.get_ext_filename(self,
 | 
						|
                name)
 | 
						|
        if name.find("bases") < 0:
 | 
						|
            return fileName
 | 
						|
        ext = self.compiler.exe_extension or ""
 | 
						|
        return os.path.splitext(fileName)[0] + ext
 | 
						|
 | 
						|
 | 
						|
class build_scripts(distutils.command.build_scripts.build_scripts):
 | 
						|
 | 
						|
    def copy_scripts(self):
 | 
						|
        distutils.command.build_scripts.build_scripts.copy_scripts(self)
 | 
						|
        if sys.platform == "win32":
 | 
						|
            for script in self.scripts:
 | 
						|
                batFileName = os.path.join(self.build_dir, script + ".bat")
 | 
						|
                fullScriptName = r"%s\Scripts\%s" % \
 | 
						|
                        (os.path.dirname(sys.executable), script)
 | 
						|
                command = "%s %s %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9" % \
 | 
						|
                        (sys.executable, fullScriptName)
 | 
						|
                file(batFileName, "w").write("@echo off\n\n%s" % command)
 | 
						|
 | 
						|
 | 
						|
class install(distutils.command.install.install):
 | 
						|
 | 
						|
    def get_sub_commands(self):
 | 
						|
        subCommands = distutils.command.install.install.get_sub_commands(self)
 | 
						|
        subCommands.append("install_packagedata")
 | 
						|
        return subCommands
 | 
						|
 | 
						|
 | 
						|
class install_packagedata(distutils.command.install_data.install_data):
 | 
						|
 | 
						|
    def run(self):
 | 
						|
        installCommand = self.get_finalized_command("install")
 | 
						|
        installDir = getattr(installCommand, "install_lib")
 | 
						|
        sourceDirs = ["samples", "initscripts"]
 | 
						|
        while sourceDirs:
 | 
						|
            sourceDir = sourceDirs.pop(0)
 | 
						|
            targetDir = os.path.join(installDir, "cx_Freeze", sourceDir)
 | 
						|
            self.mkpath(targetDir)
 | 
						|
            for name in os.listdir(sourceDir):
 | 
						|
                if name == "build" or name.startswith("."):
 | 
						|
                    continue
 | 
						|
                fullSourceName = os.path.join(sourceDir, name)
 | 
						|
                if os.path.isdir(fullSourceName):
 | 
						|
                    sourceDirs.append(fullSourceName)
 | 
						|
                else:
 | 
						|
                    fullTargetName = os.path.join(targetDir, name)
 | 
						|
                    self.copy_file(fullSourceName, fullTargetName)
 | 
						|
                    self.outfiles.append(fullTargetName)
 | 
						|
 | 
						|
 | 
						|
commandClasses = dict(
 | 
						|
        build_ext = build_ext,
 | 
						|
        build_scripts = build_scripts,
 | 
						|
        bdist_rpm = bdist_rpm,
 | 
						|
        install = install,
 | 
						|
        install_packagedata = install_packagedata)
 | 
						|
 | 
						|
if sys.platform == "win32":
 | 
						|
    libraries = ["imagehlp"]
 | 
						|
else:
 | 
						|
    libraries = []
 | 
						|
utilModule = Extension("cx_Freeze.util", ["source/util.c"],
 | 
						|
        libraries = libraries)
 | 
						|
depends = ["source/bases/Common.c"]
 | 
						|
if sys.platform == "win32":
 | 
						|
    if sys.version_info[:2] >= (2, 6):
 | 
						|
        extraSources = ["source/bases/manifest.rc"]
 | 
						|
    else:
 | 
						|
        extraSources = ["source/bases/dummy.rc"]
 | 
						|
else:
 | 
						|
    extraSources = []
 | 
						|
console = Extension("cx_Freeze.bases.Console",
 | 
						|
        ["source/bases/Console.c"] + extraSources, depends = depends)
 | 
						|
consoleKeepPath = Extension("cx_Freeze.bases.ConsoleKeepPath",
 | 
						|
        ["source/bases/ConsoleKeepPath.c"] + extraSources, depends = depends)
 | 
						|
extensions = [utilModule, console, consoleKeepPath]
 | 
						|
if sys.platform == "win32":
 | 
						|
    gui = Extension("cx_Freeze.bases.Win32GUI",
 | 
						|
            ["source/bases/Win32GUI.c"] + extraSources,
 | 
						|
            depends = depends, extra_link_args = ["-mwindows"])
 | 
						|
    extensions.append(gui)
 | 
						|
 | 
						|
docFiles = "LICENSE.txt README.txt HISTORY.txt doc/cx_Freeze.html"
 | 
						|
 | 
						|
classifiers = [
 | 
						|
        "Development Status :: 5 - Production/Stable",
 | 
						|
        "Intended Audience :: Developers",
 | 
						|
        "License :: OSI Approved :: Python Software Foundation License",
 | 
						|
        "Natural Language :: English",
 | 
						|
        "Operating System :: OS Independent",
 | 
						|
        "Programming Language :: C",
 | 
						|
        "Programming Language :: Python",
 | 
						|
        "Topic :: Software Development :: Build Tools",
 | 
						|
        "Topic :: Software Development :: Libraries :: Python Modules",
 | 
						|
        "Topic :: System :: Software Distribution",
 | 
						|
        "Topic :: Utilities"
 | 
						|
]
 | 
						|
 | 
						|
setup(name = "cx_Freeze",
 | 
						|
        description = "create standalone executables from Python scripts",
 | 
						|
        long_description = "create standalone executables from Python scripts",
 | 
						|
        version = "4.0.1",
 | 
						|
        cmdclass = commandClasses,
 | 
						|
        options = dict(bdist_rpm = dict(doc_files = docFiles),
 | 
						|
                install = dict(optimize = 1)),
 | 
						|
        ext_modules = extensions,
 | 
						|
        packages = ['cx_Freeze'],
 | 
						|
        maintainer="Anthony Tuininga",
 | 
						|
        maintainer_email="anthony.tuininga@gmail.com",
 | 
						|
        url = "http://cx-freeze.sourceforge.net",
 | 
						|
        scripts = ["cxfreeze"],
 | 
						|
        classifiers = classifiers,
 | 
						|
        keywords = "freeze",
 | 
						|
        license = "Python Software Foundation License")
 | 
						|
 |