← Back to team overview

kicad-developers team mailing list archive

Re: CMake doesn't find the right PythonLibs on recent Ubuntus, workaround included

 

On 4/12/2013 2:59 PM, Adam Wolf wrote:
Hi Wayne,

In order to get a "legal" Debian/Ubuntu package, you have to do a
bunch of trickery anyway, so I'm not concerned about this at all from
a packaging point of view.  (For example, you need to run pyversions
to find out which python versions are around, and then iterate over
that, creating a variety of binary extensions, and then tell the
package about them in a special way.  Then, when you install it, it'll
put the files in pyshared, and symlink the right things into the
dist-packages for your python version.)  I'm mostly concerned with
helping out someone else who runs into this on their system when
building from source.  I don't think it's just my machine.

On the system that I found this issue on, python -V returns python
2.7.3, and I dont have a custom PYTHONPATH.  I think CMake is finding
the proper PythonInterp, but not the proper PythonLibs.

Hmm! This seems suspicious to me. If CMake FindPythonInter is finding the correct version of python, the python library and include paths "should" be extracted from the interpreter found. If not, something has gone horribly wrong. If I get a chance, I'll take a look at it.



When I override the PythonLibs location, like in my previous email,
the built kicad's scripting works fine, without doing any mangling of
any paths.  I just type kicad in a terminal, and it works, and I can
cd into build/pcbnew and do a python, import pcbnew, and it works.

I'm 99% sure this isn't a regression on CMake's part, just that Ubuntu
is now doing something that CMake doesn't expect with symlinks and
other tomfoolery with its Python.  We'll see how my afternoon goes.
If I investigate this anymore, I have a feeling I'll just return with
a CMake patch. :)

Adam Wolf
Wayne and Layne, LLC

On Fri, Apr 12, 2013 at 1:46 PM, Wayne Stambaugh <stambaughw@xxxxxxxxxxx> wrote:
On 4/12/2013 8:28 AM, Adam Wolf wrote:

As part of setting up the build server, I've been taking a harder look
at the Ubuntu packages.

CMake isn't detecting the right Python libs on some systems, including
Ubuntu 12.10.  I'm not sure if the issue is in CMake, or Ubuntu, or
Python, or whatever else, but there's a simple enough workaround...

If you get something like this when you cmake for kicad:

-- Found PythonInterp: /usr/bin/python (found version "2.7.3")
-- Check for installed Python Interpreter -- found
-- Python module install path: /usr/lib/python2.7/dist-packages
-- Found PythonLibs: /usr/lib/python3.2/config/libpython3.2.so (found
version "2.7.3")

Your build will probably die when it reaches anything SWIGgy, due to
CMake detecting /usr/lib/python3.2/config/libpython3.2.so as matching
the version of your interpreter, which is 2.7.3.  You can point cmake
to the appropriate PythonLibs, like the following:

cmake ../ -DKICAD_TESTING_VERSION=ON -DKICAD_SCRIPTING=ON
-DKICAD_SCRIPTING_MODULES=ON -DKICAD_SCRIPTING_WXPYTHON=ON
-DCMAKE_BUILD_TYPE=DEBUG
-DPYTHON_LIBRARY=/usr/lib/python2.7/config/libpython2.7.so

This appears to fix it.  I can make builds and use the Python library.

This has been documented by some other folks, with a different
workaround as well.  If you add a minimum version number requirement,
like find_package(PythonLibs 2.6) it seems to work on Ubuntu as well.
With all the cmake balls we're juggling, it's probably safest to just
override it on the command line until it gets fixed upstream.

References:
http://public.kitware.com/Bug/view.php?id=13794
http://www.ruby-forum.com/topic/4151421

Adam Wolf
Wayne and Layne, LLC


Adam,

The CMake FindPythonInter used to do the correct thing.  It looked for the
default version of Python by first looking at the PYTHON_PATH environment
variable then for /usr/bin/python which typically is just a sym-link to find
the default version of Python.  If either of these is pointing to python 3
on you build system then that is what the Python scripting will be built
against unless you specify the python interpreter at build time.  If you
override this by specifying it on the command like you've shown above, then
the KiCad python scripting will not be recognized in your system's default
python version because it's being build against and installed in python 2.7
not python 3.  I guess from our standpoint since wxWidgets does not build
against python 3 so we need to set the python version to < 3 until wxWidgets
can be built against Python 3.  I'm not sure if FindPythonInterp is
sophisticated enough to do this.

Wayne


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp




Follow ups

References