|
|
|
|
|
|
|
import glob |
|
import os |
|
import shutil |
|
import sys |
|
|
|
from setuptools import setup, Extension |
|
from setuptools.command.install import install |
|
cmdclass = {} |
|
|
|
try: |
|
from DistUtilsExtra.command import build_extra, build_i18n |
|
from DistUtilsExtra.auto import clean_build_tree |
|
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 |
|
|
|
try: |
|
from sphinx.setup_command import BuildDoc |
|
except ImportError: |
|
print('W: [python%s] Sphinx import error.' % sys.version[:3]) |
|
else: |
|
cmdclass['build_sphinx'] = BuildDoc |
|
|
|
|
|
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: |
|
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 |
|
|
|
|
|
|
|
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']) |
|
|
|
|
|
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']) |
|
|
|
|
|
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, "r") |
|
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="[email protected]", |
|
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', |
|
) |
|
|