summaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py159
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",
+)