← Back to team overview

kicad-developers team mailing list archive

Re: RPATH issue on _pcbnew.so

 

Hello Wayne,

Am 24.02.18 um 21:44 schrieb Wayne Stambaugh:
> Carsten,
> 
> On 02/24/2018 02:08 PM, Carsten Schoenert wrote:
>> Hi,
>>
>> I guess it's not intended that the library / shared object _pcbnew.so
>> build in pcbnew/ set up a RPATH based on the build directory?
> 
> This is the kicad python scripting shared object which should get 
> installed in the correct python library path.  CMake installs it in the 
> correct place on both my Debian and Ubuntu builds so I don't understand 
> what the issue is here.

the build and installation is just fine, the issue is that this file has
a RUNPATH set to folder there it was compiled. It should have *no* RUNPATH.

>>> root@i5:/# ldd build/kicad-5.0.0~rc0+dfsg1/debian/build/pcbnew/_pcbnew.so | grep build
>>> 	libkicad_3dsg.so.2.0.0 => /build/kicad-5.0.0~rc0+dfsg1/debian/build/3d-viewer/3d_cache/sg/libkicad_3dsg.so.2.0.0 (0x00007f8188148000)
>>
>> This causes that lintian (a big QS tool for Debian packaging) is writing
>> a error out on this. This package wouldn't be accepted from the FTP
>> master if I'd do a upload to NEW. And I need to upload to NEW as the
>> package structure will change.
> 
> This is the build path not the install path.

Partially correct. :-)
In Debian the build folder is created by '/build/$PACKAGE_$VERSION', the
out of tree build is typically done within the folder debian/build so
the root for building all is

   /build/kicad-5.0.0~rc0+dfsg1/debian/build/...

So yes, the the first line from my paste is the build path, the second
line is just the output of 'ldd' with a grepped 'build' as argument.
_pcbnew.so is looking for libkicad_3dsg.so.2.0.0 in the path which is
shown there. And this is obviously wrong.

>  By default on linux builds the shared object gets installed in 
> /usr/local/lib/libkicad_3dsg.so.2.0.0.  This is the 3D viewer plugin so 
> I don't know if this the correct convention for plugins but as it is a 
> shared object, it will get recognized by the os and load properly.  If 
> plugins should be installed in a different path, please let me know what 
> that path should be and we can change the cmake install path for this 
> shared object.

The installation of this private library is no problem, kicad does here
exactly what the standard folder is if the INSTALL_PATH isn't given. No
need something to change here.

...
>> I don't know what has to be changed here so I'd like to ask someone who
>> is more experienced with the cmake world.
>> I could change this with chrpath but it's better if upstream would fix
>> this. Surprisingly the library _pcbnew.kiface hasn't this issue so I'm a
>> bit clueless.
> 
> I don't know that anything changed that I am aware of with _pcbnew.so. 
> The 3D viewer plugin was introduced during this development cycle but I 
> have been successfully building and installing from source on Debian 
> during the entire current development cycle so I don't have any good 
> answers for you.

I have really no knowledge about cmake, but I can see some information
of setting the RUNPATH to an empty string while installing binaries or
shared objects in opposite of this Python library.

> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/share/kicad/scripting/kicad_pyshell/__init__.py
> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/python2.7/dist-packages/_pcbnew.so  <------- no modification here
> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/bin/pl_editor
> ....> -- Installing:
/build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/bin/_pcb_calculator.kiface
> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_idf.so
> -- Set runtime path of "/build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_idf.so" to ""  <------
> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_vrml.so
> -- Set runtime path of "/build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_vrml.so" to ""  <------
> -- Installing: /build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_oce.so
> -- Set runtime path of "/build/kicad-5.0.0~rc0+dfsg1/debian/tmp/usr/lib/x86_64-linux-gnu/kicad/plugins/3d/libs3d_plugin_oce.so" to ""  <------

It's probably just a small thing that is needed to add $SOMETHERE to the
installation of this Python library.

-- 
Regards
Carsten Schoenert


Follow ups

References