I've attached a slightly modified patch, this one uses [0-9A-Za-z\\.]+ as the version regex instead of [0-9\\.]+ just in case the version is a pre-release with "a", "b" etc. as part of the version string.
- David On Wed, Jul 6, 2011 at 11:10 AM, David Gobbi <david.go...@gmail.com> wrote: > Hi All, > > The attached patch changes FindPythonLibs.cmake so that it returns the > following variables: > PYTHON_VERSION > PYTHON_MAJOR_VERSION > PYTHON_MINOR_VERSION > PYTHON_MICRO_VERSION > > The purpose of this patch is to allow CMake scripts to perform conditional > configuration based on what python version was found, e.g. in case different > configuration is required for Python 3 versus Python 2. > > - David >
diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake index adcec46..d520841 100644 --- a/Modules/FindPythonLibs.cmake +++ b/Modules/FindPythonLibs.cmake @@ -8,6 +8,12 @@ # PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated) # PYTHON_INCLUDE_DIRS - path to where Python.h is found # PYTHON_DEBUG_LIBRARIES - path to the debug library +# PYTHON_VERSION - python version string e.g. 2.7.1 +# PYTHON_MAJOR_VERSION - python major version number +# PYTHON_MINOR_VERSION - python minor version number +# PYTHON_MICRO_VERSION - python release version number +# +# This code uses the following variables: # Python_ADDITIONAL_VERSIONS - list of additional Python versions to search for #============================================================================= @@ -95,6 +101,26 @@ MARK_AS_ADVANCED( PYTHON_INCLUDE_DIR ) + +# look in PYTHON_INCLUDE_DIR for patchlevel.h, which contains the +# version number macros in all versions of python from 1.5 through +# at least version 3.2, and set these vars: PYTHON_VERSION, +# PYTHON_MAJOR_VERSION, PYTHON_MINOR_VERSION, PYTHON_MICRO_VERSION. +IF(PYTHON_INCLUDE_DIR) + SET(_VERSION_REGEX + "^#define[ \t]+PY([A-Z_]*_VERSION)[ \t]+[\"]*([0-9A-Za-z\\.]+)[\"]*[ \t]*$") + FILE(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" _VERSION_STRINGS + LIMIT_COUNT 10 REGEX ${_VERSION_REGEX}) + FOREACH(_VERSION_STRING ${_VERSION_STRINGS}) + STRING(REGEX REPLACE ${_VERSION_REGEX} "PYTHON\\1" + _VERSION_VARIABLE "${_VERSION_STRING}") + STRING(REGEX REPLACE ${_VERSION_REGEX} "\\2" + _VERSION_NUMBER "${_VERSION_STRING}") + SET(${_VERSION_VARIABLE} ${_VERSION_NUMBER}) + ENDFOREACH(_VERSION_STRING ${_VERSION_STRINGS}) +ENDIF(PYTHON_INCLUDE_DIR) + + # We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the # cache entries because they are meant to specify the location of a single # library. We now set the variables listed by the documentation for this
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake