[New-bugs-announce] [issue15018] Incomplete Python LDFLAGS and CPPFLAGS used for extension modules on posix

Marcus von Appen report at bugs.python.org
Wed Jun 6 14:51:43 CEST 2012

New submission from Marcus von Appen <mva at sysfault.org>:

If CPython is built and installed with additional CPPFLAGS and/or LDFLAGS on a posix platform, those flags are not passed to C extension modules, leaving users (in the worst case) lost without the ability to build and install C extension modules, if the flags are important for detecting include files or linking.


* Python shall be built with GNU pthreads (--with-pth)
* The pth libs are not installed in any default location, CPP and LD know about, but somewhere else (e.g. /usr/local/lib/pth/ and /usr/local/include/pth/)
* Appropriate CPPFLAGS="-I/usr/local/include/pth" and LDFLAGS="-L/usr/local/lib/pth" are defined in the environment for the build.

Python gets built and installed. Result in /wherever/pythonX.X/config/Makefile:

BASECFLAGS= -fno-strict-aliasing
CPPFLAGS=   -I. -IInclude -I$(srcdir)/Include -I/usr/local/include/pth
LDFLAGS=    -L/usr/local/lib/pth

Invocation of python-config --cflags:

# python-config --cflags 
-I/whereever/include/pythonX.X -I/whereever/include/pythonX.X -fno-strict-aliasing -pipe 

Invocation of python-config --ldflags:

# python-config --ldflags 
-L/whereever/lib/pythonX.X/config -lpth -lutil -lm -lpythonX.X

So far, so problematic. Since Python.h incorporates pth.h, compiling something without defining the necessary CPPFLAGS manually will fail. Same for linking.

The issue is *not* limited to --with-pth, but to any CPPFLAGS/LDFLAGS settings that are necessary to get CPython to work on the target platform. One might argue that CPPFLAGS should go to CFLAGS, but that contradicts the purpose of CPPFLAGS and CFLAGS.

At least for posix-alike platforms (those for which _init_posix() is called in distutils/sysconfig.py), it is necessary that both, python-config as well as the distutils internals add the appropriate CPPFLAGS.

It might be argued that one should use CFLAGS instead of CPPFLAGS for such important additional flags, but what shall be done with LDFLAGS then?

assignee: eric.araujo
components: Build, Distutils, Extension Modules
messages: 162405
nosy: eric.araujo, marcusva, tarek
priority: normal
severity: normal
status: open
title: Incomplete Python LDFLAGS and CPPFLAGS used for extension modules on posix
type: behavior
versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2

Python tracker <report at bugs.python.org>

More information about the New-bugs-announce mailing list