[CMake] How to install openbabel python bindings by using the new cmake installer (problem selecting a particular python version).

Michael Hertling mhertling at online.de
Tue Nov 16 23:54:35 EST 2010


On 11/13/2010 03:08 PM, Marcus D. Hanwell wrote:
> On Nov 13, 2010, at 8:57 AM, Michael Hertling wrote:
> 
>> On 11/12/2010 02:13 PM, Hector Martinez-Seara wrote:
>>> Dear all,
>>> I'm trying to install openbabel in linux which in its last version
>>> (2.3.0) uses cmake installer. I haven't been able to compile it with
>>> biddings with python 3.1 when using the -DPYTHON_BINDINGS=ON option. I
>>> have python 2.7 and 3.1 installed in my system and the python command
>>> points to python 3.1. Still cmake only select python 2.7 despite it is
>>> not set as preferred in my system in any way. I have made a small
>>> search and I have seen that there is a lot of troubles selecting
>>> python 3 with cmake. Most of the information was very technical and
>>> honestly I'm not sure if there was any solution at the end.
>>
>> AFAIK, the FindPython{Interp,Libs}.cmake modules are currently not
>> capable to find Python 3, so you should focus on a manual approach
>> at the moment, see below. With the scheduling of issue 8396 for the
>> 2.8.4 roadmap, there's a perpective for the availability of version-
>> or pattern-aware find functions, so maybe, it is possible to improve
>> the find modules w.r.t. version selection in the near or medium term.
> 
> This is certainly something I would like to address before the 2.8.4 release, but as you said there is no Python 3 awareness right now in the find modules. Do the Open Babel Python modules work in Python 3? I work on that project, and was not aware that Python 3 support was there, but do not work much on the bindings.

On occasion of Hector's inquiry, I've just taken a look at Open Babel's
CMakeLists.txt files to see how they could possibly be made not search
for a Python 2 installation, but I don't know if it generally works
with Python 3. Perhaps, Hector can provide some information.

>>> My question is rather easy:
>>> a) Is there any way to force a specific python version (3.1) from the
>>> cmake command line?
>>
>> You might try to set the PYTHON_EXECUTABLE, PYTHON_INCLUDE_DIR and
>> PYTHON_LIBRARY variables to appropriate values for your Python 3.1
>> installation on the command line, i.e. by use of the -D option or
>> -C along with a prepared script. AFAICS, defining these variables
>> makes the FindPython{Interp,Libs}.cmake modules not look for the
>> interpreter, the include directory and the library by themselves,
>> so you possibly get by without any further modifications, but I
>> have not yet tested this with Open Babel.
>>
>>> or b) Is there variable which I could export, e.g. CC=gcc4.5, to force
>>> python to select the python version I want?
>>
>> None I'm aware of, but - as stated above - there're some undertakings
>> in the near future that might result in a comprehensive and flexible
>> FindPython.cmake module which receives the requested version through
>> FIND_PACKAGE()'s version parameter, including version 3.
>>
> That would certainly be the ideal solution.

Yes, absolutely, and I'm hopeful that addressing 8396 will pave the
way for this and related concerns. My vision of the objectives are:

- Instead of just considering FIND_LIBRARY(), one should enhance all
  find functions, i.e. FIND_{LIBRARY,PROGRAM,FILE,PATH}(), as James
  Bigler has proposed in issue 10856. In particular for Python, one
  needs improved FIND_PROGRAM() and FIND_PATH() functions to search
  for the versioned interpreter executables and module directories.
- Instead of implementing support for version selection, one should
  add general regex pattern matching as proposed in 10856, too. IMO,
  pattern matching does suit much better to the find functions than
  version selection, is universally useful on its own and has been
  requested several times before.
- Pattern-aware find functions should just return a list of matching
  candidates whereas the selection of a specific version may be done
  by a function implemented in CMake's scripting language, and this
  function might use the VERSION_EQUAL/VERSION_GREATER/VERSION_LESS/
  VERSION_GREATER_OR_EQUAL/VERSION LESS_OR_EQUAL parameters proposed
  by Philip Lowman for FIND_LIBRARY().
- The enhanced find functions should be used along with that version
  selection function to write a FindPython.cmake which makes use of
  FIND_PACKAGE()'s version specification facility and is capable to
  handle Python 2 and 3 in an equal manner.
- Finally, this advancement should be used to improve certain find
  modules currently containing hardcoded version numbers, e.g. the
  Tcl/Tk ones or FindPNG.cmake. Hence, the FIND_PACKAGE() version
  parameter could be used to select a specific version, and those
  modules' related need of repetitive maintenance vanishes. By
  the way, issue 10718 would most probably become obsolete.

Of course, I'd be interested in opinions and comments on this topic.

Regards,

Michael


More information about the CMake mailing list