File: //home/arjun/python-apt/setup.py
#!/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",
)