Пример #1
0
    def builder_action_patch(self, called_as, log):
        series_file_path = wayround_i2p.utils.path.join(
            self.get_patches_dir(), 'series')

        series = []

        if os.path.isfile(series_file_path):
            with open(series_file_path) as f:
                series = f.read().split('\n')

        for i in series:
            p_file = wayround_i2p.utils.path.join(self.get_patches_dir(), i)

            if os.path.isfile(p_file):
                log.info("applying patch {}".format(i))

                with open(p_file) as f:
                    p_text = f.read()

                p = subprocess.Popen(['patch', '-p1'],
                                     cwd=self.get_src_dir(),
                                     stdin=subprocess.PIPE,
                                     stdout=log.stdout,
                                     stderr=log.stderr)
                p.communicate(bytes(p_text, 'utf-8'))
                if p.wait() != 0:
                    ret = 1

        return 0
Пример #2
0
def cmake_high(
        building_site,
        options,
        arguments,
        environment,
        environment_mode,
        source_subdir,
        build_in_separate_dir,
        log=None,
        ):

    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),
            'cmake'
            )

    env = wayround_i2p.utils.osutils.env_vars_edit(
        environment,
        environment_mode
        )

    if len(environment) > 0:
        log.info(
            "Environment modifications:\n{}".format(
                pprint.pformat(environment)
                )
            )

    script_path = determine_abs_configure_dir(
        building_site,
        source_subdir
        )

    working_dir = determine_building_dir(
        building_site,
        source_subdir,
        build_in_separate_dir
        )

    ret = cmake_low(
        log=log,
        build_dir=working_dir,
        src_dir=script_path,
        working_dir=working_dir,
        opts=options,
        args=arguments,
        env=env
        )

    # if own_log:
        # log.close()

    return ret
Пример #3
0
    def import_from_spool_element(
            self,
            spool_element_obj,
            log,
            stop_event=None
            ):
        if not isinstance(spool_element_obj, SpoolElement):
            raise TypeError(
                "`spool_element_obj' must be inst of SpoolElement"
                )

        self.makedirs()

        # ------------------------------------------------------------------

        log.info("Transferring data")

        received = spool_element_obj.get_received()
        return_path = spool_element_obj.get_return_path()

        speo_file = spool_element_obj.flagged.open_flag('data', 'br')
        tmeo_file = self.flagged.open_flag('data', 'bw')

        if received is not None:
            log.info("    prepending Received field")
            tmeo_file.write(b"Received: ")
            tmeo_file.write(bytes(received, 'utf-8'))
            tmeo_file.write(wayround_i2p.mail.miscs.STANDARD_LINE_TERMINATOR)

        if return_path is not None:
            log.info("    prepending Return-path field")
            tmeo_file.write(b"Return-path: ")
            tmeo_file.write(bytes(return_path, 'utf-8'))
            tmeo_file.write(wayround_i2p.mail.miscs.STANDARD_LINE_TERMINATOR)

        log.info("    transferring rest of the data")

        while True:
            if stop_event is not None and stop_event.is_set():
                break

            buf = speo_file.read(2 * 1024**2)
            if len(buf) == 0:
                break

            tmeo_file.write(buf)

        speo_file.close()
        tmeo_file.close()

        del speo_file, tmeo_file, received, return_path

        log.info("    DONE: data transfer complete")

        self.reindex(stop_event, log)

        return
Пример #4
0
    def builder_action_dst_cleanup(self, called_as, log):
        """
        Standard destdir cleanup
        """

        if os.path.isdir(self.get_dst_dir()):
            log.info("cleaningup destination dir")
            wayround_i2p.utils.file.cleanup_dir(self.get_dst_dir())

        return 0
Пример #5
0
    def builder_action_bld_cleanup(self, called_as, log):
        """
        Standard building dir cleanup
        """

        if os.path.isdir(self.get_bld_dir()):
            log.info("cleaningup building dir")
            wayround_i2p.utils.file.cleanup_dir(self.get_bld_dir())

        return 0
Пример #6
0
    def builder_action_src_cleanup(self, called_as, log):
        """
        Standard sources cleanup
        """

        if os.path.isdir(self.get_src_dir()):
            log.info("cleaningup source dir")
            wayround_i2p.utils.file.cleanup_dir(self.get_src_dir())

        return 0
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_high(building_site,
              options,
              arguments,
              environment,
              environment_mode,
              use_separate_buildding_dir,
              source_configure_reldir,
              log=None,
              make_filename=None):

    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),
            'make')

    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, environment[i]))

    working_dir = determine_building_dir(building_site,
                                         source_configure_reldir,
                                         use_separate_buildding_dir)

    ret = make_low(log,
                   options,
                   arguments,
                   env,
                   working_dir,
                   make_filename=make_filename)

    # if own_log:
    # log.close()

    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
Пример #10
0
    def builder_action_configure(self, called_as, log):

        log.info("crossbuild?: {}, crossbuilder?: {}".format(
            self.get_is_crossbuild(), self.get_is_crossbuilder()))

        self.check_deprecated_methods(called_as, log)

        envs = {}
        if hasattr(self, 'builder_action_configure_define_environment'):
            envs = self.builder_action_configure_define_environment(
                called_as, log)

        opts = []
        if hasattr(self, 'builder_action_configure_define_opts'):
            opts = self.builder_action_configure_define_opts(called_as, log)

        args = []
        if hasattr(self, 'builder_action_configure_define_args'):
            args = self.builder_action_configure_define_args(called_as, log)

        ret = autotools.configure_high(
            self.buildingsite_path,
            log=log,
            options=opts,
            arguments=args,
            environment=envs,
            environment_mode='copy',
            source_configure_reldir=self.source_configure_reldir,
            use_separate_buildding_dir=self.separate_build_dir,
            script_name=self.builder_action_configure_define_script_name(
                called_as, log),
            run_script_not_bash=(
                self.builder_action_configure_define_run_script_not_bash(
                    called_as, log)),
            relative_call=(self.builder_action_configure_define_relative_call(
                called_as, log)))

        #sleeptime = 5
        #log.info("sleep: \033[0;1m{}\033[0m seconds".format(sleeptime))
        # time.sleep(sleeptime)
        return ret
Пример #11
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
Пример #12
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
Пример #13
0
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
Пример #14
0
    def import_from_transition(self, transition_message_obj, log=None):

        if not isinstance(transition_message_obj, TransitionMessage):
            raise TypeError(
                "`transition_message_obj' must be inst of TransitionMessage"
                )

        self.makedirs()

        flags_list = transition_message_obj.flagged.get_flags_list()

        for i in flags_list:

            src_path = transition_message_obj.flagged.get_flag_path(i)
            dst_path = self.flagged.get_flag_path(i)

            if log is not None:
                log.info("Copying:")
                log.info("    '{}'".format(src_path))
                log.info("    to")
                log.info("    '{}'".format(dst_path))

            if not os.path.isfile(src_path):
                log.info("    source file does not exists")
            else:
                size = os.stat(src_path).st_size
                mb_size = size / 1024 / 1024

                log.info("    size: {} bytes ({} MiB)".format(size, mb_size))

                shutil.copy2(src_path, dst_path)

            log.info("")

        return
Пример #15
0
    def reindex(self, stop_event, log):
        # ------------------------------------------------------------------

        log.info("Calculating data lines..")
        self.calculate_data_lines_indexes(log, stop_event)
        log.info("    DONE")

        # print("get_data_lines: {}".format(self.get_data_lines()))

        # ------------------------------------------------------------------

        log.info("Determining sections..")
        self.calculate_section_lines(log, stop_event)
        log.info("    DONE")

        # ------------------------------------------------------------------

        log.info("Determining title..")
        self.calculate_subject(log, stop_event)
        log.info("    DONE")

        # ------------------------------------------------------------------

        log.info("Setting up initial message flags..")
        self.setup_initial_flags(log, stop_event)
        log.info("    DONE")

        # ------------------------------------------------------------------

        return
Пример #16
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