def __init__(self, dependencies=None, debug=False, force=False):
     if dependencies is None:
         self.dependencies = []
     else:
         self.dependencies = dependencies
     self.debug = debug
     self.environment = read_cache()
     self.found = False
     self.force = force
 def get_prerequisites(self, argv):
     if 'windows' in platform.system().lower():
         environ = read_cache()
         if 'COMPILER' in environ:
             compiler = environ['COMPILER']
         else:
             compiler = 'msvc'  ## distutils default on Windows
         for a in range(len(argv)):
             if argv[a].startswith('--compiler='):
                 compiler = argv[a][11:]
             elif argv[a] == '-c':
                 compiler = argv[a+1]
         if compiler == 'mingw32':
             self.prerequisites = ['mingw'] + self.prerequisites
         elif compiler.startswith('msvc'):
             self.prerequisites = ['msvc'] + self.prerequisites
         else:
             raise Exception("Unknown compiler specified: " + compiler)
         self.environment['COMPILER'] = compiler
     if self.environment['COMPILER'] == 'gcc':
         self.prerequisites = ['gcc'] + self.prerequisites
     return self.prerequisites, argv
Beispiel #3
0
def configure_system(
    prerequisite_list,
    version,
    required_python_version="2.4",
    install=None,
    quiet=False,
    sublevel=None,
    out=sys.stdout,
    err=sys.stderr,
    locally=None,
    download=None,
    options=dict(),
):
    """
    Given a list of required software and optionally a Python version,
    verify that python is the proper version and that
    other required software is installed.
    Install missing prerequisites that have an installer defined.
    """
    if locally is None:  ## parameter value overrides
        if "locally" in options.keys():
            locally = options["locally"]
        else:
            locally = True  ## default value
    if install is None:  ## parameter value overrides
        if "install" in options.keys():
            install = options["install"]
        else:
            install = True  ## default value
    if download is None:  ## parameter value overrides
        if "download" in options.keys():
            download = options["download"]
        else:
            download = False  ## default value
    if sublevel is None:  ## parameter value overrides
        if "sublevel" in options.keys():
            opts.set_top_level(options["sublevel"])

    environment = dict()
    try:
        environment = read_cache()
        skip = False
        for arg in sys.argv:
            if arg.startswith("clean"):
                skip = True
                quiet = True

        pyver = simplify_version(platform.python_version())
        reqver = simplify_version(required_python_version)
        if pyver < reqver:
            raise FatalError("Python version >= " + reqver + " is required.  " + "You are running version " + pyver)

        if not quiet:
            out.write("CONFIGURE  ")
            if len(environment):
                out.write("(from cache)")
            out.write("\n")

        environment["PACKAGE_VERSION"] = version

        prerequisite_list.insert(0, "httpsproxy_urllib2")
        if (
            "windows" in platform.system().lower()
            and in_prerequisites("mingw", prerequisite_list)
            and in_prerequisites("boost", prerequisite_list)
            and not in_prerequisites("msvcrt", prerequisite_list)
        ):
            err.write("WARNING: if you're using the boost-python DLL, " + "also add 'msvcrt' as a prerequisite.\n")
        if (
            "darwin" in platform.system().lower()
            and not in_prerequisites("macports", prerequisite_list)
            and not in_prerequisites("homebrew", prerequisite_list)
        ):
            if system_uses_macports():
                prerequisite_list.insert(0, "macports")
            elif system_uses_homebrew():
                prerequisite_list.insert(0, "homebrew")
            else:
                err.write(
                    "WARNING: neither MacPorts nor Homebrew "
                    + "detected. All required libraries will be "
                    + "built locally.\n"
                )

        for help_name in prerequisite_list:
            if len(help_name) > 0:
                environment = find_package_config(
                    help_name, __run_helper__, environment, skip, install, quiet, out, err, locally, download
                )
        save_cache(environment)
    except Exception:  # pylint: disable=W0703
        logfile = os.path.join(opts.target_build_dir, "config.log")
        if not os.path.exists(opts.target_build_dir):
            mkdir(opts.target_build_dir)
        log = open(logfile, "a")
        log.write("** Configuration error. **\n" + traceback.format_exc())
        log.close()
        err.write(
            "Configuration error; see "
            + logfile
            + " for details.\n"
            + "If the build fails, run 'python setup.py dependencies "
            + "--show'\nand install the listed packages by hand.\n"
        )
        raise
    return environment
Beispiel #4
0
def __run_helper__(
    short_name,
    helper,
    version,
    strict,
    environment,
    skip,
    install,
    quiet,
    out=sys.stdout,
    err=sys.stderr,
    locally=True,
    download=False,
):
    configured.append(short_name)
    try:
        cfg = helper.configuration()
    except Exception:
        ver_info = ""
        if version:
            ver_info = " v." + str(version)
        err.write("Error loading " + short_name + ver_info + " configuration.\n")
        raise
    for dep in cfg.dependencies:
        dep_name = dep
        if not is_string(dep):
            dep_name = dep[0]
        if dep_name in configured:
            continue
        environment = find_package_config(
            dep, __run_helper__, environment, skip, install, quiet, out, err, locally, download
        )
        if not environment is None:
            save_cache(environment)
    environment = read_cache()
    if not quiet:
        msg = "Checking for " + short_name
        if version:
            msg += " v." + version
        if strict:
            msg += " (strict)"
        msg += " " * (40 - len(msg))
        out.write(msg)
        out.flush()
    if download:
        cfg.download(environment, version, strict)

    if skip:
        cfg.null()
    elif not cfg.is_installed(environment, version, strict):
        if install:
            if not quiet:
                out.write("Installing...\n")
            cfg.install(environment, version, strict, locally)
        elif not quiet:
            out.write("not found.\n")
    elif cfg.force:
        if install:
            if not quiet:
                out.write("Forcing install...\n")
            cfg.install(environment, version, strict, locally)
        elif not quiet:
            out.write("found.\n")
    elif not quiet:
        out.write("found.\n")
    env = dict(list(cfg.environment.items()) + list(environment.items()))
    if not "PREREQUISITES" in env:
        env["PREREQUISITES"] = [short_name]
    else:
        tmp_env = env["PREREQUISITES"] + [short_name]
        env["PREREQUISITES"] = list(set(tmp_env))
    save_cache(env)  ## intermediate cache
    return env
Beispiel #5
0
    def __init__(self, attrs=None):
        old_attrs = attrs
        ## setup the environment for custom commands
        given_environ = attrs.get('environment')
        if given_environ != None:
            self.environment = dict(list(given_environ.items()) +
                                    list(read_cache().items()))
            del old_attrs['environment']
        else:
            self.environment = read_cache()
        ## non-python required libraries and executables
        self.extern_requires = attrs.get('extern_requires')
        if self.extern_requires != None:
            del old_attrs['extern_requires']
        else:
            self.extern_requires = list()
        ## non-python required build tools
        self.build_requires = attrs.get('build_requires')
        if self.build_requires != None:
            del old_attrs['build_requires']
        else:
            self.build_requires = list()
        ## PYJS web extensions
        self.web_ext_modules = attrs.get('web_ext_modules')
        if self.web_ext_modules != None:
            del old_attrs['web_ext_modules']
        ## Sphinx documentation
        self.doc_modules = attrs.get('doc_modules')
        if self.doc_modules != None:
            del old_attrs['doc_modules']
        ## Other documentation
        self.doc_dir = attrs.get('doc_dir')
        if self.doc_dir != None:
            del old_attrs['doc_dir']
        ## Py++ extensions
        self.pypp_ext_modules = attrs.get('pypp_ext_modules')
        if self.pypp_ext_modules != None:
            del old_attrs['pypp_ext_modules']
        ## Shared libraries
        self.sh_libraries = attrs.get('sh_libraries')
        if self.sh_libraries != None:
            del old_attrs['sh_libraries']
        ## ANTLR parser/lexers
        self.antlr_modules = attrs.get('antlr_modules')
        if self.antlr_modules != None:
            del old_attrs['antlr_modules']
        ## Native executables
        self.native_executables = attrs.get('native_executables')
        if self.native_executables != None:
            del old_attrs['native_executables']
        ## Data to install to 'share'
        self.data_dirs = attrs.get('data_dirs')
        if self.data_dirs != None:
            del old_attrs['data_dirs']
        ## Non-stock libraries to install to 'lib' or 'lib64'
        self.extra_install_libraries = attrs.get('extra_install_libraries')
        if self.extra_install_libraries != None:
            del old_attrs['extra_install_libraries']
        ## Non-stock python packages to co-install
        self.extra_install_modules = attrs.get('extra_install_modules')
        if self.extra_install_modules != None:
            del old_attrs['extra_install_modules']
        ## Boilerplate scripts to create
        self.create_scripts = attrs.get('create_scripts')
        if self.create_scripts != None:
            del old_attrs['create_scripts']
        ## SysDevel support modules
        self.sysdevel_server = attrs.get('sysdevel_server')
        if self.sysdevel_server != None:
            del old_attrs['sysdevel_server']
        ## Files to delete upon 'clean'
        self.generated_files = attrs.get('generated_files')
        if self.generated_files != None:
            del old_attrs['generated_files']
        ## Separate packages with their own setup.py
        self.subpackages = attrs.get('subpackages')
        if self.subpackages != None:
            del old_attrs['subpackages']
        ## Whether to quit if a subpackage build fails
        self.quit_on_error = attrs.get('quit_on_error')
        if self.quit_on_error != None:
            del old_attrs['quit_on_error']
        else:
            self.quit_on_error = True
        ## Enable parallel building
        self.parallel_build = attrs.get('parallel_build')
        if self.parallel_build != None:
            del old_attrs['parallel_build']
        ## Unit testing
        self.tests = attrs.get('tests')
        if self.tests != None:
            del old_attrs['tests']


        ## py2exe options
        self.ctypes_com_server = attrs.pop("ctypes_com_server", [])
        self.com_server = attrs.pop("com_server", [])
        self.service = attrs.pop("service", [])
        self.windows = attrs.pop("windows", [])
        self.console = attrs.pop("console", [])
        self.isapi = attrs.pop("isapi", [])
        self.zipfile = attrs.pop("zipfile", options.default_py2exe_library)

        oldDistribution.__init__(self, old_attrs)