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
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
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
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)