← Back to team overview

kicad-developers team mailing list archive

Re: RPATH issue on _pcbnew.so

 

I've confirmed that there is a wrong RPATH in the install. The issue is in pcbnew/CMakeFiles.txt#if( KICAD_SCRIPTING_MODULES ).

Rather than using the CMake install target script, _pcbnew.so is getting copied manually and then installed as a file.

On 25/02/18 10:37, Carsten Schoenert wrote:
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.




References