X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=bindings%2Fpython%2Fsetup.py;h=35b113abc4b7febade3ea5db5b2e229478b79f2a;hp=e716fc852a38fa60ec3137f29ccbb2d4e8cb7862;hb=5a3e34285da1544941fd314079f05a1715fc3de3;hpb=f0f1d90d9c88d9369a8441618d348ce8aedf974b diff --git a/bindings/python/setup.py b/bindings/python/setup.py index e716fc85..35b113ab 100644 --- a/bindings/python/setup.py +++ b/bindings/python/setup.py @@ -18,9 +18,14 @@ ## from setuptools import setup, find_packages, Extension +from distutils.command.build_py import build_py as _build_py +from distutils.command.build_ext import build_ext as _build_ext +import numpy as np import subprocess import os +srcdir = os.path.split(__file__)[0] + sr_includes, sr_lib_dirs, sr_libs, (sr_version,) = [ subprocess.check_output( ["pkg-config", option, "glib-2.0", "glibmm-2.4", "pygobject-3.0"] @@ -28,24 +33,57 @@ sr_includes, sr_lib_dirs, sr_libs, (sr_version,) = [ for option in ("--cflags-only-I", "--libs-only-L", "--libs-only-l", "--modversion")] -includes = ['../../include', '../cxx/include'] + [i[2:] for i in sr_includes] +includes = ['../../include', '../cxx/include'] +includes += [os.path.join(srcdir, path) for path in includes] +includes += ['../..'] +includes += [i[2:] for i in sr_includes] +includes += [np.get_include(), ] libdirs = ['../../.libs', '../cxx/.libs'] + [l[2:] for l in sr_lib_dirs] -libs = [l[2:] for l in sr_libs] + ['sigrokxx'] +libs = [l[2:] for l in sr_libs] + ['sigrokcxx'] + +def vpath(file): + vfile = os.path.join(srcdir, file) + return vfile if os.path.exists(vfile) else file + +def unvpath(file): + return os.path.relpath(file, srcdir) if file.startswith(srcdir) else file + +class build_py(_build_py): + def find_package_modules(self, package, pkg_dir): + mods = _build_py.find_package_modules(self, package, pkg_dir) + vmods = _build_py.find_package_modules(self, package, vpath(pkg_dir)) + mods.extend([mod for mod in vmods if mod not in mods]) + return mods + def check_package(self, package, package_dir): + return _build_py.check_package(self, package, vpath(package_dir)) + +class build_ext(_build_ext): + def spawn (self, cmd): + cmd[1:-1] = [arg if arg.startswith('-') else unvpath(arg) for arg in + cmd[1:-1]] + _build_ext.spawn(self, cmd) + def swig_sources (self, sources, extension): + return [unvpath(src) for src in + _build_ext.swig_sources(self, sources, extension)] setup( name = 'libsigrok', namespace_packages = ['sigrok'], - packages = find_packages(), + packages = find_packages(srcdir), version = sr_version, description = "libsigrok API wrapper", + zip_safe = False, + script_name = __file__, ext_modules = [ Extension('sigrok.core._classes', - sources = ['sigrok/core/classes.i'], - swig_opts = ['-c++', '-threads'] + + sources = [vpath('sigrok/core/classes.i')], + swig_opts = ['-c++', '-threads', '-Isigrok/core', + '-I..', '-I%s' % os.path.join(srcdir, '..')] + ['-I%s' % i for i in includes], - extra_compile_args = ['-std=c++11'], + extra_compile_args = ['-std=c++11', '-Wno-uninitialized'], include_dirs = includes, library_dirs = libdirs, libraries = libs) ], + cmdclass = {'build_py': build_py, 'build_ext': build_ext}, )