diff options
Diffstat (limited to 'setup.py')
-rw-r--r-- | setup.py | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..522de24 --- /dev/null +++ b/setup.py @@ -0,0 +1,159 @@ +#!/usr/bin/python3 +# Builds on python2.X and python3 +# $Id: setup.py,v 1.2 2002/01/08 07:13:21 jgg Exp $ +import glob +import os +import shutil +import subprocess +import sys + +from setuptools import Extension, setup +from setuptools.command.install import install + +cmdclass = {} + +try: + from DistUtilsExtra.auto import clean_build_tree + from DistUtilsExtra.command import build_extra, build_i18n +except ImportError: + print("W: [python%s] DistUtilsExtra import error." % sys.version[:3]) +else: + cmdclass["build"] = build_extra.build_extra + cmdclass["build_i18n"] = build_i18n.build_i18n + cmdclass["clean"] = clean_build_tree + + +class InstallTypeinfo(install): + def run(self): + install.run(self) + for pyi in glob.glob("typehinting/*.pyi"): + stubs = os.path.basename(pyi).split(".")[0] + "-stubs" + stubs = os.path.join(self.install_purelib, stubs) + if not os.path.exists(stubs): + os.makedirs(stubs) + shutil.copy(pyi, os.path.join(stubs, "__init__.pyi")) + + +cmdclass["install"] = InstallTypeinfo + + +def get_version(): + """Get a PEP 0440 compatible version string""" + version = os.environ.get("DEBVER") + if not version: + proc = subprocess.Popen( + ["dpkg-parsechangelog", "-SVersion"], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + out, _ = proc.communicate() + if proc.returncode == 0: + version = out.decode("utf-8") + + version = version.strip() + + if not version: + return version + + version = version.replace("~alpha", ".a") + version = version.replace("~beta", ".b") + version = version.replace("~rc", ".rc") + version = version.replace("~exp", ".dev") + version = version.replace("ubuntu", "+ubuntu") + version = version.replace("tanglu", "+tanglu") + version = version.split("build")[0] + + return version + + +# The apt_pkg module. +files = [ + "apt_pkgmodule.cc", + "acquire.cc", + "cache.cc", + "cdrom.cc", + "configuration.cc", + "depcache.cc", + "generic.cc", + "hashes.cc", + "hashstring.cc", + "indexfile.cc", + "metaindex.cc", + "pkgmanager.cc", + "pkgrecords.cc", + "pkgsrcrecords.cc", + "policy.cc", + "progress.cc", + "sourcelist.cc", + "string.cc", + "tag.cc", + "lock.cc", + "acquire-item.cc", + "python-apt-helpers.cc", + "cachegroup.cc", + "orderlist.cc", + "hashstringlist.cc", +] +files = sorted(["python/" + fname for fname in files], key=lambda s: s[:-3]) +apt_pkg = Extension( + "apt_pkg", + files, + libraries=["apt-pkg"], + extra_compile_args=[ + "-std=c++11", + "-Wno-write-strings", + "-DAPT_8_CLEANER_HEADERS", + "-DAPT_9_CLEANER_HEADERS", + "-DAPT_10_CLEANER_HEADERS", + "-DPY_SSIZE_T_CLEAN", + ], +) + +# The apt_inst module +files = [ + "python/apt_instmodule.cc", + "python/generic.cc", + "python/arfile.cc", + "python/tarfile.cc", +] +apt_inst = Extension( + "apt_inst", + files, + libraries=["apt-pkg"], + extra_compile_args=["-std=c++11", "-Wno-write-strings", "-DPY_SSIZE_T_CLEAN"], +) + +# Replace the leading _ that is used in the templates for translation +if len(sys.argv) > 1 and sys.argv[1] == "build": + if not os.path.exists("build/data/templates/"): + os.makedirs("build/data/templates") + for template in glob.glob("data/templates/*.info.in"): + source = open(template) + build = open("build/" + template[:-3], "w") + for line in source: + build.write(line.lstrip("_")) + source.close() + build.close() + for template in glob.glob("data/templates/*.mirrors"): + shutil.copy(template, os.path.join("build", template)) + + +setup( + name="python-apt", + description="Python bindings for APT", + version=get_version(), + author="APT Development Team", + author_email="deity@lists.debian.org", + ext_modules=[apt_pkg, apt_inst], + packages=["apt", "apt.progress", "aptsources"], + package_data={ + "apt": ["*.pyi", "py.typed"], + }, + data_files=[ + ("share/python-apt/templates", glob.glob("build/data/templates/*.info")), + ("share/python-apt/templates", glob.glob("data/templates/*.mirrors")), + ], + cmdclass=cmdclass, + license="GNU GPL", + platforms="posix", +) |