Exemplo n.º 1
0
 def __unicode__(self):
     wrap = TextWrapper(width=74, fix_sentence_endings=True).wrap
     short = u', '.join(self.short)
     long_pars = []
     for t in self.long:
         if isinstance(t, basestring):
             t = wrap(t)
         long_pars.append(u'\n '.join(t))
     long = u'\n .\n '.join(long_pars)
     return short + u'\n ' + long
Exemplo n.º 2
0
 def __str__(self):
     wrap = TextWrapper(width = 74, fix_sentence_endings = True).wrap
     short = ', '.join(self.short)
     long_pars = []
     for t in self.long:
         if isinstance(t, str):
             t = wrap(t)
         long_pars.append('\n '.join(t))
     long = '\n .\n '.join(long_pars)
     return short + '\n ' + long
Exemplo n.º 3
0
    def do_package(self, packages, makefile, package, vars, makeflags):
        config_entry = self.config['base', package]
        vars.update(config_entry)
        vars['package'] = package

        makeflags['PACKAGE'] = package

        binary = self.templates["control.binary"]
        copyright = self.templates["copyright.binary"]

        if os.path.exists('%s/copyright' % package):
            f = open('%s/copyright' % package)
            open("debian/firmware-%s.copyright" % package, 'w').write(f.read())
        else:
            vars['license'] = codecs.open("%s/LICENSE" % package, 'r',
                                          'utf-8').read()
            codecs.open("debian/firmware-%s.copyright" % package, 'w',
                        'utf-8').write(self.substitute(copyright, vars))

        try:
            os.unlink('debian/firmware-%s.bug-presubj' % package)
        except OSError:
            pass
        os.symlink('bug-presubj', 'debian/firmware-%s.bug-presubj' % package)

        files_orig = config_entry['files']
        files_real = {}
        files_unused = []
        links = {}
        links_rev = {}

        for root, dirs, files in os.walk(package):
            try:
                dirs.remove('.svn')
            except ValueError:
                pass
            for f in files:
                cur_path = root + '/' + f
                if root != package:
                    f = root[len(package) + 1:] + '/' + f
                if os.path.islink(cur_path):
                    if f in files_orig:
                        links[f] = os.readlink(cur_path)
                        link_target = os.path.normpath(
                            os.path.join(f, '..', links[f]))
                        links_rev.setdefault(link_target, []).append(f)
                    continue
                f1 = f.rsplit('-', 1)
                if f in files_orig:
                    files_real[f] = f, f, None
                    continue
                if len(f1) > 1:
                    f_base, f_version = f1
                    if f_base in files_orig:
                        if f_base in files_real:
                            raise RuntimeError("Multiple files for %s" %
                                               f_base)
                        files_real[f_base] = f_base, f, f_version
                        continue
                # Whitelist files not expected to be installed as firmware
                if f in [
                        'copyright', 'defines', 'LICENSE', 'LICENSE.install',
                        'update.py', 'update.sh'
                ]:
                    continue
                files_unused.append(f)

        if files_unused:
            print >>sys.stderr, 'W: %s: unused files:' % package, \
                ' '.join(files_unused)

        makeflags['FILES'] = ' '.join(
            ["%s:%s" % (i[1], i[0]) for i in files_real.itervalues()])
        vars['files_real'] = ' '.join(
            ["/lib/firmware/%s" % i for i in config_entry['files']])

        makeflags['LINKS'] = ' '.join(
            ["%s:%s" % (link, target) for link, target in links.iteritems()])

        files_desc = [u"Contents:"]

        wrap = TextWrapper(width=71,
                           fix_sentence_endings=True,
                           initial_indent=' * ',
                           subsequent_indent='   ').wrap
        for f in config_entry['files']:
            if f in links:
                continue
            f, f_real, version = files_real[f]
            c = self.config.get(('base', package, f), {})
            desc = c.get('desc')
            if version is None:
                version = c.get('version')
            try:
                f = f + u', ' + u', '.join(links_rev[f])
            except KeyError:
                pass
            if desc and version:
                desc = "%s, version %s (%s)" % (desc, version, f)
            elif desc:
                desc = u"%s (%s)" % (desc, f)
            else:
                desc = u"%s" % f
            files_desc.extend(wrap(desc))

        packages_binary = self.process_packages(binary, vars)

        packages_binary[0]['Description'].append_pre(files_desc)

        if 'initramfs-tools' in config_entry.get('support', []):
            postinst = self.templates['postinst.initramfs-tools']
            codecs.open("debian/firmware-%s.postinst" % package, 'w',
                        'utf-8').write(self.substitute(postinst, vars))

        if 'license-accept' in config_entry:
            license = codecs.open("%s/LICENSE.install" % package, 'r',
                                  'utf-8').read()
            preinst = self.templates['preinst.license']
            preinst_filename = "debian/firmware-%s.preinst" % package
            codecs.open(preinst_filename, 'w',
                        'utf-8').write(self.substitute(preinst, vars))

            templates = self.process_templates(
                self.templates['templates.license'], vars)
            license_split = re.split(ur'\n\s*\n', license)
            templates[0]['Description'].extend(license_split)
            templates_filename = "debian/firmware-%s.templates" % package
            self.write_rfc822(codecs.open(templates_filename, 'w', 'utf-8'),
                              templates)

            desc = packages_binary[0]['Description']
            desc.append(u"""This firmware is covered by the %s.
You must agree to the terms of this license before it is installed.""" %
                        vars['license-title'])
            packages_binary[0]['Pre-Depends'] = PackageRelation(
                'debconf | debconf-2.0')

        packages.extend(packages_binary)

        makefile.add(
            'binary-indep',
            cmds=["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags])
Exemplo n.º 4
0
    def do_package(self, packages, makefile, package, vars, makeflags):
        config_entry = self.config['base', package]
        vars.update(config_entry)
        vars['package'] = package

        makeflags['PACKAGE'] = package

        binary = self.templates["control.binary"]
        copyright = self.templates["copyright.binary"]

        package_dir = "debian/config/%s" % package

        if os.path.exists('%s/copyright' % package_dir):
            f = open('%s/copyright' % package_dir)
            open("debian/firmware-%s.copyright" % package, 'w').write(f.read())
        else:
            vars['license'] = open("%s/LICENSE" % package_dir, 'r').read()
            open("debian/firmware-%s.copyright" % package,
                 'w').write(self.substitute(copyright, vars))

        try:
            os.unlink('debian/firmware-%s.bug-presubj' % package)
        except OSError:
            pass
        os.symlink('bug-presubj', 'debian/firmware-%s.bug-presubj' % package)

        files_orig = config_entry['files']
        files_real = {}
        files_unused = []
        links = {}
        links_rev = {}

        # Look for additional and replacement files in binary package config
        for root, dirs, files in os.walk(package_dir):
            try:
                dirs.remove('.svn')
            except ValueError:
                pass
            for f in files:
                cur_path = root + '/' + f
                if root != package_dir:
                    f = root[len(package_dir) + 1:] + '/' + f
                if os.path.islink(cur_path):
                    if f in files_orig:
                        links[f] = os.readlink(cur_path)
                    continue
                f1 = f.rsplit('-', 1)
                if f in files_orig:
                    files_real[f] = f, cur_path, None
                    continue
                if len(f1) > 1:
                    f_base, f_version = f1
                    if f_base in files_orig:
                        if f_base in files_real:
                            raise RuntimeError("Multiple files for %s" %
                                               f_base)
                        files_real[f_base] = f_base, package_dir + '/' + f, \
                                             f_version
                        continue
                # Whitelist files not expected to be installed as firmware
                if f in [
                        'copyright', 'defines', 'LICENSE', 'LICENSE.install',
                        'update.py', 'update.sh'
                ]:
                    continue
                files_unused.append(f)

        # Take all the other files from upstream
        for f in files_orig:
            if f not in files_real and f not in links:
                f_upstream = os.path.join('debian/build/install', f)
                if os.path.islink(f_upstream):
                    links[f] = os.readlink(f_upstream)
                elif os.path.isfile(f_upstream):
                    files_real[f] = f, f_upstream, None

        for f in links:
            link_target = os.path.normpath(os.path.join(f, '..', links[f]))
            links_rev.setdefault(link_target, []).append(f)

        if files_unused:
            print('W: %s: unused files:' % package,
                  ' '.join(files_unused),
                  file=sys.stderr)

        makeflags['FILES'] = ' '.join(
            ["%s:%s" % (i[1], i[0]) for i in files_real.values()])
        vars['files_real'] = ' '.join(
            ["/lib/firmware/%s" % i for i in config_entry['files']])

        makeflags['LINKS'] = ' '.join(
            ["%s:%s" % (link, target) for link, target in links.items()])

        files_desc = ["Contents:"]
        firmware_meta_temp = self.templates["metainfo.xml.firmware"]
        firmware_meta_list = []

        wrap = TextWrapper(width=71,
                           fix_sentence_endings=True,
                           initial_indent=' * ',
                           subsequent_indent='   ').wrap
        for f in config_entry['files']:
            firmware_meta_list.append(
                self.substitute(firmware_meta_temp, {'filename': f}))
            if f in links:
                continue
            f, f_real, version = files_real[f]
            c = self.config.get(('base', package, f), {})
            desc = c.get('desc')
            if version is None:
                version = c.get('version')
            try:
                f = f + ', ' + ', '.join(sorted(links_rev[f]))
            except KeyError:
                pass
            if desc and version:
                desc = "%s, version %s (%s)" % (desc, version, f)
            elif desc:
                desc = "%s (%s)" % (desc, f)
            else:
                desc = "%s" % f
            files_desc.extend(wrap(desc))

        packages_binary = self.process_packages(binary, vars)

        packages_binary[0]['Description'].append_pre(files_desc)

        if 'initramfs-tools' in config_entry.get('support', []):
            postinst = self.templates['postinst.initramfs-tools']
            open("debian/firmware-%s.postinst" % package,
                 'w').write(self.substitute(postinst, vars))

        if 'license-accept' in config_entry:
            license = open("%s/LICENSE.install" % package_dir, 'r').read()
            preinst = self.templates['preinst.license']
            preinst_filename = "debian/firmware-%s.preinst" % package
            open(preinst_filename, 'w').write(self.substitute(preinst, vars))

            templates = self.process_templates(
                self.templates['templates.license'], vars)
            license_split = re.split(r'\n\s*\n', license)
            templates[0]['Description'].extend(license_split)
            templates_filename = "debian/firmware-%s.templates" % package
            self.write_rfc822(open(templates_filename, 'w'), templates)

            desc = packages_binary[0]['Description']
            desc.append("""This firmware is covered by the %s.
You must agree to the terms of this license before it is installed.""" %
                        vars['license-title'])
            packages_binary[0]['Pre-Depends'] = PackageRelation(
                'debconf | debconf-2.0')

        packages.extend(packages_binary)

        makefile.add(
            'binary-indep',
            cmds=["$(MAKE) -f debian/rules.real binary-indep %s" % makeflags])

        vars['firmware-list'] = ''.join(firmware_meta_list)
        # Underscores are preferred to hyphens
        vars['package-metainfo'] = package.replace('-', '_')
        # Summary must not contain line breaks
        vars['longdesc-metainfo'] = re.sub(r'\s+', ' ', vars['longdesc'])
        package_meta_temp = self.templates["metainfo.xml"]
        # XXX Might need to escape some characters
        open("debian/firmware-%s.metainfo.xml" % package,
             'w').write(self.substitute(package_meta_temp, vars))