libselinux: Build selinux python package using setup.py

Originally, setup.py built selinux as a module. It caused problems with SWIG
generated python wrapper which used wrong path for importing binary module.

selinux is built as a python package now.

Fixes:
>>> import selinux
Traceback (most recent call last):
  File "/usr/lib64/python3.7/site-packages/selinux/__init__.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named '_selinux'
This commit is contained in:
Petr Lautrbach 2019-06-29 22:48:24 +02:00
parent 3db2b751b1
commit 7fc63da414
2 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,86 @@
From 8270e433f73fe295b6b938d6bbb9e400f9e6ad4c Mon Sep 17 00:00:00 2001
From: Petr Lautrbach <plautrba@redhat.com>
Date: Sat, 29 Jun 2019 22:37:29 +0200
Subject: [PATCH 6/6] libselinux: Build selinux python package using setup.py
Originally, setup.py built selinux as a module. It caused problems with SWIG
generated python wrapper which used wrong path for importing binary module.
selinux is built as a python package now.
Fixes:
>>> import selinux
Traceback (most recent call last):
File "/usr/lib64/python3.7/site-packages/selinux/__init__.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named '_selinux'
Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
---
libselinux/src/Makefile | 1 -
libselinux/src/setup.py | 21 ++++++++++++++++++++-
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/libselinux/src/Makefile b/libselinux/src/Makefile
index f64f23a8..db07dcb5 100644
--- a/libselinux/src/Makefile
+++ b/libselinux/src/Makefile
@@ -171,7 +171,6 @@ install: all
install-pywrap: pywrap
$(PYTHON) setup.py install --prefix=$(PREFIX) `test -n "$(DESTDIR)" && echo --root $(DESTDIR)`
- install -m 644 selinux.py $(DESTDIR)$(PYTHONLIBDIR)/selinux/__init__.py
install-rubywrap: rubywrap
test -d $(DESTDIR)$(RUBYINSTALL) || install -m 755 -d $(DESTDIR)$(RUBYINSTALL)
diff --git a/libselinux/src/setup.py b/libselinux/src/setup.py
index b12e7869..1419aaa3 100644
--- a/libselinux/src/setup.py
+++ b/libselinux/src/setup.py
@@ -1,13 +1,29 @@
#!/usr/bin/python3
from distutils.core import Extension, setup
+from distutils.command.build_py import build_py
+
+import os
+import os.path
+
+class pre_build_py(build_py):
+ def run(self):
+
+ # create formal selinux package from selinux.py module
+ if os.path.isfile('selinux.py'):
+ if not os.path.isdir('selinux'):
+ os.mkdir('selinux')
+ os.rename('selinux.py', 'selinux/__init__py')
+
+ build_py.run(self)
setup(
name="selinux",
version="2.9",
- description="SELinux python 3 bindings",
+ description="SELinux python bindings",
author="SELinux Project",
author_email="selinux@vger.kernel.org",
+ packages=["selinux"],
ext_modules=[
Extension('selinux._selinux',
sources=['selinuxswig_python.i'],
@@ -21,4 +37,7 @@ setup(
libraries=['selinux'],
extra_link_args=['-l:libsepol.a'])
],
+ cmdclass={
+ 'build_py': pre_build_py
+ },
)
--
2.22.0

View File

@ -20,6 +20,7 @@ Patch0002: 0002-Verify-context-input-to-funtions-to-make-sure-the-co.patch
Patch0003: 0003-libselinux-Allow-to-override-OVERRIDE_GETTID-from-co.patch
Patch0004: 0004-libselinux-Use-Python-distutils-to-install-SELinux-p.patch
Patch0005: 0005-libselinux-Do-not-use-SWIG_CFLAGS-when-Python-bindin.patch
Patch0006: 0006-libselinux-Build-selinux-python-package-using-setup..patch
BuildRequires: gcc
BuildRequires: python2 python2-devel ruby-devel ruby libsepol-static >= %{libsepolver} swig pcre2-devel xz-devel
BuildRequires: python3 python3-devel