mirror of
https://github.com/SELinuxProject/setools
synced 2025-05-03 00:30:51 +00:00
106 lines
4.3 KiB
Python
106 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import glob
|
|
from setuptools import Extension, setup
|
|
import sys
|
|
import os
|
|
from os.path import join
|
|
from contextlib import suppress
|
|
from Cython.Build import cythonize
|
|
import os.path
|
|
|
|
|
|
# Library linkage
|
|
lib_dirs = ['.', '/usr/lib64', '/usr/lib', '/usr/local/lib']
|
|
include_dirs = []
|
|
|
|
with suppress(KeyError):
|
|
userspace_src = os.environ["USERSPACE_SRC"]
|
|
include_dirs.insert(0, userspace_src + "/libsepol/include")
|
|
include_dirs.insert(1, userspace_src + "/libselinux/include")
|
|
lib_dirs.insert(0, userspace_src + "/libsepol/src")
|
|
lib_dirs.insert(1, userspace_src + "/libselinux/src")
|
|
|
|
if sys.platform.startswith('darwin'):
|
|
macros=[('DARWIN',1)]
|
|
else:
|
|
macros=[]
|
|
|
|
# Code coverage. Enable this to get coverage in the cython code.
|
|
enable_coverage = bool(os.environ.get("SETOOLS_COVERAGE", False))
|
|
if enable_coverage:
|
|
macros.append(("CYTHON_TRACE", 1))
|
|
|
|
cython_annotate = bool(os.environ.get("SETOOLS_ANNOTATE", False))
|
|
|
|
ext_py_mods = [Extension('setools.policyrep', ['setools/policyrep.pyx'],
|
|
include_dirs=include_dirs,
|
|
libraries=['selinux', 'sepol'],
|
|
library_dirs=lib_dirs,
|
|
define_macros=macros,
|
|
extra_compile_args=['-Wextra',
|
|
'-Waggregate-return',
|
|
'-Wfloat-equal',
|
|
'-Wformat', '-Wformat=2',
|
|
'-Winit-self',
|
|
'-Wmissing-format-attribute',
|
|
'-Wmissing-include-dirs',
|
|
'-Wnested-externs',
|
|
'-Wold-style-definition',
|
|
'-Wpointer-arith',
|
|
'-Wstrict-prototypes',
|
|
'-Wunknown-pragmas',
|
|
'-Wwrite-strings',
|
|
'-fno-exceptions'])]
|
|
|
|
installed_data = [('share/man/man1', glob.glob("man/*.1"))]
|
|
|
|
linguas = ["ru"]
|
|
|
|
with suppress(KeyError):
|
|
linguas = os.environ["LINGUAS"].split(" ")
|
|
|
|
for lang in linguas:
|
|
if lang and os.path.exists(join("man", lang)):
|
|
installed_data.append((join('share/man', lang, 'man1'), glob.glob(join("man", lang, "*.1"))))
|
|
|
|
setup(name='setools',
|
|
version='4.5.1',
|
|
description='SELinux policy analysis tools.',
|
|
author='Chris PeBenito',
|
|
author_email='pebenito@ieee.org',
|
|
url='https://github.com/SELinuxProject/setools',
|
|
packages=['setools', 'setools.checker', 'setools.diff', 'setoolsgui', 'setoolsgui.widgets',
|
|
'setoolsgui.widgets.criteria', 'setoolsgui.widgets.details',
|
|
'setoolsgui.widgets.models', 'setoolsgui.widgets.views'],
|
|
scripts=['apol', 'sediff', 'seinfo', 'seinfoflow', 'sesearch', 'sedta', 'sechecker'],
|
|
data_files=installed_data,
|
|
package_data={'': ['*.css', '*.html'],
|
|
'setools': ['perm_map', 'policyrep.pyi', 'py.typed']},
|
|
ext_modules=cythonize(ext_py_mods, include_path=['setools/policyrep'],
|
|
annotate=cython_annotate,
|
|
compiler_directives={"language_level": 3,
|
|
"c_string_type": "str",
|
|
"c_string_encoding": "ascii",
|
|
"linetrace": enable_coverage}),
|
|
test_suite='tests',
|
|
license='GPLv2+, LGPLv2.1+',
|
|
classifiers=[
|
|
'Environment :: Console',
|
|
'Environment :: X11 Applications :: Qt',
|
|
'Intended Audience :: Information Technology',
|
|
'Topic :: Security',
|
|
'Topic :: Utilities',
|
|
],
|
|
keywords='SELinux SETools policy analysis tools seinfo sesearch sediff sedta seinfoflow apol',
|
|
python_requires='>=3.10',
|
|
# setup also requires libsepol and libselinux
|
|
# C libraries and headers to compile.
|
|
setup_requires=['setuptools', 'Cython>=0.29.14'],
|
|
install_requires=[],
|
|
extras_require={
|
|
"analysis": ["networkx>=2.6", "pygraphviz"],
|
|
"test": "tox"
|
|
}
|
|
)
|