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
Example #3
0
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
Example #4
0
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
Example #7
0
    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