setup.py: locate libsepol.a

Use distutils' features to find libsepol.a.  Also sensitive to SEPOL env
variable for specifying the full path to libsepol.a.
This commit is contained in:
Chris PeBenito 2015-06-15 10:31:12 -04:00
parent c271d94c5d
commit febc2af594

View File

@ -5,9 +5,11 @@ from setuptools import setup
import distutils.log as log import distutils.log as log
from distutils.core import Extension from distutils.core import Extension
from distutils.cmd import Command from distutils.cmd import Command
from distutils.unixccompiler import UnixCCompiler
from setuptools.command.build_ext import build_ext from setuptools.command.build_ext import build_ext
import subprocess import subprocess
import sys import sys
import os
from os.path import join from os.path import join
@ -54,6 +56,17 @@ class BuildExtCommand(build_ext):
self.run_command('build_lex') self.run_command('build_lex')
build_ext.run(self) build_ext.run(self)
try:
static_sepol = [os.environ['SEPOL']]
except KeyError:
# try to find libsepol.a. The find_library_file function
# chooses dynamic libraries over static ones, so
# this assumes that the static lib is in the same directory
# as the dynamic lib.
dynamic_sepol = UnixCCompiler().find_library_file(['/usr/lib64', '/usr/lib'], 'sepol')
static_sepol = dynamic_sepol.replace(".so", ".a")
ext_py_mods = [Extension('setools.policyrep._qpol', ext_py_mods = [Extension('setools.policyrep._qpol',
['setools/policyrep/qpol.i', ['setools/policyrep/qpol.i',
'libqpol/avrule_query.c', 'libqpol/avrule_query.c',
@ -114,8 +127,8 @@ ext_py_mods = [Extension('setools.policyrep._qpol',
'-Wno-cast-qual', # libsepol/libselinux uses const-to-nonconst casts '-Wno-cast-qual', # libsepol/libselinux uses const-to-nonconst casts
'-Wno-shadow', # SWIG generates shadow variables '-Wno-shadow', # SWIG generates shadow variables
'-fno-exceptions'], '-fno-exceptions'],
extra_link_args=['-Wl,--version-script=libqpol/libqpol.map', extra_objects=[static_sepol],
'/usr/lib/libsepol.a'], extra_link_args=['-Wl,--version-script=libqpol/libqpol.map'],
swig_opts=['-Ilibqpol/include'])] swig_opts=['-Ilibqpol/include'])]
setup(name='setools', setup(name='setools',