-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathFindBoostPython.cmake
More file actions
134 lines (94 loc) · 4.36 KB
/
FindBoostPython.cmake
File metadata and controls
134 lines (94 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# - Try to find the a valid boost+python combination
# Once done this will define
#
# BOOST_PYTHON_FOUND - system has a valid boost+python combination
# BOOST_PYTHON_INCLUDES - the include directory for boost+python
# BOOST_PYTHON_LIBS - the needed libs for boost+python
# Copyright (c) 2006, Pino Toscano, <toscano.pino@tiscali.it>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
if(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS)
# Already in cache, be silent
set(BOOST_PYTHON_FIND_QUIETLY TRUE)
endif(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS)
# some needed includes
include(CheckCXXSourceCompiles)
include(CheckIncludeFileCXX)
include(CheckLibraryExists)
# reset vars
set(BOOST_PYTHON_INCLUDES)
set(BOOST_PYTHON_LIBS)
# handy arrays
set(PYTHON_VERSIONS "python;python2.6;python2.7;python2.4;python2.3;python2.2")
set(PYTHON_INCLUDE_DIRS "/usr/include/$pyver;/usr/local/include/$pyver;/usr/$pyver/include;/usr/local/$pyver/include;$prefix/include/$pyver;$prefix/$pyver/include")
set(PYTHON_LIBRARY_DIRS "/usr/lib${LIB_SUFFIX};/usr/local/lib${LIB_SUFFIX};/usr/lib${LIB_SUFFIX}/$pyver/config")
set(PYTHON_LIBS "boost_python-gcc-mt;boost_python-mt;boost_python-gcc-mt-1_33;boost_python-gcc-mt-1_33_1;boost_python;boost_python-gcc-mt-1_32;boost_python")
# 1st: check for boost/shared_ptr.hpp
check_include_file_cxx(boost/shared_ptr.hpp HAVE_BOOST_SHARED_PTR_HPP)
if(HAVE_BOOST_SHARED_PTR_HPP)
set(_found FALSE)
# save the old flags and setting the new ones
set(_save_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}")
foreach(_pyver ${PYTHON_VERSIONS})
if(NOT _found)
foreach(_pydir ${PYTHON_INCLUDE_DIRS})
if(NOT _found)
string(REPLACE "$pyver" "${_pyver}" _pydir ${_pydir})
string(REPLACE "$prefix" "${CMAKE_INSTALL_PREFIX}" _pydir ${_pydir})
if(EXISTS ${_pydir})
if(EXISTS ${_pydir}/Python.h)
foreach(_pylibdir ${PYTHON_LIBRARY_DIRS})
if(NOT _found)
string(REPLACE "$pyver" ${_pyver} _pylibdir ${_pylibdir})
foreach(_pblib ${PYTHON_LIBS})
if(NOT _found)
set(CMAKE_REQUIRED_FLAGS "-L${_pylibdir}")
set(CMAKE_REQUIRED_INCLUDES ${_pydir})
set(CMAKE_REQUIRED_LIBRARIES ${_pblib} ${_pyver})
check_cxx_source_compiles("
#include <boost/python.hpp>
const char* greet() { return \"Hello world!\"; }
BOOST_PYTHON_MODULE(hello) { boost::python::def(\"greet\", greet); }
int main() { return 0; }
// some vars, in case of the compilation fail...
// python include dir: ${_pydir}
// python lib dir: ${_pylibdir}
// boost python lib: ${_pblib}
" boost_python_${_pylibdir}_${_pydir}_${_pblib}_compile )
set(CMAKE_REQUIRED_FLAGS)
set(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_LIBRARIES)
if(boost_python_${_pylibdir}_${_pydir}_${_pblib}_compile)
set(_found TRUE)
set(BOOST_PYTHON_INCLUDES ${_pydir})
set(BOOST_PYTHON_LIBS "-l${_pyver} -L${_pylibdir} -l${_pblib}")
endif(boost_python_${_pylibdir}_${_pydir}_${_pblib}_compile)
endif(NOT _found)
endforeach(_pblib ${PYTHON_LIBS})
endif(NOT _found)
endforeach(_pylibdir ${PYTHON_LIBRARY_DIRS})
endif(EXISTS ${_pydir}/Python.h)
endif(EXISTS ${_pydir})
endif(NOT _found)
endforeach(_pydir ${PYTHON_INCLUDE_DIRS})
endif(NOT _found)
endforeach(_pyver ${PYTHON_VERSIONS})
set(CMAKE_CXX_FLAGS ${_save_CMAKE_CXX_FLAGS})
endif(HAVE_BOOST_SHARED_PTR_HPP)
if(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS)
set(BOOST_PYTHON_FOUND TRUE)
endif(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS)
if(BOOST_PYTHON_FOUND)
if(NOT BoostPython_FIND_QUIETLY)
message(STATUS "Found Boost+Python: ${BOOST_PYTHON_LIBS}")
endif(NOT BoostPython_FIND_QUIETLY)
set(KIG_ENABLE_PYTHON_SCRIPTING 1)
else (BOOST_PYTHON_FOUND)
if (BoostPython_FIND_REQUIRED)
message(FATAL_ERROR "Could NOT find Boost+Python")
endif(BoostPython_FIND_REQUIRED)
set(KIG_ENABLE_PYTHON_SCRIPTING 0)
endif(BOOST_PYTHON_FOUND)
mark_as_advanced(BOOST_PYTHON_INCLUDES BOOST_PYTHON_LIBS)