# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#
# This file is a "template" file used by various FindPython modules.
#
cmake_policy ( VERSION 3.7 )
#
# Initial configuration
#
if ( NOT DEFINED _PYTHON_PREFIX )
message ( FATAL_ERROR "FindPython: INTERNAL ERROR" )
endif ( )
if ( NOT DEFINED _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR )
message ( FATAL_ERROR "FindPython: INTERNAL ERROR" )
endif ( )
if ( _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR EQUAL 3 )
set ( _ ${ _PYTHON_PREFIX } _VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0 )
elseif ( _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR EQUAL 2 )
set ( _ ${ _PYTHON_PREFIX } _VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 )
else ( )
message ( FATAL_ERROR "FindPython: INTERNAL ERROR" )
endif ( )
#
# helper commands
#
macro ( _PYTHON_DISPLAY_FAILURE _PYTHON_MSG )
if ( ${ _PYTHON_PREFIX } _FIND_REQUIRED )
message ( FATAL_ERROR "${_PYTHON_MSG}" )
else ( )
if ( NOT ${ _PYTHON_PREFIX } _FIND_QUIETLY )
message ( STATUS "${_PYTHON_MSG}" )
endif ( )
endif ( )
set ( ${ _PYTHON_PREFIX } _FOUND FALSE )
string ( TOUPPER "${_PYTHON_PREFIX}" _ ${ _PYTHON_PREFIX } _UPPER_PREFIX )
set ( ${ _PYTHON_UPPER_PREFIX } _FOUND FALSE )
return ( )
endmacro ( )
macro ( _PYTHON_FIND_FRAMEWORKS )
set ( ${ _PYTHON_PREFIX } _FRAMEWORKS )
if ( APPLE )
set ( _pff_frameworks ${ CMAKE_FRAMEWORK_PATH }
$ E N V { C M A K E _ F R A M E W O R K _ P A T H }
~ / L i b r a r y / F r a m e w o r k s
/ u s r / l o c a l / F r a m e w o r k s
$ { C M A K E _ S Y S T E M _ F R A M E W O R K _ P A T H } )
list ( REMOVE_DUPLICATES _pff_frameworks )
foreach ( _pff_framework IN LISTS _pff_frameworks )
if ( EXISTS ${ _pff_framework } /Python.framework )
list ( APPEND ${ _PYTHON_PREFIX } _FRAMEWORKS ${ _pff_framework } /Python.framework )
endif ( )
endforeach ( )
unset ( _pff_frameworks )
unset ( _pff_framework )
endif ( )
endmacro ( )
function ( _PYTHON_GET_FRAMEWORKS _PYTHON_PGF_FRAMEWORK_PATHS _PYTHON_VERSION )
set ( _PYTHON_FRAMEWORK_PATHS )
foreach ( _PYTHON_FRAMEWORK IN LISTS ${ _PYTHON_PREFIX } _FRAMEWORKS )
list ( APPEND _PYTHON_FRAMEWORK_PATHS
" $ { _ P Y T H O N _ F R A M E W O R K } / V e r s i o n s / $ { _ P Y T H O N _ V E R S I O N } " )
endforeach ( )
set ( ${ _PYTHON_PGF_FRAMEWORK_PATHS } ${ _PYTHON_FRAMEWORK_PATHS } PARENT_SCOPE )
endfunction ( )
function ( _PYTHON_VALIDATE_INTERPRETER )
if ( NOT ${ _PYTHON_PREFIX } _EXECUTABLE )
return ( )
endif ( )
if ( ARGC EQUAL 1 )
set ( expected_version ${ ARGV0 } )
else ( )
unset ( expected_version )
endif ( )
get_filename_component ( python_name "${${_PYTHON_PREFIX}_EXECUTABLE}" NAME )
if ( expected_version AND NOT python_name STREQUAL "python${expected_version}${CMAKE_EXECUTABLE_SUFFIX}" )
# executable found must have a specific version
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s ; s y s . s t d o u t . write ( '.'.join([str(x ) f o r x i n s y s . v e r s i o n _ i n f o [ : 2 ] ] ) ) "
R E S U L T _ V A R I A B L E r e s u l t
O U T P U T _ V A R I A B L E v e r s i o n
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( result OR NOT version EQUAL expected_version )
# interpreter not usable or has wrong major version
set ( ${ _PYTHON_PREFIX } _EXECUTABLE ${ _PYTHON_PREFIX } _EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE )
return ( )
endif ( )
else ( )
if ( NOT python_name STREQUAL "python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}" )
# executable found do not have version in name
# ensure major version is OK
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s ; s y s . s t d o u t . write ( str(sys.version_info[0] ) ) "
R E S U L T _ V A R I A B L E r e s u l t
O U T P U T _ V A R I A B L E v e r s i o n
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( result OR NOT version EQUAL _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR )
# interpreter not usable or has wrong major version
set ( ${ _PYTHON_PREFIX } _EXECUTABLE ${ _PYTHON_PREFIX } _EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE )
return ( )
endif ( )
endif ( )
endif ( )
if ( CMAKE_SIZEOF_VOID_P AND "Development" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS
A N D N O T C M A K E _ C R O S S C O M P I L I N G )
# In this case, interpreter must have same architecture as environment
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s , s t r u c t ; s y s . s t d o u t . write ( str(struct.calcsize(\ "P\" ) ) ) "
R E S U L T _ V A R I A B L E r e s u l t
O U T P U T _ V A R I A B L E s i z e
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( result OR NOT size EQUAL CMAKE_SIZEOF_VOID_P )
# interpreter not usable or has wrong architecture
set ( ${ _PYTHON_PREFIX } _EXECUTABLE ${ _PYTHON_PREFIX } _EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE )
return ( )
endif ( )
endif ( )
endfunction ( )
function ( _PYTHON_VALIDATE_COMPILER expected_version )
if ( NOT ${ _PYTHON_PREFIX } _COMPILER )
return ( )
endif ( )
# retrieve python environment version from compiler
set ( working_dir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir" )
file ( WRITE "${working_dir}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))\n" )
execute_process ( COMMAND "${${_PYTHON_PREFIX}_COMPILER}" /target:exe /embed "${working_dir}/version.py"
W O R K I N G _ D I R E C T O R Y " $ { w o r k i n g _ d i r } "
O U T P U T _ Q U I E T
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
execute_process ( COMMAND "${working_dir}/version"
W O R K I N G _ D I R E C T O R Y " $ { w o r k i n g _ d i r } "
R E S U L T _ V A R I A B L E r e s u l t
O U T P U T _ V A R I A B L E v e r s i o n
E R R O R _ Q U I E T )
file ( REMOVE_RECURSE "${_${_PYTHON_PREFIX}_VERSION_DIR}" )
if ( result OR NOT version EQUAL expected_version )
# Compiler not usable or has wrong major version
set ( ${ _PYTHON_PREFIX } _COMPILER ${ _PYTHON_PREFIX } _COMPILER-NOTFOUND CACHE INTERNAL "" FORCE )
endif ( )
endfunction ( )
function ( _PYTHON_FIND_RUNTIME_LIBRARY _PYTHON_LIB )
string ( REPLACE "_RUNTIME" "" _PYTHON_LIB "${_PYTHON_LIB}" )
# look at runtime part on systems supporting it
if ( CMAKE_SYSTEM_NAME STREQUAL "Windows" OR
( C M A K E _ S Y S T E M _ N A M E M A T C H E S " M S Y S | CYGWIN "
A N D $ { _ P Y T H O N _ L I B } M A T C H E S " $ { C M A K E _ I M P O R T _ L I B R A R Y _ S U F F I X } $ " ) )
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ CMAKE_SHARED_LIBRARY_SUFFIX } )
# MSYS has a special syntax for runtime libraries
if ( CMAKE_SYSTEM_NAME MATCHES "MSYS" )
list ( APPEND CMAKE_FIND_LIBRARY_PREFIXES "msys-" )
endif ( )
find_library ( ${ ARGV } )
endif ( )
endfunction ( )
function ( _PYTHON_SET_LIBRARY_DIRS _PYTHON_SLD_RESULT )
unset ( _PYTHON_DIRS )
set ( _PYTHON_LIBS ${ ARGV } )
list ( REMOVE_AT _PYTHON_LIBS 0 )
foreach ( _PYTHON_LIB IN LISTS _PYTHON_LIBS )
if ( ${ _PYTHON_LIB } )
get_filename_component ( _PYTHON_DIR "${${_PYTHON_LIB}}" DIRECTORY )
list ( APPEND _PYTHON_DIRS "${_PYTHON_DIR}" )
endif ( )
endforeach ( )
if ( _PYTHON_DIRS )
list ( REMOVE_DUPLICATES _PYTHON_DIRS )
endif ( )
set ( ${ _PYTHON_SLD_RESULT } ${ _PYTHON_DIRS } PARENT_SCOPE )
endfunction ( )
# If major version is specified, it must be the same as internal major version
if ( DEFINED ${ _PYTHON_PREFIX } _FIND_VERSION_MAJOR
A N D N O T $ { _ P Y T H O N _ P R E F I X } _ F I N D _ V E R S I O N _ M A J O R V E R S I O N _ E Q U A L _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R )
_python_display_failure ( "Could NOT find ${_PYTHON_PREFIX}: Wrong major version specified is \" ${ ${_PYTHON_PREFIX } _FIND_VERSION_MAJOR}\ ", but expected major version is \" ${ _${_PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR}\ "" )
endif ( )
# handle components
if ( NOT ${ _PYTHON_PREFIX } _FIND_COMPONENTS )
set ( ${ _PYTHON_PREFIX } _FIND_COMPONENTS Interpreter )
set ( ${ _PYTHON_PREFIX } _FIND_REQUIRED_Interpreter TRUE )
endif ( )
foreach ( _ ${ _PYTHON_PREFIX } _COMPONENT IN LISTS ${ _PYTHON_PREFIX } _FIND_COMPONENTS )
set ( ${ _PYTHON_PREFIX } _ ${ _${_PYTHON_PREFIX } _COMPONENT}_FOUND FALSE )
endforeach ( )
unset ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
# Set versions to search
## default: search any version
set ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS ${ _${_PYTHON_PREFIX } _VERSIONS} )
if ( ${ _PYTHON_PREFIX } _FIND_VERSION_COUNT GREATER 1 )
if ( ${ _PYTHON_PREFIX } _FIND_VERSION_EXACT )
set ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS ${ ${_PYTHON_PREFIX } _FIND_VERSION_MAJOR}. ${ ${_PYTHON_PREFIX } _FIND_VERSION_MINOR} )
else ( )
unset ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
# add all compatible versions
foreach ( _ ${ _PYTHON_PREFIX } _VERSION IN LISTS _ ${ _PYTHON_PREFIX } _VERSIONS )
if ( _ ${ _PYTHON_PREFIX } _VERSION VERSION_GREATER_EQUAL ${ _PYTHON_PREFIX } _FIND_VERSION )
list ( APPEND _ ${ _PYTHON_PREFIX } _FIND_VERSIONS ${ _${_PYTHON_PREFIX } _VERSION} )
endif ( )
endforeach ( )
endif ( )
endif ( )
# Python and Anaconda distributions: define which architectures can be used
if ( CMAKE_SIZEOF_VOID_P )
# In this case, search only for 64bit or 32bit
math ( EXPR _ ${ _PYTHON_PREFIX } _ARCH "${CMAKE_SIZEOF_VOID_P} * 8" )
set ( _ ${ _PYTHON_PREFIX } _ARCH2 ${ _${_PYTHON_PREFIX } _ARCH} )
else ( )
# architecture unknown, search for both 64bit and 32bit
set ( _ ${ _PYTHON_PREFIX } _ARCH 64 )
set ( _ ${ _PYTHON_PREFIX } _ARCH2 32 )
endif ( )
# IronPython support
if ( CMAKE_SIZEOF_VOID_P )
# In this case, search only for 64bit or 32bit
math ( EXPR _ ${ _PYTHON_PREFIX } _ARCH "${CMAKE_SIZEOF_VOID_P} * 8" )
set ( _ ${ _PYTHON_PREFIX } _IRON_PYTHON_NAMES ipy ${ _${_PYTHON_PREFIX } _ARCH} ipy )
else ( )
# architecture unknown, search for natural interpreter
set ( _ ${ _PYTHON_PREFIX } _IRON_PYTHON_NAMES ipy )
endif ( )
set ( _ ${ _PYTHON_PREFIX } _IRON_PYTHON_PATH_SUFFIXES net45 net40 )
# Apple frameworks handling
_python_find_frameworks ( )
# Save CMAKE_FIND_APPBUNDLE
if ( DEFINED CMAKE_FIND_APPBUNDLE )
set ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_APPBUNDLE ${ CMAKE_FIND_APPBUNDLE } )
else ( )
unset ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_APPBUNDLE )
endif ( )
# To avoid app bundle lookup
set ( CMAKE_FIND_APPBUNDLE "NEVER" )
# Save CMAKE_FIND_FRAMEWORK
if ( DEFINED CMAKE_FIND_FRAMEWORK )
set ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_FRAMEWORK ${ CMAKE_FIND_FRAMEWORK } )
if ( CMAKE_FIND_FRAMEWORK STREQUAL "ONLY" )
message ( AUTHOR_WARNING "Find${_PYTHON_PREFIX}: CMAKE_FIND_FRAMEWORK: 'ONLY' value is not supported. 'FIRST' will be used instead." )
set ( _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK "FIRST" )
else ( )
set ( _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK ${ CMAKE_FIND_FRAMEWORK } )
endif ( )
else ( )
unset ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_FRAMEWORK )
set ( _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK "FIRST" )
endif ( )
# To avoid framework lookup
set ( CMAKE_FIND_FRAMEWORK "NEVER" )
# Windows Registry handling
if ( DEFINED ${ _PYTHON_PREFIX } _FIND_REGISTRY )
if ( NOT ${ _PYTHON_PREFIX } _FIND_REGISTRY MATCHES "^(FIRST|LAST|NEVER)$" )
message ( AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_REGISTRY}: invalid value for '${_PYTHON_PREFIX}_FIND_REGISTRY'. 'FIRST', 'LAST' or 'NEVER' expected." )
set ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY "FIRST" )
else ( )
set ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY ${ ${_PYTHON_PREFIX } _FIND_REGISTRY} )
endif ( )
else ( )
set ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY "FIRST" )
endif ( )
unset ( _ ${ _PYTHON_PREFIX } _REQUIRED_VARS )
unset ( _ ${ _PYTHON_PREFIX } _CACHED_VARS )
# first step, search for the interpreter
if ( "Interpreter" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS )
if ( ${ _PYTHON_PREFIX } _FIND_REQUIRED_Interpreter )
list ( APPEND _ ${ _PYTHON_PREFIX } _REQUIRED_VARS ${ _PYTHON_PREFIX } _EXECUTABLE )
list ( APPEND _ ${ _PYTHON_PREFIX } _CACHED_VARS ${ _PYTHON_PREFIX } _EXECUTABLE )
endif ( )
set ( _ ${ _PYTHON_PREFIX } _HINTS "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${ _PYTHON_PREFIX } _ROOT_DIR )
# look-up for various versions and locations
foreach ( _ ${ _PYTHON_PREFIX } _VERSION IN LISTS _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
string ( REPLACE "." "" _ ${ _PYTHON_PREFIX } _VERSION_NO_DOTS ${ _${_PYTHON_PREFIX } _VERSION} )
_python_get_frameworks ( _ ${ _PYTHON_PREFIX } _FRAMEWORK_PATHS ${ _${_PYTHON_PREFIX } _VERSION} )
# Apple frameworks handling
if ( APPLE AND _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK STREQUAL "FIRST" )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
N A M E S _ P E R _ D I R
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
P A T H _ S U F F I X E S b i n
N O _ C M A K E _ P A T H
N O _ C M A K E _ E N V I R O N M E N T _ P A T H
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
# Windows registry
if ( WIN32 AND _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "FIRST" )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S [ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ I r o n P y t h o n \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
P A T H _ S U F F I X E S b i n $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
# try using HINTS
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
# try using standard paths.
if ( WIN32 )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S }
N A M E S _ P E R _ D I R )
else ( )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
N A M E S _ P E R _ D I R )
endif ( )
# Apple frameworks handling
if ( APPLE AND _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK STREQUAL "LAST" )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
N A M E S _ P E R _ D I R
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
P A T H _ S U F F I X E S b i n
N O _ D E F A U L T _ P A T H )
endif ( )
# Windows registry
if ( WIN32 AND _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "LAST" )
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S }
N A M E S _ P E R _ D I R
P A T H S [ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ I r o n P y t h o n \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
P A T H _ S U F F I X E S b i n $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ D E F A U L T _ P A T H )
endif ( )
_python_validate_interpreter ( ${ _${_PYTHON_PREFIX } _VERSION} )
if ( ${ _PYTHON_PREFIX } _EXECUTABLE )
break ( )
endif ( )
endforeach ( )
if ( NOT ${ _PYTHON_PREFIX } _EXECUTABLE )
# No specific version found. Retry with generic names
# try using HINTS
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
# try using standard paths.
# NAMES_PER_DIR is not defined on purpose to have a chance to find
# expected version.
# For example, typical systems have 'python' for version 2.* and 'python3'
# for version 3.*. So looking for names per dir will find, potentially,
# systematically 'python' (i.e. version 2) even if version 3 is searched.
find_program ( ${ _PYTHON_PREFIX } _EXECUTABLE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R }
p y t h o n
$ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ N A M E S } )
_python_validate_interpreter ( )
endif ( )
# retrieve exact version of executable found
if ( ${ _PYTHON_PREFIX } _EXECUTABLE )
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s ; s y s . s t d o u t . write ( '.'.join([str(x ) f o r x i n s y s . v e r s i o n _ i n f o [ : 3 ] ] ) ) "
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
string ( REGEX MATCHALL "[0-9]+" _ ${ _PYTHON_PREFIX } _VERSIONS "${${_PYTHON_PREFIX}_VERSION}" )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 0 ${ _PYTHON_PREFIX } _VERSION_MAJOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 1 ${ _PYTHON_PREFIX } _VERSION_MINOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 2 ${ _PYTHON_PREFIX } _VERSION_PATCH )
else ( )
# Interpreter is not usable
set ( ${ _PYTHON_PREFIX } _EXECUTABLE ${ _PYTHON_PREFIX } _EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE )
unset ( ${ _PYTHON_PREFIX } _VERSION )
endif ( )
endif ( )
if ( ${ _PYTHON_PREFIX } _EXECUTABLE
A N D $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ M A J O R V E R S I O N _ E Q U A L _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R )
set ( ${ _PYTHON_PREFIX } _Interpreter_FOUND TRUE )
# Use interpreter version for future searches to ensure consistency
set ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS ${ ${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ ${_PYTHON_PREFIX } _VERSION_MINOR} )
endif ( )
if ( ${ _PYTHON_PREFIX } _Interpreter_FOUND )
if ( NOT CMAKE_SIZEOF_VOID_P )
# determine interpreter architecture
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; print(sys.maxsize > 2**32)"
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ I S 6 4 B I T
E R R O R _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ I S 6 4 B I T )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
if ( ${ _PYTHON_PREFIX } _IS64BIT )
set ( _ ${ _PYTHON_PREFIX } _ARCH 64 )
set ( _ ${ _PYTHON_PREFIX } _ARCH2 64 )
else ( )
set ( _ ${ _PYTHON_PREFIX } _ARCH 32 )
set ( _ ${ _PYTHON_PREFIX } _ARCH2 32 )
endif ( )
endif ( )
endif ( )
# retrieve interpreter identity
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -V
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ I N T E R P R E T E R _ I D
E R R O R _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ I N T E R P R E T E R _ I D )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
if ( ${ _PYTHON_PREFIX } _INTERPRETER_ID MATCHES "Anaconda" )
set ( ${ _PYTHON_PREFIX } _INTERPRETER_ID "Anaconda" )
elseif ( ${ _PYTHON_PREFIX } _INTERPRETER_ID MATCHES "Enthought" )
set ( ${ _PYTHON_PREFIX } _INTERPRETER_ID "Canopy" )
else ( )
string ( REGEX REPLACE "^([^ ]+).*" "\\1" ${ _PYTHON_PREFIX } _INTERPRETER_ID "${${_PYTHON_PREFIX}_INTERPRETER_ID}" )
if ( ${ _PYTHON_PREFIX } _INTERPRETER_ID STREQUAL "Python" )
# try to get a more precise ID
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; print(sys.copyright)"
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E $ { _ P Y T H O N _ P R E F I X } _ C O P Y R I G H T
E R R O R _ Q U I E T )
if ( ${ _PYTHON_PREFIX } _COPYRIGHT MATCHES "ActiveState" )
set ( ${ _PYTHON_PREFIX } _INTERPRETER_ID "ActivePython" )
endif ( )
endif ( )
endif ( )
else ( )
set ( ${ _PYTHON_PREFIX } _INTERPRETER_ID Python )
endif ( )
else ( )
unset ( ${ _PYTHON_PREFIX } _INTERPRETER_ID )
endif ( )
# retrieve various package installation directories
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; from distutils import sysconfig;sys.stdout.write(';'.join([sysconfig.get_python_lib(plat_specific=False,standard_lib=True),sysconfig.get_python_lib(plat_specific=True,standard_lib=True),sysconfig.get_python_lib(plat_specific=False,standard_lib=False),sysconfig.get_python_lib(plat_specific=True,standard_lib=False)]))"
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ L I B P A T H S
E R R O R _ Q U I E T )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
list ( GET _ ${ _PYTHON_PREFIX } _LIBPATHS 0 ${ _PYTHON_PREFIX } _STDLIB )
list ( GET _ ${ _PYTHON_PREFIX } _LIBPATHS 1 ${ _PYTHON_PREFIX } _STDARCH )
list ( GET _ ${ _PYTHON_PREFIX } _LIBPATHS 2 ${ _PYTHON_PREFIX } _SITELIB )
list ( GET _ ${ _PYTHON_PREFIX } _LIBPATHS 3 ${ _PYTHON_PREFIX } _SITEARCH )
else ( )
unset ( ${ _PYTHON_PREFIX } _STDLIB )
unset ( ${ _PYTHON_PREFIX } _STDARCH )
unset ( ${ _PYTHON_PREFIX } _SITELIB )
unset ( ${ _PYTHON_PREFIX } _SITEARCH )
endif ( )
mark_as_advanced ( ${ _PYTHON_PREFIX } _EXECUTABLE )
endif ( )
# second step, search for compiler (IronPython)
if ( "Compiler" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS )
if ( ${ _PYTHON_PREFIX } _FIND_REQUIRED_Compiler )
list ( APPEND _ ${ _PYTHON_PREFIX } _REQUIRED_VARS ${ _PYTHON_PREFIX } _COMPILER )
list ( APPEND _ ${ _PYTHON_PREFIX } _CACHED_VARS ${ _PYTHON_PREFIX } _COMPILER )
endif ( )
# IronPython specific artifacts
# If IronPython interpreter is found, use its path
unset ( _ ${ _PYTHON_PREFIX } _IRON_ROOT )
if ( ${ _PYTHON_PREFIX } _Interpreter_FOUND AND ${ _PYTHON_PREFIX } _INTERPRETER_ID STREQUAL "IronPython" )
get_filename_component ( _ ${ _PYTHON_PREFIX } _IRON_ROOT "${${_PYTHON_PREFIX}_EXECUTABLE}" DIRECTORY )
endif ( )
# try using root dir and registry
foreach ( _ ${ _PYTHON_PREFIX } _VERSION IN LISTS _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
if ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "FIRST" )
find_program ( ${ _PYTHON_PREFIX } _COMPILER
N A M E S i p y c
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ R O O T } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S [ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ I r o n P y t h o n \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
P A T H _ S U F F I X E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
find_program ( ${ _PYTHON_PREFIX } _COMPILER
N A M E S i p y c
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ R O O T } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
if ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "LAST" )
find_program ( ${ _PYTHON_PREFIX } _COMPILER
N A M E S i p y c
P A T H S [ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ I r o n P y t h o n \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
P A T H _ S U F F I X E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S }
N O _ D E F A U L T _ P A T H )
endif ( )
_python_validate_compiler ( ${ _${_PYTHON_PREFIX } _VERSION} )
if ( ${ _PYTHON_PREFIX } _COMPILER )
break ( )
endif ( )
endforeach ( )
# no specific version found, re-try in standard paths
find_program ( ${ _PYTHON_PREFIX } _COMPILER
N A M E S i p y c
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ R O O T } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I R O N _ P Y T H O N _ P A T H _ S U F F I X E S } )
if ( ${ _PYTHON_PREFIX } _COMPILER )
# retrieve python environment version from compiler
set ( _ ${ _PYTHON_PREFIX } _VERSION_DIR "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir" )
file ( WRITE "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:3]]))\n" )
execute_process ( COMMAND "${${_PYTHON_PREFIX}_COMPILER}" /target:exe /embed "${_${_PYTHON_PREFIX}_VERSION_DIR}/version.py"
W O R K I N G _ D I R E C T O R Y " $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ D I R } "
O U T P U T _ Q U I E T
E R R O R _ Q U I E T )
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_VERSION_DIR}/version"
W O R K I N G _ D I R E C T O R Y " $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ D I R } "
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N
E R R O R _ Q U I E T )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
string ( REGEX MATCHALL "[0-9]+" _ ${ _PYTHON_PREFIX } _VERSIONS "${_${_PYTHON_PREFIX}_VERSION}" )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 0 _ ${ _PYTHON_PREFIX } _VERSION_MAJOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 1 _ ${ _PYTHON_PREFIX } _VERSION_MINOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 2 _ ${ _PYTHON_PREFIX } _VERSION_PATCH )
if ( NOT ${ _PYTHON_PREFIX } _Interpreter_FOUND )
# set public version information
set ( ${ _PYTHON_PREFIX } _VERSION ${ _${_PYTHON_PREFIX } _VERSION} )
set ( ${ _PYTHON_PREFIX } _VERSION_MAJOR ${ _${_PYTHON_PREFIX } _VERSION_MAJOR} )
set ( ${ _PYTHON_PREFIX } _VERSION_MINOR ${ _${_PYTHON_PREFIX } _VERSION_MINOR} )
set ( ${ _PYTHON_PREFIX } _VERSION_PATCH ${ _${_PYTHON_PREFIX } _VERSION_PATCH} )
endif ( )
else ( )
# compiler not usable
set ( ${ _PYTHON_PREFIX } _COMPILER ${ _PYTHON_PREFIX } _COMPILER-NOTFOUND CACHE INTERNAL "" FORCE )
endif ( )
file ( REMOVE_RECURSE "${_${_PYTHON_PREFIX}_VERSION_DIR}" )
endif ( )
if ( ${ _PYTHON_PREFIX } _COMPILER )
if ( ${ _PYTHON_PREFIX } _Interpreter_FOUND )
# Compiler must be compatible with interpreter
if ( ${ _${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ _${_PYTHON_PREFIX } _VERSION_MINOR} VERSION_EQUAL ${ ${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ ${_PYTHON_PREFIX } _VERSION_MINOR} )
set ( ${ _PYTHON_PREFIX } _Compiler_FOUND TRUE )
endif ( )
elseif ( ${ _PYTHON_PREFIX } _VERSION_MAJOR VERSION_EQUAL _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR )
set ( ${ _PYTHON_PREFIX } _Compiler_FOUND TRUE )
# Use compiler version for future searches to ensure consistency
set ( _ ${ _PYTHON_PREFIX } _FIND_VERSIONS ${ ${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ ${_PYTHON_PREFIX } _VERSION_MINOR} )
endif ( )
endif ( )
if ( ${ _PYTHON_PREFIX } _Compiler_FOUND )
set ( ${ _PYTHON_PREFIX } _COMPILER_ID IronPython )
else ( )
unset ( ${ _PYTHON_PREFIX } _COMPILER_ID )
endif ( )
mark_as_advanced ( ${ _PYTHON_PREFIX } _COMPILER )
endif ( )
# third step, search for the development artifacts
## Development environment is not compatible with IronPython interpreter
if ( "Development" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS
A N D N O T $ { _ P Y T H O N _ P R E F I X } _ I N T E R P R E T E R _ I D S T R E Q U A L " I r o n P y t h o n " )
if ( ${ _PYTHON_PREFIX } _FIND_REQUIRED_Development )
list ( APPEND _ ${ _PYTHON_PREFIX } _REQUIRED_VARS ${ _PYTHON_PREFIX } _LIBRARY
$ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R )
list ( APPEND _ ${ _PYTHON_PREFIX } _CACHED_VARS ${ _PYTHON_PREFIX } _LIBRARY
$ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ R E L E A S E
$ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ R E L E A S E
$ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ D E B U G
$ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ D E B U G
$ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R )
endif ( )
# Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES
unset ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_LIBRARY_SUFFIXES )
if ( DEFINED ${ _PYTHON_PREFIX } _USE_STATIC_LIBS AND NOT WIN32 )
set ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_LIBRARY_SUFFIXES ${ CMAKE_FIND_LIBRARY_SUFFIXES } )
if ( ${ _PYTHON_PREFIX } _USE_STATIC_LIBS )
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ CMAKE_STATIC_LIBRARY_SUFFIX } )
else ( )
list ( REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES ${ CMAKE_STATIC_LIBRARY_SUFFIX } )
endif ( )
else ( )
endif ( )
# if python interpreter is found, use its location and version to ensure consistency
# between interpreter and development environment
unset ( _ ${ _PYTHON_PREFIX } _PREFIX )
if ( ${ _PYTHON_PREFIX } _Interpreter_FOUND )
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s ; f r o m d i s t u t i l s i m p o r t s y s c o n f i g ; s y s . s t d o u t . write ( sysconfig.PREFIX ) "
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ P R E F I X
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( _ ${ _PYTHON_PREFIX } _RESULT )
unset ( _ ${ _PYTHON_PREFIX } _PREFIX )
endif ( )
endif ( )
set ( _ ${ _PYTHON_PREFIX } _HINTS "${_${_PYTHON_PREFIX}_PREFIX}" "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${ _PYTHON_PREFIX } _ROOT_DIR )
foreach ( _ ${ _PYTHON_PREFIX } _VERSION IN LISTS _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
string ( REPLACE "." "" _ ${ _PYTHON_PREFIX } _VERSION_NO_DOTS ${ _${_PYTHON_PREFIX } _VERSION} )
# try to use pythonX.Y-config tool
set ( _ ${ _PYTHON_PREFIX } _CONFIG_NAMES )
if ( DEFINED CMAKE_LIBRARY_ARCHITECTURE )
set ( _ ${ _PYTHON_PREFIX } _CONFIG_NAMES "${CMAKE_LIBRARY_ARCHITECTURE}-python${_${_PYTHON_PREFIX}_VERSION}-config" )
endif ( )
list ( APPEND _ ${ _PYTHON_PREFIX } _CONFIG_NAMES "python${_${_PYTHON_PREFIX}_VERSION}-config" )
find_program ( _ ${ _PYTHON_PREFIX } _CONFIG
N A M E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ C O N F I G _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n )
unset ( _ ${ _PYTHON_PREFIX } _CONFIG_NAMES )
if ( NOT _ ${ _PYTHON_PREFIX } _CONFIG )
continue ( )
endif ( )
if ( DEFINED CMAKE_LIBRARY_ARCHITECTURE )
# check that config tool match library architecture
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --configdir
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ C O N F I G D I R
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( _ ${ _PYTHON_PREFIX } _RESULT )
unset ( _ ${ _PYTHON_PREFIX } _CONFIG CACHE )
continue ( )
endif ( )
string ( FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _ ${ _PYTHON_PREFIX } _RESULT )
if ( _ ${ _PYTHON_PREFIX } _RESULT EQUAL -1 )
unset ( _ ${ _PYTHON_PREFIX } _CONFIG CACHE )
continue ( )
endif ( )
endif ( )
# retrieve root install directory
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --prefix
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ P R E F I X
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( _ ${ _PYTHON_PREFIX } _RESULT )
# python-config is not usable
unset ( _ ${ _PYTHON_PREFIX } _CONFIG CACHE )
continue ( )
endif ( )
set ( _ ${ _PYTHON_PREFIX } _HINTS "${_${_PYTHON_PREFIX}_PREFIX}" "${${_PYTHON_PREFIX}_ROOT_DIR}" ENV ${ _PYTHON_PREFIX } _ROOT_DIR )
# retrieve library
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --ldflags
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ F L A G S
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
# retrieve library directory
string ( REGEX MATCHALL "-L[^ ]+" _ ${ _PYTHON_PREFIX } _LIB_DIRS "${_${_PYTHON_PREFIX}_FLAGS}" )
string ( REPLACE "-L" "" _ ${ _PYTHON_PREFIX } _LIB_DIRS "${_${_PYTHON_PREFIX}_LIB_DIRS}" )
list ( REMOVE_DUPLICATES _ ${ _PYTHON_PREFIX } _LIB_DIRS )
# retrieve library name
string ( REGEX MATCHALL "-lpython[^ ]+" _ ${ _PYTHON_PREFIX } _LIB_NAMES "${_${_PYTHON_PREFIX}_FLAGS}" )
string ( REPLACE "-l" "" _ ${ _PYTHON_PREFIX } _LIB_NAMES "${_${_PYTHON_PREFIX}_LIB_NAMES}" )
list ( REMOVE_DUPLICATES _ ${ _PYTHON_PREFIX } _LIB_NAMES )
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE
N A M E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ L I B _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S } $ { _ $ { _ P Y T H O N _ P R E F I X } _ L I B _ D I R S }
P A T H _ S U F F I X E S l i b
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
# retrieve runtime library
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE )
get_filename_component ( _ ${ _PYTHON_PREFIX } _PATH "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY )
_python_find_runtime_library ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_RELEASE
N A M E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ L I B _ N A M E S }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ P A T H } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
endif ( )
# retrieve include directory
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --includes
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ F L A G S
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
# retrieve include directory
string ( REGEX MATCHALL "-I[^ ]+" _ ${ _PYTHON_PREFIX } _INCLUDE_DIRS "${_${_PYTHON_PREFIX}_FLAGS}" )
string ( REPLACE "-I" "" _ ${ _PYTHON_PREFIX } _INCLUDE_DIRS "${_${_PYTHON_PREFIX}_INCLUDE_DIRS}" )
list ( REMOVE_DUPLICATES _ ${ _PYTHON_PREFIX } _INCLUDE_DIRS )
find_path ( ${ _PYTHON_PREFIX } _INCLUDE_DIR
N A M E S P y t h o n . h
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R S }
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE AND ${ _PYTHON_PREFIX } _INCLUDE_DIR )
break ( )
endif ( )
endforeach ( )
# Rely on HINTS and standard paths if config tool failed to locate artifacts
if ( NOT ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE OR ${ _PYTHON_PREFIX } _LIBRARY_DEBUG ) OR NOT ${ _PYTHON_PREFIX } _INCLUDE_DIR )
foreach ( _ ${ _PYTHON_PREFIX } _VERSION IN LISTS _ ${ _PYTHON_PREFIX } _FIND_VERSIONS )
string ( REPLACE "." "" _ ${ _PYTHON_PREFIX } _VERSION_NO_DOTS ${ _${_PYTHON_PREFIX } _VERSION} )
_python_get_frameworks ( _ ${ _PYTHON_PREFIX } _FRAMEWORK_PATHS ${ _${_PYTHON_PREFIX } _VERSION} )
set ( _ ${ _PYTHON_PREFIX } _REGISTRY_PATHS
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ C U R R E N T _ U S E R \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ P y t h o n C o r e \ \ $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H } \ \ I n s t a l l P a t h ]
[ H K E Y _ L O C A L _ M A C H I N E \ \ S O F T W A R E \ \ P y t h o n \ \ C o n t i n u u m A n a l y t i c s \ \ A n a c o n d a $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } - $ { _ $ { _ P Y T H O N _ P R E F I X } _ A R C H 2 } \ \ I n s t a l l P a t h ] )
if ( APPLE AND _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK STREQUAL "FIRST" )
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
N A M E S _ P E R _ D I R
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
P A T H _ S U F F I X E S l i b / $ { C M A K E _ L I B R A R Y _ A R C H I T E C T U R E } l i b l i b s
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g
N O _ C M A K E _ P A T H
N O _ C M A K E _ E N V I R O N M E N T _ P A T H
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
if ( WIN32 AND _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "FIRST" )
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S l i b / $ { C M A K E _ L I B R A R Y _ A R C H I T E C T U R E } l i b l i b s
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
# search in HINTS locations
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S l i b / $ { C M A K E _ L I B R A R Y _ A R C H I T E C T U R E } l i b l i b s
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
if ( APPLE AND _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK STREQUAL "LAST" )
set ( __ ${ _PYTHON_PREFIX } _FRAMEWORK_PATHS ${ _${_PYTHON_PREFIX } _FRAMEWORK_PATHS} )
else ( )
unset ( __ ${ _PYTHON_PREFIX } _FRAMEWORK_PATHS )
endif ( )
if ( WIN32 AND _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "LAST" )
set ( __ ${ _PYTHON_PREFIX } _REGISTRY_PATHS ${ _${_PYTHON_PREFIX } _REGISTRY_PATHS} )
else ( )
unset ( __ ${ _PYTHON_PREFIX } _REGISTRY_PATHS )
endif ( )
# search in all default paths
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
N A M E S _ P E R _ D I R
P A T H S $ { _ _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
$ { _ _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S l i b / $ { C M A K E _ L I B R A R Y _ A R C H I T E C T U R E } l i b l i b s
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g - $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
l i b / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } / c o n f i g )
# retrieve runtime library
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE )
get_filename_component ( _ ${ _PYTHON_PREFIX } _PATH "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY )
_python_find_runtime_library ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_RELEASE
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S }
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
N A M E S _ P E R _ D I R
H I N T S " $ { _ $ { _ P Y T H O N _ P R E F I X } _ P A T H } " $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n )
endif ( )
if ( WIN32 )
# search for debug library
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE )
# use library location as a hint
get_filename_component ( _ ${ _PYTHON_PREFIX } _PATH "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY )
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_DEBUG
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } _ d
N A M E S _ P E R _ D I R
H I N T S " $ { _ $ { _ P Y T H O N _ P R E F I X } _ P A T H } " $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
N O _ D E F A U L T _ P A T H )
else ( )
# search first in known locations
if ( _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "FIRST" )
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_DEBUG
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } _ d
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S l i b l i b s
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
# search in all default paths
find_library ( ${ _PYTHON_PREFIX } _LIBRARY_DEBUG
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } _ d
N A M E S _ P E R _ D I R
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S l i b l i b s )
endif ( )
if ( ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
get_filename_component ( _ ${ _PYTHON_PREFIX } _PATH "${${_PYTHON_PREFIX}_LIBRARY_DEBUG}" DIRECTORY )
_python_find_runtime_library ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_DEBUG
N A M E S p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ N O _ D O T S } _ d
N A M E S _ P E R _ D I R
H I N T S " $ { _ $ { _ P Y T H O N _ P R E F I X } _ P A T H } " $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H _ S U F F I X E S b i n )
endif ( )
endif ( )
# Don't search for include dir until library location is known
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE OR ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
unset ( _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS )
if ( ${ _PYTHON_PREFIX } _EXECUTABLE )
# pick up include directory from configuration
execute_process ( COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c
" i m p o r t s y s ; i m p o r t s y s c o n f i g ; s y s . s t d o u t . write ( sysconfig.get_path('include' ) ) "
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ P A T H
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
file ( TO_CMAKE_PATH "${_${_PYTHON_PREFIX}_PATH}" _ ${ _PYTHON_PREFIX } _PATH )
list ( APPEND _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS "${_${_PYTHON_PREFIX}_PATH}" )
endif ( )
endif ( )
foreach ( _ ${ _PYTHON_PREFIX } _LIB IN ITEMS ${ _PYTHON_PREFIX } _LIBRARY_RELEASE ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
if ( ${ _${_PYTHON_PREFIX } _LIB} )
# Use the library's install prefix as a hint
if ( ${ _${_PYTHON_PREFIX } _LIB} MATCHES "^(.+/Frameworks/Python.framework/Versions/[0-9.]+)" )
list ( APPEND _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS "${CMAKE_MATCH_1}" )
elseif ( ${ _${_PYTHON_PREFIX } _LIB} MATCHES "^(.+)/lib(64|32)?/python[0-9.]+/config" )
list ( APPEND _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS "${CMAKE_MATCH_1}" )
elseif ( DEFINED CMAKE_LIBRARY_ARCHITECTURE AND ${ _${_PYTHON_PREFIX } _LIB} MATCHES "^(.+)/lib/${CMAKE_LIBRARY_ARCHITECTURE}" )
list ( APPEND _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS "${CMAKE_MATCH_1}" )
else ( )
# assume library is in a directory under root
get_filename_component ( _ ${ _PYTHON_PREFIX } _PREFIX "${${_${_PYTHON_PREFIX}_LIB}}" DIRECTORY )
get_filename_component ( _ ${ _PYTHON_PREFIX } _PREFIX "${_${_PYTHON_PREFIX}_PREFIX}" DIRECTORY )
list ( APPEND _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS "${_${_PYTHON_PREFIX}_PREFIX}" )
endif ( )
endif ( )
endforeach ( )
list ( REMOVE_DUPLICATES _ ${ _PYTHON_PREFIX } _INCLUDE_HINTS )
if ( APPLE AND _ ${ _PYTHON_PREFIX } _FIND_FRAMEWORK STREQUAL "FIRST" )
find_path ( ${ _PYTHON_PREFIX } _INCLUDE_DIR
N A M E S P y t h o n . h
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
P A T H _ S U F F I X E S i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
i n c l u d e
N O _ C M A K E _ P A T H
N O _ C M A K E _ E N V I R O N M E N T _ P A T H
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
if ( WIN32 AND _ ${ _PYTHON_PREFIX } _FIND_REGISTRY STREQUAL "FIRST" )
find_path ( ${ _PYTHON_PREFIX } _INCLUDE_DIR
N A M E S P y t h o n . h
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ H I N T S } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
i n c l u d e
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
find_path ( ${ _PYTHON_PREFIX } _INCLUDE_DIR
N A M E S P y t h o n . h
H I N T S $ { _ $ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ H I N T S } $ { _ $ { _ P Y T H O N _ P R E F I X } _ H I N T S }
P A T H S $ { _ _ $ { _ P Y T H O N _ P R E F I X } _ F R A M E W O R K _ P A T H S }
$ { _ _ $ { _ P Y T H O N _ P R E F I X } _ R E G I S T R Y _ P A T H S }
P A T H _ S U F F I X E S i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } m
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } u
i n c l u d e / p y t h o n $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N }
i n c l u d e
N O _ S Y S T E M _ E N V I R O N M E N T _ P A T H
N O _ C M A K E _ S Y S T E M _ P A T H )
endif ( )
if ( ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE OR ${ _PYTHON_PREFIX } _LIBRARY_DEBUG ) AND ${ _PYTHON_PREFIX } _INCLUDE_DIR )
break ( )
endif ( )
endforeach ( )
# search header file in standard locations
find_path ( ${ _PYTHON_PREFIX } _INCLUDE_DIR
N A M E S P y t h o n . h )
endif ( )
if ( ${ _PYTHON_PREFIX } _INCLUDE_DIR )
# retrieve version from header file
file ( STRINGS "${${_PYTHON_PREFIX}_INCLUDE_DIR}/patchlevel.h" _ ${ _PYTHON_PREFIX } _VERSION
R E G E X " ^ #define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
string ( REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\" ( [^\ "]+)\" .* " " \\1"
_ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N " $ { _ $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N } " )
string ( REGEX MATCHALL "[0-9]+" _ ${ _PYTHON_PREFIX } _VERSIONS "${_${_PYTHON_PREFIX}_VERSION}" )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 0 _ ${ _PYTHON_PREFIX } _VERSION_MAJOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 1 _ ${ _PYTHON_PREFIX } _VERSION_MINOR )
list ( GET _ ${ _PYTHON_PREFIX } _VERSIONS 2 _ ${ _PYTHON_PREFIX } _VERSION_PATCH )
if ( NOT ${ _PYTHON_PREFIX } _Interpreter_FOUND AND NOT ${ _PYTHON_PREFIX } _Compiler_FOUND )
# set public version information
set ( ${ _PYTHON_PREFIX } _VERSION ${ _${_PYTHON_PREFIX } _VERSION} )
set ( ${ _PYTHON_PREFIX } _VERSION_MAJOR ${ _${_PYTHON_PREFIX } _VERSION_MAJOR} )
set ( ${ _PYTHON_PREFIX } _VERSION_MINOR ${ _${_PYTHON_PREFIX } _VERSION_MINOR} )
set ( ${ _PYTHON_PREFIX } _VERSION_PATCH ${ _${_PYTHON_PREFIX } _VERSION_PATCH} )
endif ( )
endif ( )
# define public variables
include ( ${ CMAKE_CURRENT_LIST_DIR } /../SelectLibraryConfigurations.cmake )
select_library_configurations ( ${ _PYTHON_PREFIX } )
if ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_RELEASE )
set ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_RELEASE}" )
elseif ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_DEBUG )
set ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY "${${_PYTHON_PREFIX}_RUNTIME_LIBRARY_DEBUG}" )
else ( )
set ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY "$${_PYTHON_PREFIX}_RUNTIME_LIBRARY-NOTFOUND" )
endif ( )
_python_set_library_dirs ( ${ _PYTHON_PREFIX } _LIBRARY_DIRS
$ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ R E L E A S E $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ D E B U G )
if ( UNIX )
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
O R $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ R E L E A S E M A T C H E S " $ { C M A K E _ S H A R E D _ L I B R A R Y _ S U F F I X } $ " )
set ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_DIRS ${ ${_PYTHON_PREFIX } _LIBRARY_DIRS} )
endif ( )
else ( )
_python_set_library_dirs ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_DIRS
$ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ R E L E A S E $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ D E B U G )
endif ( )
set ( ${ _PYTHON_PREFIX } _INCLUDE_DIRS "${${_PYTHON_PREFIX}_INCLUDE_DIR}" )
mark_as_advanced ( ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_RELEASE
$ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ D E B U G
$ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R )
if ( ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE OR ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
A N D $ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R )
if ( ${ _PYTHON_PREFIX } _Interpreter_FOUND OR ${ _PYTHON_PREFIX } _Compiler_FOUND )
# development environment must be compatible with interpreter/compiler
if ( ${ _${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ _${_PYTHON_PREFIX } _VERSION_MINOR} VERSION_EQUAL ${ ${_PYTHON_PREFIX } _VERSION_MAJOR}. ${ ${_PYTHON_PREFIX } _VERSION_MINOR} )
set ( ${ _PYTHON_PREFIX } _Development_FOUND TRUE )
endif ( )
elseif ( ${ _PYTHON_PREFIX } _VERSION_MAJOR VERSION_EQUAL _ ${ _PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR )
set ( ${ _PYTHON_PREFIX } _Development_FOUND TRUE )
endif ( )
endif ( )
# Restore the original find library ordering
if ( DEFINED _ ${ _PYTHON_PREFIX } _CMAKE_FIND_LIBRARY_SUFFIXES )
set ( CMAKE_FIND_LIBRARY_SUFFIXES ${ _${_PYTHON_PREFIX } _CMAKE_FIND_LIBRARY_SUFFIXES} )
endif ( )
endif ( )
# final validation
if ( ${ _PYTHON_PREFIX } _VERSION_MAJOR AND
N O T $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N _ M A J O R V E R S I O N _ E Q U A L _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V E R S I O N _ M A J O R )
_python_display_failure ( "Could NOT find ${_PYTHON_PREFIX}: Found unsuitable major version \" ${ ${_PYTHON_PREFIX } _VERSION_MAJOR}\ ", but required major version is exact version \" ${ _${_PYTHON_PREFIX } _REQUIRED_VERSION_MAJOR}\ "" )
endif ( )
include ( ${ CMAKE_CURRENT_LIST_DIR } /../FindPackageHandleStandardArgs.cmake )
find_package_handle_standard_args ( ${ _PYTHON_PREFIX }
R E Q U I R E D _ V A R S $ { _ $ { _ P Y T H O N _ P R E F I X } _ R E Q U I R E D _ V A R S }
V E R S I O N _ V A R $ { _ P Y T H O N _ P R E F I X } _ V E R S I O N
H A N D L E _ C O M P O N E N T S )
# Create imported targets and helper functions
if ( "Interpreter" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS
A N D $ { _ P Y T H O N _ P R E F I X } _ I n t e r p r e t e r _ F O U N D
A N D N O T T A R G E T $ { _ P Y T H O N _ P R E F I X } : : I n t e r p r e t e r )
add_executable ( ${ _PYTHON_PREFIX } ::Interpreter IMPORTED )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Interpreter
P R O P E R T Y I M P O R T E D _ L O C A T I O N " $ { $ { _ P Y T H O N _ P R E F I X } _ E X E C U T A B L E } " )
endif ( )
if ( "Compiler" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS
A N D $ { _ P Y T H O N _ P R E F I X } _ C o m p i l e r _ F O U N D
A N D N O T T A R G E T $ { _ P Y T H O N _ P R E F I X } : : C o m p i l e r )
add_executable ( ${ _PYTHON_PREFIX } ::Compiler IMPORTED )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Compiler
P R O P E R T Y I M P O R T E D _ L O C A T I O N " $ { $ { _ P Y T H O N _ P R E F I X } _ C O M P I L E R } " )
endif ( )
if ( "Development" IN_LIST ${ _PYTHON_PREFIX } _FIND_COMPONENTS
A N D $ { _ P Y T H O N _ P R E F I X } _ D e v e l o p m e n t _ F O U N D A N D N O T T A R G E T $ { _ P Y T H O N _ P R E F I X } : : P y t h o n )
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE MATCHES "${CMAKE_SHARED_LIBRARY_SUFFIX}$"
O R $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ D E B U G M A T C H E S " $ { C M A K E _ S H A R E D _ L I B R A R Y _ S U F F I X } $ "
O R $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ R E L E A S E O R $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ D E B U G )
set ( _ ${ _PYTHON_PREFIX } _LIBRARY_TYPE SHARED )
else ( )
set ( _ ${ _PYTHON_PREFIX } _LIBRARY_TYPE STATIC )
endif ( )
add_library ( ${ _PYTHON_PREFIX } ::Python ${ _${_PYTHON_PREFIX } _LIBRARY_TYPE} IMPORTED )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Python
P R O P E R T Y I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S " $ { $ { _ P Y T H O N _ P R E F I X } _ I N C L U D E _ D I R } " )
if ( ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE AND ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_RELEASE )
OR ( ${ _PYTHON_PREFIX } _LIBRARY_DEBUG AND ${ _PYTHON_PREFIX } _RUNTIME_LIBRARY_DEBUG ) )
# System manage shared libraries in two parts: import and runtime
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE AND ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ R E L E A S E " C "
I M P O R T E D _ I M P L I B _ R E L E A S E " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ R E L E A S E } "
I M P O R T E D _ L O C A T I O N _ R E L E A S E " $ { $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ R E L E A S E } " )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ D E B U G " C "
I M P O R T E D _ I M P L I B _ D E B U G " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ D E B U G } "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y _ D E B U G } " )
else ( )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S " C "
I M P O R T E D _ I M P L I B " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y } "
I M P O R T E D _ L O C A T I O N " $ { $ { _ P Y T H O N _ P R E F I X } _ R U N T I M E _ L I B R A R Y } " )
endif ( )
else ( )
if ( ${ _PYTHON_PREFIX } _LIBRARY_RELEASE AND ${ _PYTHON_PREFIX } _LIBRARY_DEBUG )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Python PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ R E L E A S E " C "
I M P O R T E D _ L O C A T I O N _ R E L E A S E " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ R E L E A S E } " )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S _ D E B U G " C "
I M P O R T E D _ L O C A T I O N _ D E B U G " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y _ D E B U G } " )
else ( )
set_target_properties ( ${ _PYTHON_PREFIX } ::Python
P R O P E R T I E S I M P O R T E D _ L I N K _ I N T E R F A C E _ L A N G U A G E S " C "
I M P O R T E D _ L O C A T I O N " $ { $ { _ P Y T H O N _ P R E F I X } _ L I B R A R Y } " )
endif ( )
endif ( )
if ( _ ${ _PYTHON_PREFIX } _CONFIG AND _ ${ _PYTHON_PREFIX } _LIBRARY_TYPE STREQUAL "STATIC" )
# extend link information with dependent libraries
execute_process ( COMMAND "${_${_PYTHON_PREFIX}_CONFIG}" --ldflags
R E S U L T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ R E S U L T
O U T P U T _ V A R I A B L E _ $ { _ P Y T H O N _ P R E F I X } _ F L A G S
E R R O R _ Q U I E T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
if ( NOT _ ${ _PYTHON_PREFIX } _RESULT )
string ( REGEX MATCHALL "-[Ll][^ ]+" _ ${ _PYTHON_PREFIX } _LINK_LIBRARIES "${_${_PYTHON_PREFIX}_FLAGS}" )
# remove elements relative to python library itself
list ( FILTER _ ${ _PYTHON_PREFIX } _LINK_LIBRARIES EXCLUDE REGEX "-lpython" )
foreach ( _ ${ _PYTHON_PREFIX } _DIR IN LISTS ${ _PYTHON_PREFIX } _LIBRARY_DIRS )
list ( FILTER _ ${ _PYTHON_PREFIX } _LINK_LIBRARIES EXCLUDE REGEX "-L${${_PYTHON_PREFIX}_DIR}" )
endforeach ( )
set_property ( TARGET ${ _PYTHON_PREFIX } ::Python
P R O P E R T Y I N T E R F A C E _ L I N K _ L I B R A R I E S $ { _ $ { _ P Y T H O N _ P R E F I X } _ L I N K _ L I B R A R I E S } )
endif ( )
endif ( )
#
# PYTHON_ADD_LIBRARY (<name> [STATIC|SHARED|MODULE] src1 src2 ... srcN)
# It is used to build modules for python.
#
function ( __ ${ _PYTHON_PREFIX } _ADD_LIBRARY prefix name )
cmake_parse_arguments ( PARSE_ARGV 2 PYTHON_ADD_LIBRARY
" S T A T I C ; S H A R E D ; M O D U L E " " " " " )
unset ( type )
if ( NOT ( PYTHON_ADD_LIBRARY_STATIC
O R P Y T H O N _ A D D _ L I B R A R Y _ S H A R E D
O R P Y T H O N _ A D D _ L I B R A R Y _ M O D U L E ) )
set ( type MODULE )
endif ( )
add_library ( ${ name } ${ type } ${ ARGN } )
target_link_libraries ( ${ name } PRIVATE ${ prefix } ::Python )
# customize library name to follow module name rules
get_property ( type TARGET ${ name } PROPERTY TYPE )
if ( type STREQUAL "MODULE_LIBRARY" )
set_property ( TARGET ${ name } PROPERTY PREFIX "" )
if ( CMAKE_SYSTEM_NAME STREQUAL "Windows" )
set_property ( TARGET ${ name } PROPERTY SUFFIX ".pyd" )
endif ( )
endif ( )
endfunction ( )
endif ( )
# final clean-up
# Restore CMAKE_FIND_APPBUNDLE
if ( DEFINED _ ${ _PYTHON_PREFIX } _CMAKE_FIND_APPBUNDLE )
set ( CMAKE_FIND_APPBUNDLE ${ _${_PYTHON_PREFIX } _CMAKE_FIND_APPBUNDLE} )
unset ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_APPBUNDLE )
else ( )
unset ( CMAKE_FIND_APPBUNDLE )
endif ( )
# Restore CMAKE_FIND_FRAMEWORK
if ( DEFINED _ ${ _PYTHON_PREFIX } _CMAKE_FIND_FRAMEWORK )
set ( CMAKE_FIND_FRAMEWORK ${ _${_PYTHON_PREFIX } _CMAKE_FIND_FRAMEWORK} )
unset ( _ ${ _PYTHON_PREFIX } _CMAKE_FIND_FRAMEWORK )
else ( )
unset ( CMAKE_FIND_FRAMEWORK )
endif ( )
unset ( _ ${ _PYTHON_PREFIX } _CONFIG CACHE )