コード例 #1
0
ファイル: buildrunner.py プロジェクト: PhilHolmes/gub
    def spec_build (self, spec_name):
        spec = self.specs[spec_name]
        if self.spec_all_installed (spec):
            return
        checksum_fail_reason = self.failed_checksums.get (spec_name, '')
        if ((not checksum_fail_reason or self.options.lax_checksums)
            and not spec.install_after_build):
            return
        global logger
        if self.options.log == 'build':
            # This is expecially broken with multi-platform builds...
            logger = gub_log.default_logger
        else:
            if self.options.log == 'platform':
                log = os.path.join (spec.settings.logdir, 'build.log')
            else:
                log = os.path.join (spec.settings.logdir,
                                    misc.strip_platform (spec_name)) + '.log'
            if os.path.isfile (log):
                misc.rename_append_time (log)
            logger = gub_log.CommandLogger (log, gub_log.default_logger.threshold)
        if checksum_fail_reason:
            rebuild = 'must'
            if self.options.lax_checksums:
                rebuild = 'should'
            logger.write_log ('%(rebuild)s rebuild: %(spec_name)s\n' % locals (), 'verbose')
        else:
            logger.write_log ('checksum ok: %(spec_name)s\n' % locals (), 'verbose')

        if gub_log.get_numeric_loglevel ('verbose') > logger.threshold:
            logger.write_log ('\n'.join (checksum_fail_reason.split ('\n')[:10]), 'verbose')
        logger.write_log (checksum_fail_reason, 'output')

        if ((checksum_fail_reason and not self.options.lax_checksums)
            or not self.spec_is_installable (spec)):
            deferred_runner = runner.DeferredRunner (logger)
            spec.connect_command_runner (deferred_runner)
            spec.runner.stage ('building package: %s\n' % spec_name)
            skip = self.get_skip_stages () ### + spec.get_done ()
            skip = [x for x in skip if x != self.options.stage]
            
            spec.build (self.options, skip)
            spec.connect_command_runner (None)
            deferred_runner.execute_deferred_commands ()
            checksum_file = spec.expand ('%(checksum_file)s')
            if checksum_file:
                if len (self.checksums[spec_name].split ('\n')) < 5:
                    # Sanity check.  This can't be right.  Do not
                    # overwrite precious [possibly correct] checksum.
                    raise Exception ('BROKEN CHECKSUM:' + self.checksums[spec_name])
                if os.path.isfile (checksum_file):
                    misc.rename_append_time (checksum_file)
                open (checksum_file, 'w').write (self.checksums[spec_name])
            loggedos.system (gub_log.default_logger, spec.expand ('rm -f %(stamp_file)s'))
        # Ugh, pkg_install should be stage
        if spec.install_after_build and not self.spec_all_installed (spec):
            logger.write_log (spec.stage_message ('pkg_install'), 'stage')
            self.spec_install (spec)
        gub_log.default_logger.write_log ('\n', 'stage')
コード例 #2
0
ファイル: gup.py プロジェクト: alepharchives/gub
 def dependencies (self, name):
     assert type (name) == str
     try:
         return [misc.strip_platform (x)
                 for x in self.dict_dependencies (self._packages[name])]
     except KeyError:
         logging.error ('no such package: %(name)s\n' % locals ())
         return list ()
コード例 #3
0
ファイル: gup.py プロジェクト: jrioux/gub
 def dependencies (self, name):
     assert type (name) == str
     try:
         return [misc.strip_platform (x)
                 for x in self.dict_dependencies (self._packages[name])]
     except KeyError:
         gub_log.error ('no such package: %(name)s\n' % locals ())
         return list ()
コード例 #4
0
ファイル: tools.py プロジェクト: alepharchives/gub
 def get_build_dependencies(foo):
     # If a package depends on tools::libtool, ie not on
     # libltdl, we still also need <target-arch>::libtool,
     # because of our update_libtool ().  We fix this here,
     # because it's not a package's real dependency but rather
     # a detail of our libtool breakage fixup.
     if (not 'cross/' in package.name()
             and not 'system::' in package.platform_name()):
         package.dependencies = [
             name.replace('tools::libtool', 'libtool')
             for name in package.dependencies
         ]
     if (package.name() in tools_archmatch):
         # on linux-x86, refuse to build linux-x64::guile
         if (package.settings.target_bits == '64'
                 and package.settings.build_bits == '32'):
             raise Exception('cannot build %s for 64 bits' +
                             package.platform_name())
         # on linux-64, build linux-x86::guile with tools32::guile
         if (package.settings.target_bits == '32'
                 and package.settings.build_bits == '64'):
             package.dependencies = [
                 (misc.strip_platform(name) in libs_archmatch
                  and 'system::' not in name and
                  ('cross/' not in name or 'runtime' in name))
                 and name.replace('tools::', 'tools32::') or name
                 for name in package.dependencies
             ]
     # only keep tools32:: for libraries linked against,
     # do not build tools32::autotools etc
     if (package.settings.target_bits == '32'
             and package.settings.build_bits == '64'):
         package.dependencies = [
             (misc.strip_platform(name) not in libs_archmatch
              and misc.strip_name(name, package.platform()) == 'tools32'
              and 'system::' not in name and
              ('cross/' not in name or 'runtime' in name))
             and 'tools::' + misc.strip_platform(name) or name
             for name in package.dependencies
         ]
     return package.dependencies
コード例 #5
0
ファイル: tools.py プロジェクト: alepharchives/gub
 def get_build_dependencies (foo):
     # If a package depends on tools::libtool, ie not on
     # libltdl, we still also need <target-arch>::libtool,
     # because of our update_libtool ().  We fix this here,
     # because it's not a package's real dependency but rather
     # a detail of our libtool breakage fixup.
     if (not 'cross/' in package.name ()
         and not 'system::' in package.platform_name ()):
         package.dependencies = [name.replace ('tools::libtool', 'libtool')
                                 for name in package.dependencies]
     if (package.name () in tools_archmatch):
         # on linux-x86, refuse to build linux-x64::guile
         if (package.settings.target_bits == '64'
             and package.settings.build_bits == '32'):
             raise Exception ('cannot build %s for 64 bits' + package.platform_name ())
         # on linux-64, build linux-x86::guile with tools32::guile
         if (package.settings.target_bits == '32'
             and package.settings.build_bits == '64'):
             package.dependencies = [(misc.strip_platform (name) in libs_archmatch
                                      and 'system::' not in name
                                      and ('cross/' not in name
                                           or 'runtime' in name))
                                     and name.replace ('tools::', 'tools32::') or name
                                     for name in package.dependencies]
     # only keep tools32:: for libraries linked against,
     # do not build tools32::autotools etc
     if (package.settings.target_bits == '32'
         and package.settings.build_bits == '64'):
         package.dependencies = [(misc.strip_platform (name) not in libs_archmatch
                                  and misc.strip_name (name, package.platform ()) == 'tools32'
                                  and 'system::' not in name
                                  and ('cross/' not in name
                                       or 'runtime' in name))
                                 and 'tools::' + misc.strip_platform (name)
                                 or name
                                 for name in package.dependencies]
     return package.dependencies
コード例 #6
0
ファイル: buildrunner.py プロジェクト: marnen/gub
    def spec_build(self, spec_name):
        spec = self.specs[spec_name]
        if self.spec_all_installed(spec):
            return
        checksum_fail_reason = self.failed_checksums.get(spec_name, '')
        if ((not checksum_fail_reason or self.options.lax_checksums)
                and not spec.install_after_build):
            return
        global logger
        if self.options.log == 'build':
            # This is expecially broken with multi-platform builds...
            logger = gub_log.default_logger
        else:
            if self.options.log == 'platform':
                log = os.path.join(spec.settings.logdir, 'build.log')
            else:
                log = os.path.join(spec.settings.logdir,
                                   misc.strip_platform(spec_name)) + '.log'
            if os.path.isfile(log):
                misc.rename_append_time(log)
            logger = gub_log.CommandLogger(log,
                                           gub_log.default_logger.threshold)
        if checksum_fail_reason:
            rebuild = 'must'
            if self.options.lax_checksums:
                rebuild = 'should'
            logger.write_log('%(rebuild)s rebuild: %(spec_name)s\n' % locals(),
                             'verbose')
        else:
            logger.write_log('checksum ok: %(spec_name)s\n' % locals(),
                             'verbose')

        if gub_log.get_numeric_loglevel('verbose') > logger.threshold:
            logger.write_log('\n'.join(checksum_fail_reason.split('\n')[:10]),
                             'verbose')
        logger.write_log(checksum_fail_reason, 'output')

        if ((checksum_fail_reason and not self.options.lax_checksums)
                or not self.spec_is_installable(spec)):
            deferred_runner = runner.DeferredRunner(logger)
            spec.connect_command_runner(deferred_runner)
            spec.runner.stage('building package: %s\n' % spec_name)
            skip = self.get_skip_stages()  ### + spec.get_done ()
            skip = [x for x in skip if x != self.options.stage]

            spec.build(self.options, skip)
            spec.connect_command_runner(None)
            deferred_runner.execute_deferred_commands()
            checksum_file = spec.expand('%(checksum_file)s')
            if checksum_file:
                if len(self.checksums[spec_name].split('\n')) < 5:
                    # Sanity check.  This can't be right.  Do not
                    # overwrite precious [possibly correct] checksum.
                    raise Exception('BROKEN CHECKSUM:' +
                                    self.checksums[spec_name])
                if os.path.isfile(checksum_file):
                    misc.rename_append_time(checksum_file)
                open(checksum_file, 'w').write(self.checksums[spec_name])
            loggedos.system(gub_log.default_logger,
                            spec.expand('rm -f %(stamp_file)s'))
        # Ugh, pkg_install should be stage
        if spec.install_after_build and not self.spec_all_installed(spec):
            logger.write_log(spec.stage_message('pkg_install'), 'stage')
            self.spec_install(spec)
        gub_log.default_logger.write_log('\n', 'stage')