def configure_low(log, script_path, working_dir, opts, args, env, run_script_not_bash, relative_call, script_name): ret = 0 if relative_call: script_path = wayround_i2p.utils.path.relpath(script_path, working_dir) cmd = [] if not run_script_not_bash: cmd = (['bash'] + [script_path + os.path.sep + script_name] + opts + args) else: cmd = [script_path + os.path.sep + script_name] + opts + args log.info("directory: {}".format(working_dir)) log.info("command:") for i in cmd: log.info(" {}".format(i)) #log.info("command(joined): {}".format(' '.join(cmd))) p = None try: p = subprocess.Popen( cmd, env=env, stdout=log.stdout, stderr=log.stderr, # stdin=subprocess.DEVNULL, cwd=working_dir) except: log.error( "exception while starting configuration script\n" " command line was:\n" " " + repr(cmd) + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: try: p.wait() except KeyboardInterrupt: raise except: log.error( "Exception occurred while waiting for configure\n" + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: tmp_s = "configure return code was: {}".format(p.returncode) if p.returncode == 0: log.info(tmp_s) else: log.error(tmp_s) ret = p.returncode return ret
def make_low(log, opts, args, env, working_dir, make_filename=None): ret = 0 mfn = [] if make_filename is not None: mfn = ['-f', make_filename] cmd = ['make'] + list(mfn) + list(opts) + list(args) log.info("directory: {}".format(working_dir)) log.info("command:") for i in cmd: log.info(" {}".format(i)) # log.info("debug: mfn: {}, opts: {}, args: {}".format(mfn, opts, args)) p = None try: p = subprocess.Popen(cmd, env=env, stdout=log.stdout, stderr=log.stderr, cwd=working_dir) except: log.error( "exception while starting make script\n" + " command line was:\n" + " " + repr(cmd) + "\n" + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: try: p.wait() except KeyboardInterrupt: raise except: log.error( "exception occurred while waiting for builder\n" + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: tmp_s = "make return code was: {}".format(p.returncode) if p.returncode == 0: log.info(tmp_s) else: log.error(tmp_s) ret = p.returncode return ret
def cmake_low( log, build_dir, src_dir, working_dir, opts, args, env ): ret = 0 cmd = ['cmake'] + opts + ['--build=' + build_dir] + args + [src_dir] log.info("directory: {}".format(working_dir)) log.info("src: {}".format(src_dir)) log.info("build dir: {}".format(build_dir)) log.info("command:") for i in cmd: log.info(" {}".format(i)) #log.info("command(joined): {}".format(' '.join(cmd))) p = None try: p = subprocess.Popen( cmd, env=env, stdout=log.stdout, stderr=log.stderr, cwd=working_dir ) except: log.error( "exception while starting cmake\n" " command line was:\n" " " + repr(cmd) + wayround_i2p.utils.error.return_exception_info( sys.exc_info() ) ) ret = 100 else: try: p.wait() except KeyboardInterrupt: raise except: log.error( "Exception occurred while waiting for cmake\n{}".format( wayround_i2p.utils.error.return_exception_info( sys.exc_info() ) ) ) ret = 100 else: tmp_s = "cmake return code was: {}".format(p.returncode) if p.returncode == 0: log.info(tmp_s) else: log.error(tmp_s) ret = p.returncode return ret
def waf(cwd, options, arguments, environment, environment_mode, log): ret = 0 cwd = wayround_i2p.utils.path.abspath(cwd) env = wayround_i2p.utils.osutils.env_vars_edit(environment, environment_mode) if len(environment) > 0: log.info("Environment modifications: {}".format(repr(environment))) if 'PYTHON' in environment: python = environment['PYTHON'] else: if 'PATH' in environment: PATH = environment['PATH'] else: PATH = os.environ['PATH'] PATH = PATH.split(':') python = wayround_i2p.utils.file.which('python2', PATH) del PATH cmd = [python, wayround_i2p.utils.path.join(cwd, 'waf') ] + options + arguments log.info("directory: {}".format(cwd)) log.info("command: {}".format(cmd)) log.info("command(joined): {}".format(' '.join(cmd))) p = None try: p = subprocess.Popen(args=cmd, cwd=cwd, stdout=log.stdout, stderr=log.stderr, env=env) except: log.error( "exception while starting waf script\n" " command line was:\n" " " + repr(cmd) + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: try: p.wait() except: log.error( "Exception occurred while waiting for configure\n" + wayround_i2p.utils.error.return_exception_info(sys.exc_info())) ret = 100 else: tmp_s = "configure return code was: {}".format(p.returncode) if p.returncode == 0: log.info(tmp_s) else: log.error(tmp_s) ret = p.returncode return ret
def extract_high(building_site, tarball_basename, unwrap_dir, rename_dir, more_when_one_extracted_ok=False, log=None, cleanup_output_dir=True): building_site = wayround_i2p.utils.path.abspath(building_site) own_log = False if log is None: own_log = True log = wayround_i2p.utils.log.Log( wayround_i2p.aipsetup.build.getDIR_BUILD_LOGS(building_site), 'extract') ret = 0 tarball_dir = wayround_i2p.aipsetup.build.getDIR_TARBALL(building_site) source_dir = wayround_i2p.aipsetup.build.getDIR_SOURCE(building_site) tarball_dir_files = os.listdir(tarball_dir) tarball_dir_files_len = len(tarball_dir_files) tmpdir = wayround_i2p.aipsetup.build.getDIR_TEMP(building_site) if not os.path.isdir(tmpdir): os.makedirs(tmpdir, exist_ok=True) tmpdir = tempfile.mkdtemp(dir=tmpdir) if tarball_dir_files_len == 0: log.error("No Source Tarball Supplied") ret = 1 else: tarball = None for i in tarball_dir_files: parsed = wayround_i2p.utils.tarball.parse_tarball_name(i, mute=True) if isinstance(parsed, dict): ''' print("parsed['groups']['name'] == tarball_basename") print( " {} == {} == {}".format( parsed['groups']['name'], tarball_basename, parsed['groups']['name'] == tarball_basename ) ) ''' if parsed['groups']['name'] == tarball_basename: tarball = tarball_dir + os.path.sep + i break if not tarball: log.error( "Couldn't find acceptable tarball for current building site") ret = 2 else: ret = wayround_i2p.utils.archive.extract_low( log, tmpdir, tarball, source_dir, unwrap_dir=unwrap_dir, rename_dir=rename_dir, more_when_one_extracted_ok=more_when_one_extracted_ok, cleanup_output_dir=cleanup_output_dir) # if own_log: # log.close() return ret
def configure_high(building_site, options, arguments, environment, environment_mode, source_configure_reldir, use_separate_buildding_dir, script_name, run_script_not_bash, relative_call, log=None): """ Start configuration script source_configure_reldir - relative path from source dir to configure dir; script_name - configure script name; run_script_not_bash - run {full_path}/configure, not bash {full_path}/configure; relative_call - make {full_path} bee '.' """ ret = 0 building_site = wayround_i2p.utils.path.abspath(building_site) own_log = False if log is None: own_log = True log = wayround_i2p.utils.log.Log( wayround_i2p.aipsetup.build.getDIR_BUILD_LOGS(building_site), 'configure') pkg_info = \ wayround_i2p.aipsetup.build.BuildingSiteCtl(building_site).\ read_package_info() if not isinstance(pkg_info, dict): log.error("Can't read package info") ret = 1 else: env = wayround_i2p.utils.osutils.env_vars_edit(environment, environment_mode) if len(environment) > 0: log.info("Environment modifications:") for i in sorted(list(environment.keys())): log.info(" {}:".format(i)) log.info(" {}".format(environment[i])) script_path = determine_abs_configure_dir(building_site, source_configure_reldir) working_dir = determine_building_dir(building_site, source_configure_reldir, use_separate_buildding_dir) ret = configure_low(log, script_path, working_dir, options, arguments, env, run_script_not_bash, relative_call, script_name) # if own_log: # log.close() return ret
def builder_action_autogen(self, called_as, log): cfg_script_name = self.builder_action_configure_define_script_name( called_as, log) ret = 0 do_work = False if os.path.isfile( wayround_i2p.utils.path.join(self.get_src_dir(), self.source_configure_reldir, cfg_script_name)): log.info("configurer found. no generator use presumed") else: log.info("configurer not found. generator use presumed") do_work = True if self.forced_autogen: log.info("generator use is forced".format(cfg_script_name)) do_work = True if do_work: log.info("trying to find and use generator mesures") for i in [ ('makeconf.sh', ['./makeconf.sh']), ('autogen.sh', ['./autogen.sh']), ('bootstrap.sh', ['./bootstrap.sh']), ('bootstrap', ['./bootstrap']), ('genconfig.sh', ['./genconfig.sh']), ('configure.ac', ['autoreconf', '-i']), ('configure.in', ['autoreconf', '-i']), ]: if os.path.isfile( wayround_i2p.utils.path.join( self.get_src_dir(), self.source_configure_reldir, i[0])): log.info("found `{}'. trying to execute: {}".format( i[0], ' '.join(i[1]))) wd = wayround_i2p.utils.path.join( self.get_src_dir(), self.source_configure_reldir) if '/' in i[1][0]: tgt_file = wayround_i2p.utils.path.join(wd, i[1][0]) log.info("changing mode (+x) for: {}".format(tgt_file)) chmod_p = subprocess.Popen(['chmod', '+x', tgt_file], cwd=wd) chmod_p.wait() if i[1][0].endswith('.sh'): i[1].insert(0, 'bash') p = subprocess.Popen(i[1], cwd=wd, stdout=log.stdout, stderr=log.stderr) ret = p.wait() break else: log.error("./{} not found and no generators found".format( cfg_script_name)) ret = 2 return ret