Skip to content

Commit

Permalink
Merge pull request #131 from pebenito/setup-to-pyproject
Browse files Browse the repository at this point in the history
setup.py: Move static definitions to pyproject.toml.
  • Loading branch information
pebenito authored Apr 26, 2024
2 parents f0acf98 + 5718140 commit 42aad09
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 62 deletions.
65 changes: 64 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,70 @@
[build-system]
requires = ["setuptools", "Cython>=0.27"]
# setup also requires libsepol and libselinux
# C libraries and headers to compile.
requires = ["setuptools", "Cython>=0.29.14"]
build-backend = "setuptools.build_meta"

[project]
name = "setools"
version = "4.6.0.dev"
description="SELinux policy analysis tools."
authors = [{name = "Chris PeBenito", email="[email protected]"}]
readme = {file = "README.md", content-type = "text/markdown"}
urls.Homepage = "https://github.com/SELinuxProject/setools"
urls.Repository = "https://github.com/SELinuxProject/setools.git"
urls."Bug Tracker" = "https://github.com/SELinuxProject/setools/issues"

keywords = ["SELinux",
"SETools",
"policy",
"analysis",
"seinfo",
"sesearch",
"sediff",
"sedta",
"seinfoflow",
"apol"]

# https://pypi.org/classifiers/
classifiers = ["Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Environment :: X11 Applications :: Qt",
"Intended Audience :: Information Technology",
"License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
"License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)",
"Programming Language :: Cython",
"Topic :: Security",
"Topic :: Utilities",
"Typing :: Typed"]

requires-python=">=3.10"
# also requires libsepol.so and libselinux.so.
dependencies = ["setuptools"]

optional-dependencies.analysis = ["networkx>=2.6",
"pygraphviz"]
optional-dependencies.gui = ["PyQt6"]
optional-dependencies.test = ["tox"]

[tool.setuptools]
include-package-data = false
script-files = ["apol",
"sediff",
"seinfo",
"seinfoflow",
"sesearch",
"sedta",
"sechecker"]

[tool.setuptools.packages.find]
include = ["setools*"]

[tool.setuptools.package-data]
"*" = ["*.css", "*.html", "perm_map", "py.typed"]

[tool.setuptools.exclude-package-data]
"*" = ["*.c", "*.pyi", "*.pyx"]


#
# Coverage config
Expand Down
92 changes: 31 additions & 61 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,34 @@
#!/usr/bin/env python3

import glob
from setuptools import Extension, setup
import sys
import os
from os.path import join
from contextlib import suppress
import glob
from pathlib import Path

from setuptools import Extension, setup
from Cython.Build import cythonize
import os.path


# Library linkage
lib_dirs = ['.', '/usr/lib64', '/usr/lib', '/usr/local/lib']
include_dirs = []
lib_dirs: list[str] = ['.', '/usr/lib64', '/usr/lib', '/usr/local/lib']
include_dirs: list[str] = []

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")
userspace_src = os.getenv("USERSPACE_SRC", "")
if userspace_src:
userspace_path = Path(userspace_src)
include_dirs.insert(0, str(userspace_path / "libsepol/include"))
include_dirs.insert(1, str(userspace_path / "libselinux/include"))
lib_dirs.insert(0, str(userspace_path / "libsepol/src"))
lib_dirs.insert(1, str(userspace_path / "libselinux/src"))

if sys.platform.startswith('darwin'):
macros=[('DARWIN',1)]
else:
macros=[]
macros: list[tuple[str, str | int]] = [('DARWIN',1)] if sys.platform.startswith('darwin') else []

# Code coverage. Enable this to get coverage in the cython code.
enable_coverage = bool(os.environ.get("SETOOLS_COVERAGE", False))
enable_coverage = bool(os.getenv("SETOOLS_COVERAGE", ""))
if enable_coverage:
macros.append(("CYTHON_TRACE", 1))

cython_annotate = bool(os.environ.get("SETOOLS_ANNOTATE", False))
cython_annotate = bool(os.getenv("SETOOLS_ANNOTATE", ""))

ext_py_mods = [Extension('setools.policyrep', ['setools/policyrep.pyx'],
include_dirs=include_dirs,
Expand All @@ -53,53 +50,26 @@
'-Wwrite-strings',
'-fno-exceptions'])]

installed_data = [('share/man/man1', glob.glob("man/*.1"))]

linguas = ["ru"]

with suppress(KeyError):
linguas = os.environ["LINGUAS"].split(" ")
linguas: set[Path] = set(Path(p) for p in os.getenv("LINGUAS", "").split(" ") if p)
if not linguas:
linguas.add(Path("ru"))
linguas.add(Path("."))

base_source_path = Path("man") # below source root
base_target_path = Path("share/man") # below prefixdir, usually /usr or /usr/local
installed_data = list[tuple]()
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"))))
source_path = base_source_path / lang
if source_path.exists():
for i in range(1, 9):
installed_data.append((base_target_path / lang / f"man{i}",
glob.glob(str(source_path / f"*.{i}"))))

setup(name='setools',
version='4.6.0-dev',
description='SELinux policy analysis tools.',
author='Chris PeBenito',
author_email='[email protected]',
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']},
# see pyproject.toml for most package options.
setup(data_files=installed_data,
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=['setuptools'],
extras_require={
"analysis": ["networkx>=2.6", "pygraphviz"],
"test": "tox"
}
)
"linetrace": enable_coverage}))

0 comments on commit 42aad09

Please sign in to comment.