Exemple #1
0
 def finalize_options(self):
     """Set the distribution directory to 'dist/X.Y'."""
     version = get_version()
     sdist.finalize_options(self)
     branch = ".".join(version.split(".")[:2])
     self.dist_dir = os.path.join(self.dist_dir, branch)
Exemple #2
0
    def _make_spec_file(self):
        """Generate the text of an RPM spec file and return it as a
        list of strings (one per line).
        """
        sdist = self.reinitialize_command('sdist')
        sdist.finalize_options()
        sdist.filelist = FileList()
        sdist.get_file_list()
        manifest = sdist.filelist.files

        # definitions and headers
        name = self.distribution.get_name()
        version = self.distribution.get_version().replace('-', '_')
        release = self.release.replace('-', '_')
        summary = self.distribution.get_description().strip().strip('.')

        spec_file = [
            '%define\toname\t' + name,
        ]
        if name[:2] == "py":
            spec_file.append('%define\tmodule\t' + name[2:])
            module = '%{module}'
        else:
            module = '%{oname}'

        spec_file.extend([
            '',
            'Name:\t\tpython-' + module,
            'Version:\t' + version,
            'Release:\t' + release,
            'Summary:\t' + summary,
            'Source0:\thttp://pypi.python.org/packages/source/%c/%%{oname}/%%{oname}-%%{version}.tar'
            % name[0],
        ])
        # XXX yuck! this filename is available from the "sdist" command,
        # but only after it has run: and we create the spec file before
        # running "sdist", in case of --spec-only.
        if sdist.formats and 'xztar' in sdist.formats:
            spec_file[-1] += '.xz'
        elif sdist.formats and 'bztar' in sdist.formats:
            spec_file[-1] += '.bz2'
        else:
            spec_file[-1] += '.gz'

        license = self.distribution.get_license()
        if license == "UNKNOWN":
            classifiers = self.distribution.get_classifiers()
            for classifier in classifiers:
                values = classifier.split(" :: ")
                if values[0] == "License":
                    license = values[-1]
        license.replace("GPL ", "GPLv").strip()
        spec_file.extend([
            'License:\t' + license,
            'Group:\t\t' + self.group,
        ])
        if self.distribution.get_url() != 'UNKNOWN':
            spec_file.append('Url:\t\t' + self.distribution.get_url())

        doc_names = [
            'README', 'CHANGES', 'ChangeLog', 'NEWS', 'THANKS', 'HISTORY',
            'AUTHORS', 'BUGS', 'ReleaseNotes', 'DISCLAIMER', 'TODO',
            'TROUBLESHOOTING', 'IDEAS', 'HACKING', 'WISHLIST', 'CREDITS',
            'PROJECTS', 'LEGAL', 'KNOWN_BUGS', 'MISSING_FEATURES', 'FAQ',
            'ANNOUNCE', 'FEATURES', 'WHATSNEW'
        ]
        license_names = ['LICENSE', 'COPYRIGHT', 'COPYING']
        common_licenses = glob('/usr/share/common-licenses/*')
        for i in range(len(common_licenses)):
            common_licenses[i] = os.path.basename(common_licenses[i])
        doc_names.extend(license_names)
        doc_suffixes = ('.doc', '.htm', '.txt', '.pdf', '.odt')

        self.doc_files = []
        all_files = []
        if self.distribution.data_files:
            all_files.extend(self.distribution.data_files)
        if manifest:
            all_files.extend(manifest)
        if all_files:
            for data_file in all_files:
                done = False
                for doc_name in doc_names:
                    if doc_name.lower() in data_file.lower():
                        if doc_name in license_names and license in common_licenses:
                            done = True
                            break
                        self.doc_files.append(data_file)
                        done = True
                        break
                if done:
                    continue
                for doc_suffix in doc_suffixes:
                    ext = os.path.splitext(data_file.lower())[1]
                    if ext.lower().startswith(doc_suffix.lower()):
                        self.doc_files.append(data_file)
                        break
        if not self.force_arch:
            # noarch if no extension modules
            if not self.distribution.has_ext_modules():
                spec_file.append('BuildArch:\tnoarch')
        else:
            spec_file.append('BuildArch:\t%s' % self.force_arch)

        for field in (
                'Provides',
                'Requires',
                'Conflicts',
                'Obsoletes',
        ):
            val = getattr(self, string.lower(field))
            if type(val) is ListType:
                spec_file.append('%s: %s' % (field, string.join(val)))
            elif val is not None:
                spec_file.append('%s: %s' % (field, val))

        build_requires = []
        if self.distribution.has_ext_modules():
            build_requires.append('python-devel')
        # Ugly, but should mostly work... :p
        if 'setuptools' in str(
                self.distribution.__dict__) or 'setuptools' in str(
                    sdist.__dict__):
            build_requires.append('python-setuptools')
        if build_requires:
            spec_file.append('BuildRequires:\t' + string.join(build_requires))

        if self.build_requires:
            spec_file.append('BuildRequires:\t' +
                             string.join(self.build_requires))

        spec_file.extend([
            '', '%description',
            self.distribution.get_long_description().strip()
        ])

        # insert contents of files

        # XXX this is kind of misleading: user-supplied options are files
        # that we open and interpolate into the spec file, but the defaults
        # are just text that we drop in as-is.  Hmmm.

        if 'test_suite' in self.distribution.__dict__ and self.distribution.test_suite:
            verify_script = "python setup.py test"
        else:
            verify_script = None

        script_options = [
            ('prep', 'prep_script', "%setup -q -n %{oname}-%{version}"),
            ('build', 'build_script', "python setup.py build"),
            ('install', 'install_script', ("python setup.py install "
                                           "--root=%{buildroot}")),
            ('check', 'verify_script', verify_script),
            ('pre', 'pre_install', None),
            ('post', 'post_install', None),
            ('preun', 'pre_uninstall', None),
            ('postun', 'post_uninstall', None),
        ]

        for (rpm_opt, attr, default) in script_options:
            # Insert contents of file referred to, if no file is referred to
            # use 'default' as contents of script
            val = getattr(self, attr)
            if val or default:
                spec_file.extend([
                    '',
                    '%' + rpm_opt,
                ])
                if val:
                    spec_file.extend(string.split(open(val, 'r').read(), '\n'))
                else:
                    spec_file.append(default)

        # files section
        spec_file.extend([
            '',
            '%files',
        ])
        for doc_file in self.doc_files:
            spec_file.append('%doc ' + doc_file)

        if self.distribution.has_ext_modules():
            site_pkgs = '%{py_platsitedir}'
        else:
            site_pkgs = '%{py_puresitedir}'
        if self.distribution.has_scripts():
            for script in self.distribution.scripts:
                if type(script) == StringType:
                    spec_file.append(
                        os.path.join('%{_bindir}', os.path.basename(script)))
        site_pkgs_files = []
        if self.distribution.data_files:
            for data_file in self.distribution.data_files:
                site_pkgs_files.append(os.path.join(site_pkgs, data_file))
        if 'entry_points' in self.distribution.__dict__ and self.distribution.entry_points:
            if type(self.distribution.entry_points) is DictType:
                for entry_points in self.distribution.entry_points:
                    for entry_point in self.distribution.entry_points[
                            entry_points]:
                        site_pkgs_files.append(
                            os.path.join(
                                '%{_bindir}',
                                os.path.basename(entry_point.split('=')[0])))
        if 'py_modules' in self.distribution.__dict__ and self.distribution.py_modules:
            for py_module in self.distribution.py_modules:
                py_module = py_module.replace('.', os.path.sep)
                site_pkgs_files.append(
                    os.path.join(site_pkgs, py_module + '.py*'))
        if 'packages' in self.distribution.__dict__ and self.distribution.packages:
            for package in self.distribution.packages:
                package = package.replace('.', os.path.sep)
                #spec_file.append('%dir ' + os.path.join(site_pkgs, package))
                site_pkgs_files.append(
                    os.path.join(site_pkgs, package, '*.py*'))
        if self.distribution.has_ext_modules():
            for ext_module in self.distribution.ext_modules:
                ext_module = ext_module.name.replace('.', os.path.sep)
                site_pkgs_files.append(
                    os.path.join(
                        site_pkgs, ext_module +
                        get_config_var('SHLIB_EXT').replace('"', '')))

        site_pkgs_files.sort()
        for f in site_pkgs_files:
            spec_file.append(f)

        spec_file.append(
            os.path.join(site_pkgs,
                         name.replace('-', '_') + '*.egg-info'))

        packager = rpm.expandMacro('%packager')

        spec_file.extend([
            '',
            '%changelog',
            '* Thu Oct 21 2010 %s %s-%s' % (packager, version, release),
            '- Initial release',
        ])
        return spec_file
Exemple #3
0
 def finalize_options(self):
     """Set the distribution directory to 'dist/X.Y'."""
     version = get_gaupol_version()
     sdist.finalize_options(self)
     branch = ".".join(version.split(".")[:2])
     self.dist_dir = os.path.join(self.dist_dir, branch)
    def _make_spec_file(self):
        """Generate the text of an RPM spec file and return it as a
        list of strings (one per line).
        """
        sdist = self.reinitialize_command("sdist")
        sdist.finalize_options()
        sdist.filelist = FileList()
        sdist.get_file_list()
        manifest = sdist.filelist.files

        # definitions and headers
        name = self.distribution.get_name()
        version = self.distribution.get_version().replace("-", "_")
        release = self.release.replace("-", "_")
        summary = self.distribution.get_description().strip().strip(".")

        spec_file = ["%define\toname\t" + name]
        if name[:2] == "py":
            spec_file.append("%define\tmodule\t" + name[2:])
            module = "%{module}"
        else:
            module = "%{oname}"

        spec_file.extend(
            [
                "",
                "Name:\t\tpython-" + module,
                "Version:\t" + version,
                "Release:\t" + release,
                "Summary:\t" + summary,
                "Source0:\thttp://pypi.python.org/packages/source/%c/%%{oname}/%%{oname}-%%{version}.tar" % name[0],
            ]
        )
        # XXX yuck! this filename is available from the "sdist" command,
        # but only after it has run: and we create the spec file before
        # running "sdist", in case of --spec-only.
        if sdist.formats and "xztar" in sdist.formats:
            spec_file[-1] += ".xz"
        elif sdist.formats and "bztar" in sdist.formats:
            spec_file[-1] += ".bz2"
        else:
            spec_file[-1] += ".gz"

        license = self.distribution.get_license()
        if license == "UNKNOWN":
            classifiers = self.distribution.get_classifiers()
            for classifier in classifiers:
                values = classifier.split(" :: ")
                if values[0] == "License":
                    license = values[-1]
        license.replace("GPL ", "GPLv").strip()
        spec_file.extend(["License:\t" + license, "Group:\t\t" + self.group])
        if self.distribution.get_url() != "UNKNOWN":
            spec_file.append("Url:\t\t" + self.distribution.get_url())

        doc_names = [
            "README",
            "CHANGES",
            "ChangeLog",
            "NEWS",
            "THANKS",
            "HISTORY",
            "AUTHORS",
            "BUGS",
            "ReleaseNotes",
            "DISCLAIMER",
            "TODO",
            "TROUBLESHOOTING",
            "IDEAS",
            "HACKING",
            "WISHLIST",
            "CREDITS",
            "PROJECTS",
            "LEGAL",
            "KNOWN_BUGS",
            "MISSING_FEATURES",
            "FAQ",
            "ANNOUNCE",
            "FEATURES",
            "WHATSNEW",
        ]
        license_names = ["LICENSE", "COPYRIGHT", "COPYING"]
        common_licenses = glob("/usr/share/common-licenses/*")
        for i in range(len(common_licenses)):
            common_licenses[i] = os.path.basename(common_licenses[i])
        doc_names.extend(license_names)
        doc_suffixes = (".doc", ".htm", ".txt", ".pdf", ".odt")

        self.doc_files = []
        all_files = []
        if self.distribution.data_files:
            all_files.extend(self.distribution.data_files)
        if manifest:
            all_files.extend(manifest)
        if all_files:
            for data_file in all_files:
                done = False
                for doc_name in doc_names:
                    if doc_name.lower() in data_file.lower():
                        if doc_name in license_names and license in common_licenses:
                            done = True
                            break
                        self.doc_files.append(data_file)
                        done = True
                        break
                if done:
                    continue
                for doc_suffix in doc_suffixes:
                    ext = os.path.splitext(data_file.lower())[1]
                    if ext.lower().startswith(doc_suffix.lower()):
                        self.doc_files.append(data_file)
                        break
        if not self.force_arch:
            # noarch if no extension modules
            if not self.distribution.has_ext_modules():
                spec_file.append("BuildArch:\tnoarch")
        else:
            spec_file.append("BuildArch:\t%s" % self.force_arch)

        for field in ("Provides", "Requires", "Conflicts", "Obsoletes"):
            val = getattr(self, string.lower(field))
            if type(val) is ListType:
                spec_file.append("%s: %s" % (field, string.join(val)))
            elif val is not None:
                spec_file.append("%s: %s" % (field, val))

        build_requires = []
        if self.distribution.has_ext_modules():
            build_requires.append("python-devel")
        # Ugly, but should mostly work... :p
        if "setuptools" in str(self.distribution.__dict__) or "setuptools" in str(sdist.__dict__):
            build_requires.append("python-setuptools")
        if build_requires:
            spec_file.append("BuildRequires:\t" + string.join(build_requires))

        if self.build_requires:
            spec_file.append("BuildRequires:\t" + string.join(self.build_requires))

        spec_file.extend(["", "%description", self.distribution.get_long_description().strip()])

        # insert contents of files

        # XXX this is kind of misleading: user-supplied options are files
        # that we open and interpolate into the spec file, but the defaults
        # are just text that we drop in as-is.  Hmmm.

        if "test_suite" in self.distribution.__dict__ and self.distribution.test_suite:
            verify_script = "python setup.py test"
        else:
            verify_script = None

        script_options = [
            ("prep", "prep_script", "%setup -q -n %{oname}-%{version}"),
            ("build", "build_script", "python setup.py build"),
            ("install", "install_script", ("python setup.py install " "--root=%{buildroot}")),
            ("check", "verify_script", verify_script),
            ("pre", "pre_install", None),
            ("post", "post_install", None),
            ("preun", "pre_uninstall", None),
            ("postun", "post_uninstall", None),
        ]

        for (rpm_opt, attr, default) in script_options:
            # Insert contents of file referred to, if no file is referred to
            # use 'default' as contents of script
            val = getattr(self, attr)
            if val or default:
                spec_file.extend(["", "%" + rpm_opt])
                if val:
                    spec_file.extend(string.split(open(val, "r").read(), "\n"))
                else:
                    spec_file.append(default)

        # files section
        spec_file.extend(["", "%files"])
        for doc_file in self.doc_files:
            spec_file.append("%doc " + doc_file)

        if self.distribution.has_ext_modules():
            site_pkgs = "%{py_platsitedir}"
        else:
            site_pkgs = "%{py_puresitedir}"
        if self.distribution.has_scripts():
            for script in self.distribution.scripts:
                if type(script) == StringType:
                    spec_file.append(os.path.join("%{_bindir}", os.path.basename(script)))
        site_pkgs_files = []
        if self.distribution.data_files:
            for data_file in self.distribution.data_files:
                site_pkgs_files.append(os.path.join(site_pkgs, data_file))
        if "entry_points" in self.distribution.__dict__ and self.distribution.entry_points:
            if type(self.distribution.entry_points) is DictType:
                for entry_points in self.distribution.entry_points:
                    for entry_point in self.distribution.entry_points[entry_points]:
                        site_pkgs_files.append(os.path.join("%{_bindir}", os.path.basename(entry_point.split("=")[0])))
        if "py_modules" in self.distribution.__dict__ and self.distribution.py_modules:
            for py_module in self.distribution.py_modules:
                py_module = py_module.replace(".", os.path.sep)
                site_pkgs_files.append(os.path.join(site_pkgs, py_module + ".py*"))
        if "packages" in self.distribution.__dict__ and self.distribution.packages:
            for package in self.distribution.packages:
                package = package.replace(".", os.path.sep)
                # spec_file.append('%dir ' + os.path.join(site_pkgs, package))
                site_pkgs_files.append(os.path.join(site_pkgs, package, "*.py*"))
        if self.distribution.has_ext_modules():
            for ext_module in self.distribution.ext_modules:
                ext_module = ext_module.name.replace(".", os.path.sep)
                site_pkgs_files.append(
                    os.path.join(site_pkgs, ext_module + get_config_var("SHLIB_EXT").replace('"', ""))
                )

        site_pkgs_files.sort()
        for f in site_pkgs_files:
            spec_file.append(f)

        spec_file.append(os.path.join(site_pkgs, name.replace("-", "_") + "*.egg-info"))

        packager = rpm.expandMacro("%packager")

        spec_file.extend(
            ["", "%changelog", "* Thu Oct 21 2010 %s %s-%s" % (packager, version, release), "- Initial release"]
        )
        return spec_file