Esempio n. 1
0
    def build(self):
        """Actually build the package."""

        build_log = os.path.join(self.log_dir, "bench-build.log")
        prebuild_log = os.path.join(self.log_dir, "bench-prebuild.log")

        distcc_log = os.path.join(self.log_dir, "bench-build-distcc.log")

        rm_files((build_log, distcc_log))

        make_dir(self.build_dir)
        print "** Building..."
        if self.project.pre_build_cmd:
            cmd = ("cd %s && %s > %s 2>&1" %
                   (self.build_dir, self.project.pre_build_cmd, prebuild_log))
            self._run_cmd_with_redirect_farm(cmd)
        distcc_hosts = buildutil.tweak_hosts(os.getenv("DISTCC_HOSTS"),
                                             self.compiler.num_hosts,
                                             self.compiler.host_opts)
        # We use built-in 'time' to measure real, system, and user time.  To
        # allow its stderr to be grabbed, the time command is executed in a
        # subshell.
        cmd = ("cd %s && \\\n"
               "(time -p \\\n"
               "DISTCC_HOSTS='%s' \\\n"
               "INCLUDE_SERVER_ARGS='-t --unsafe_absolute_includes %s' \\\n"
               "%s%s \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' "
               "\\\n%s)"
               "\\\n>%s 2>&1" %
               (self.build_dir, distcc_hosts, self.project.include_server_args,
                self.compiler.pump_cmd, self.project.build_cmd, distcc_log,
                self.compiler.cc, self.compiler.cxx, self.compiler.make_opts,
                build_log))
        result, unused_elapsed = self._run_cmd_with_redirect_farm(cmd)
        return (result, Build._extract_time_info(build_log))
Esempio n. 2
0
    def unpack(self):
        """Unpack from source tarball into build directory"""
        if re.search(r"\.tar\.bz2$", self.project.package_file):
            tar_fmt = "tar xf %s --bzip2"
        else:
            tar_fmt = "tar xfz %s"

        tar_cmd = tar_fmt % os.path.join(os.getcwd(), self.project.package_dir,
                                         self.project.package_file)

        make_dir(self.base_dir)
        print "** Unpacking..."
        run_cmd("cd %s && %s" % (self.base_dir, tar_cmd))
Esempio n. 3
0
File: Build.py Progetto: aosm/distcc
    def unpack(self):
        """Unpack from source tarball into build directory"""
        if re.search(r"\.tar\.bz2$", self.project.package_file):
            tar_fmt = "tar xf %s --bzip2"
        else:
            tar_fmt = "tar xfz %s"

        tar_cmd = tar_fmt % os.path.join(os.getcwd(), self.project.package_dir,
                                         self.project.package_file)

        make_dir(self.base_dir)
        print "** Unpacking..."
        run_cmd("cd %s && %s" % (self.base_dir, tar_cmd))
Esempio n. 4
0
    def configure(self, compiler):
        """Run configuration command for this tree, if any."""
        self.compiler = compiler

        make_dir(self.log_dir)

        configure_log = os.path.join(self.log_dir, "bench-configure.log")
        distcc_log = os.path.join(self.log_dir, "bench-configure-distcc.log")

        rm_files((configure_log, distcc_log))

        print "** Configuring..."
        run_cmd(
            "cd %s && \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' \\\n%s \\\n>%s 2>&1"
            % (self.build_dir, distcc_log, self.compiler.cc, self.compiler.cxx,
               self.project.configure_cmd, configure_log))
Esempio n. 5
0
File: Build.py Progetto: aosm/distcc
    def configure(self, compiler):
        """Run configuration command for this tree, if any."""
        self.compiler = compiler

        make_dir(self.log_dir)

        configure_log = os.path.join(self.log_dir, "bench-configure.log")
        distcc_log = os.path.join(self.log_dir, "bench-configure-distcc.log")

        rm_files((configure_log, distcc_log))

        print "** Configuring..."
        run_cmd("cd %s && \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' \\\n%s \\\n>%s 2>&1" %
                (self.build_dir, distcc_log, self.compiler.cc,
                 self.compiler.cxx,
                 self.project.configure_cmd, configure_log))
Esempio n. 6
0
    def download(self):
        """Download package from vendor site."""

        make_dir(self.package_dir)
        make_dir(self.download_dir)
            
        if not os.path.isfile(os.path.join(self.package_dir, self.package_file)):
            # XXX: snarf gets upset if the HTTP server returns "416
            # Requested Range Not Satisfiable" because the file is already
            # totally downloaded.  This is kind of a snarf bug.
            print "** Downloading"
            run_cmd("cd %s && wget --continue %s" %
                    (self.download_dir, self.url))
            run_cmd("mv %s %s" %
                    (os.path.join(self.download_dir, self.package_file),
                     self.package_dir))
Esempio n. 7
0
    def configure(self):
        """Run configuration command for this tree, if any."""
        make_dir(self.log_dir)

        configure_log = os.path.join(self.log_dir, "bench-configure.log")
        distcc_log = os.path.join(self.log_dir, "bench-configure-distcc.log")

        rm_files((configure_log, distcc_log, self.configure_done))

        make_dir(self.build_dir)
        print "** Configuring..."
        cmd = ("cd %s && \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' \\\n%s \\\n>%s 2>&1"
               % (self.build_dir, distcc_log,
                  self.compiler.cc, self.compiler.cxx,
                  self.project.configure_cmd, configure_log))
        self._run_cmd_with_redirect_farm(cmd)
        # Touch a file if the configure was successfully done, so we know.
        open(self.configure_done, 'w').close()
Esempio n. 8
0
    def configure(self):
        """Run configuration command for this tree, if any."""
        make_dir(self.log_dir)

        configure_log = os.path.join(self.log_dir, "bench-configure.log")
        distcc_log = os.path.join(self.log_dir, "bench-configure-distcc.log")

        rm_files((configure_log, distcc_log, self.configure_done))

        make_dir(self.build_dir)
        print "** Configuring..."
        cmd = (
            "cd %s && \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' \\\n%s \\\n>%s 2>&1"
            % (self.build_dir, distcc_log, self.compiler.cc, self.compiler.cxx,
               self.project.configure_cmd, configure_log))
        self._run_cmd_with_redirect_farm(cmd)
        # Touch a file if the configure was successfully done, so we know.
        open(self.configure_done, 'w').close()
Esempio n. 9
0
    def build(self):
        """Actually build the package."""

        build_log = os.path.join(self.log_dir, "bench-build.log")
        prebuild_log = os.path.join(self.log_dir, "bench-prebuild.log")

        distcc_log = os.path.join(self.log_dir, "bench-build-distcc.log")

        rm_files((build_log, distcc_log))

        make_dir(self.build_dir)
        print "** Building..."
        if self.project.pre_build_cmd:
            cmd = ("cd %s && %s > %s 2>&1" % (self.build_dir,
                                              self.project.pre_build_cmd,
                                              prebuild_log))
            self._run_cmd_with_redirect_farm(cmd)
        distcc_hosts = buildutil.tweak_hosts(os.getenv("DISTCC_HOSTS"),
                                             self.compiler.num_hosts,
                                             self.compiler.host_opts)
        # We use built-in 'time' to measure real, system, and user time.  To
        # allow its stderr to be grabbed, the time command is executed in a
        # subshell.
        cmd = ("cd %s && \\\n"
               "(time -p \\\n"
               "DISTCC_HOSTS='%s' \\\n"
               "INCLUDE_SERVER_ARGS='-t --unsafe_absolute_includes %s' \\\n"
               "%s%s \\\nDISTCC_LOG='%s' \\\nCC='%s' \\\nCXX='%s' "
               "\\\n%s)"
               "\\\n>%s 2>&1"
               %
               (self.build_dir,
                distcc_hosts,
                self.project.include_server_args,
                self.compiler.pump_cmd,
                self.project.build_cmd,
                distcc_log,
                self.compiler.cc,
                self.compiler.cxx,
                self.compiler.make_opts,
                build_log))
        result, unused_elapsed = self._run_cmd_with_redirect_farm(cmd)
        return (result, Build._extract_time_info(build_log))
Esempio n. 10
0
    def _run_cmd_with_redirect_farm(self, cmd):
        """Initialize shell script farm for given compiler,
        augment PATH, and run cmd.

        A shell script farm is a set of scripts for dispatching a
        chosen compiler using distcc. For example, the 'cc' script may
        contain the one line:
          dist /usr/mine/gcc "$@"
        """
        farm_dir = os.path.join(self.build_dir, 'build-cc-script-farm')
        make_dir(farm_dir)
        print ("** Creating masquerading shell scripts in '%s'" % farm_dir)
        masquerade = os.path.join(self.build_dir, 'masquerade')
        prepare_shell_script_farm(self.compiler, farm_dir, masquerade)
        old_path = os.environ['PATH'] 
        try:
            os.environ['PATH'] = farm_dir + ":" + old_path
            return run_cmd(cmd)
        finally:
            os.environ['PATH'] = old_path
Esempio n. 11
0
    def _run_cmd_with_redirect_farm(self, cmd):
        """Initialize shell script farm for given compiler,
        augment PATH, and run cmd.

        A shell script farm is a set of scripts for dispatching a
        chosen compiler using distcc. For example, the 'cc' script may
        contain the one line:
          dist /usr/mine/gcc "$@"
        """
        farm_dir = os.path.join(self.build_dir, 'build-cc-script-farm')
        make_dir(farm_dir)
        print("** Creating masquerading shell scripts in '%s'" % farm_dir)
        masquerade = os.path.join(self.build_dir, 'masquerade')
        prepare_shell_script_farm(self.compiler, farm_dir, masquerade)
        old_path = os.environ['PATH']
        try:
            os.environ['PATH'] = farm_dir + ":" + old_path
            return run_cmd(cmd)
        finally:
            os.environ['PATH'] = old_path
Esempio n. 12
0
 def clean(self):
     clean_log = os.path.join(self.log_dir, "bench-clean.log")
     make_dir(self.build_dir)
     print "** Cleaning build directory"
     cmd = "cd %s && make clean >%s 2>&1" % (self.build_dir, clean_log)
     self._run_cmd_with_redirect_farm(cmd)
Esempio n. 13
0
 def clean(self):
     clean_log = os.path.join(self.log_dir, "bench-clean.log")
     make_dir(self.build_dir)
     print "** Cleaning build directory"
     cmd = "cd %s && make clean >%s 2>&1" % (self.build_dir, clean_log)
     self._run_cmd_with_redirect_farm(cmd)