[Distutils] setup.py build_ext --rpath behaviour
Floris Bruynooghe
floris.bruynooghe at gmail.com
Sat May 2 23:13:56 CEST 2009
On Thu, Apr 16, 2009 at 11:42:28AM +0100, Floris Bruynooghe wrote:
> Now when using the --rpath option to the build_ext command
> distutils.unixcompiler.UnixCCompiler.runtime_library_dir_option() will
> use some heuristics to figure out which option to pass to compiler to
> get the runpath in (i.e. "-R" or "-Wl,-R" etc). I'm going to argue
> that this needs to be extened pass in -Wl,--enable-new-dtags,-R if the
> GNU linker is used so that the newer and better RUNPATH gets put into
> the shared objects all the time. (I don't yet know how to detect the
> GNU linker but would like a consensus on the desired behaviour before
> looking into this).
The patch for this is attached to http://bugs.python.org/issue5900
Feel free to give feedback/criticism if you care about this.
> The second issue with build_ext --rpath is on AIX. Again some
> background on AIX shared objects, AIX is not SysV-like and uses the
> XCOFF binary format instead of ELF. Therefore they don't have a RPATH
> or RUNPATH, but they do have a think called LIBPATH which does
> something similar. The difference between XCOFF's LIBPATH and ELF's
> RUNPATH is that AIX's runtime linker does not have a default search
> path, hence the full search path needs to be encoded into the LIBPATH
> of the shared object.
>
> Now I would propose for build_ext --rpath to encode the LIBPATH when
> used on AIX since that is the correct thing to do IMHO.
I was kind of hoping someone would pick up on this and at least argue
about how it is not a good thing to try and convert an option for one
concept (RPATH/RUNPATH) onto another one that isn't quite the same
(LIBPATH). The side-effects are just not as clearly defined and open
to interpretation.
Anyway, having given this some more tought I now think it's not a good
thing. Instead I'm going to make a patch that raises and exception if
the --rpath option is used on AIX as it's behaviour is undefined[0]. If
a user does want -blibpath:/some/path to be passed on to the linker
they can still use LDFLAGS.
Other opinions would be appreciated.
Regards
Floris
[0] The linker will actually simply ignore it lurring the user into
false security. Only when -bsvr4 is passed to the linker too will
it be treated identical as -blibpath, but this is again the same
fuzzy mapping as a SysV user will not be used to passing in the
default search path to -R/--rpath and hence probably not end up
with what they wanted too.
--
Debian GNU/Linux -- The Power of Freedom
www.debian.org | www.gnu.org | www.kernel.org
More information about the Distutils-SIG
mailing list