How can I add pkg-config to the following setup.py
(for example if I want to add glib-2.0
)
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
wrapper = Extension(
name="wrapper",
sources=["wrapper.pyx"],
libraries=["library"],
library_dirs=["builddir/lib"],
include_dirs=["lib"]
)
setup(
name="wrapper",
ext_modules=cythonize([wrapper])
)
I can do it as follows, but I don't want to use paths (/usr/lib/x86_64-linux-gnu/
and /usr/include/glib-2.0
) and make it portable
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
wrapper = Extension(
name="wrapper",
sources=["wrapper.pyx"],
libraries=["library"],
library_dirs=["builddir/lib", "/usr/lib/x86_64-linux-gnu/"],
include_dirs=["lib", "/usr/include/glib-2.0"]
)
setup(
name="wrapper",
ext_modules=cythonize([wrapper])
)
Getting some inspiration from this recipe, I've used the following setup file to find the proper paths for GSL.
import subprocess
from setuptools import setup, Extension
from Cython.Build import cythonize
def pkgconfig(package, kw):
flag_map = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'}
output = subprocess.getoutput(
'pkg-config --cflags --libs {}'.format(package))
for token in output.strip().split():
kw.setdefault(flag_map.get(token[:2]), []).append(token[2:])
return kw
example_src = ['src/example.c', 'example/example.pyx']
example_inc = ['include']
extension_kwargs = {
'sources': example_src,
'include_dirs': example_inc,
}
extension_kwargs = pkgconfig('gsl', extension_kwargs)
example_ext = Extension('example.example', **extension_kwargs)
setup(name="example",
ext_modules=cythonize([example_ext], annotate=True),
packages=['example']
)
You could use the pkgconfig
function to find the glib flags by passing glib-2.0
as the package
argument.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With