1
# Locate PyCXX headers and source files
10
# The PYCXX_*_DIR variables can be set to tell this module where
14
# There's no standard location for PyCXX.
16
# The authors' example is to put it in "~\" [sic].
18
# Ubuntu puts the includes into /usr/include/python2.7/CXX and sources into
19
# /usr/share/python2.7/CXX.
21
# The Zultron Fedora RPM does the same as Ubuntu.
25
# find the header directory
27
# headers better be in there
28
if(NOT EXISTS "${PYCXX_INCLUDE_DIR}/CXX/Config.hxx")
29
if(PyCXX_FIND_REQUIRED)
31
"PyCXX: could not find CXX/Config.hxx in PYCXX_INCLUDE_DIR "
32
"${PYCXX_INCLUDE_DIR}")
33
else(PyCXX_FIND_REQUIRED)
35
"PyCXX: could not find CXX/Config.hxx in PYCXX_INCLUDE_DIR "
36
"${PYCXX_INCLUDE_DIR}")
38
endif(PyCXX_FIND_REQUIRED)
39
endif(NOT EXISTS "${PYCXX_INCLUDE_DIR}/CXX/Config.hxx")
40
else(PYCXX_INCLUDE_DIR)
41
# check in 'standard' places
42
find_path(PYCXX_INCLUDE_DIR CXX/Config.hxx
44
"${CMAKE_CURRENT_LIST_DIR}/..")
45
if(NOT PYCXX_INCLUDE_DIR)
46
if(PyCXX_FIND_REQUIRED)
48
"PyCXX not found; please set PYCXX_INCLUDE_DIR to "
49
"the location of CXX/Config.hxx")
50
else(PyCXX_FIND_REQUIRED)
51
MESSAGE(STATUS "PyCXX not found")
53
endif(PyCXX_FIND_REQUIRED)
54
endif(NOT PYCXX_INCLUDE_DIR)
55
endif(PYCXX_INCLUDE_DIR)
57
# find the sources directory
59
# source directory specified, they'd better be there
60
if(NOT EXISTS "${PYCXX_SOURCE_DIR}/cxxextensions.c")
61
if(PyCXX_FIND_REQUIRED)
63
"PyCXX: cxxextensions.c not found in PYCXX_SOURCE_DIR "
64
"${PYCXX_SOURCE_DIR}")
65
else(PyCXX_FIND_REQUIRED)
67
"PyCXX: cxxextensions.c not found in PYCXX_SOURCE_DIR "
68
"${PYCXX_SOURCE_DIR}")
70
endif(PyCXX_FIND_REQUIRED)
71
endif(NOT EXISTS "${PYCXX_SOURCE_DIR}/cxxextensions.c")
73
# check in 'standard' places
74
find_path(PYCXX_SOURCE_DIR cxxextensions.c
75
"${PYCXX_INCLUDE_DIR}/CXX"
76
"${PYCXX_INCLUDE_DIR}/Src"
77
"${PYTHON_INCLUDE_DIR}/CXX"
78
"${PYTHON_INCLUDE_DIR}/Src"
79
"${CMAKE_CURRENT_LIST_DIR}/../Src"
80
"${CMAKE_CURRENT_LIST_DIR}/../CXX")
81
if(NOT PYCXX_SOURCE_DIR)
82
if(PyCXX_FIND_REQUIRED)
84
"PyCXX not found; please set PYCXX_SOURCE_DIR to "
85
"the location of cxxextensions.c")
86
else(PyCXX_FIND_REQUIRED)
87
MESSAGE(STATUS "PyCXX not found")
89
endif(PyCXX_FIND_REQUIRED)
90
endif(NOT PYCXX_SOURCE_DIR)
91
endif(PYCXX_SOURCE_DIR)
94
if(PYCXX_INCLUDE_DIR AND PYCXX_SOURCE_DIR)
95
file(READ ${PYCXX_INCLUDE_DIR}/CXX/Version.hxx PYCXX_VERSION_H)
96
foreach(item IN ITEMS MAJOR MINOR PATCH)
98
".*#define[ \t]+PYCXX_VERSION_${item}[ \t]+([0-9]+).*"
99
"\\1" PYCXX_VERSION_${item}
103
set(PYCXX_VERSION ${PYCXX_VERSION_MAJOR}.${PYCXX_VERSION_MINOR}.${PYCXX_VERSION_PATCH})
108
MESSAGE(STATUS "PyCXX found:")
109
MESSAGE(STATUS " Headers: ${PYCXX_INCLUDE_DIR}")
110
MESSAGE(STATUS " Sources: ${PYCXX_SOURCE_DIR}")
111
MESSAGE(STATUS " Version: ${PYCXX_VERSION}")
113
# Build the list of sources for convenience
115
${PYCXX_SOURCE_DIR}/cxxextensions.c
116
${PYCXX_SOURCE_DIR}/cxx_extensions.cxx
117
${PYCXX_SOURCE_DIR}/cxxsupport.cxx
118
${PYCXX_SOURCE_DIR}/IndirectPythonInterface.cxx
121
#set old 6.2 pycxx compatibility
122
list(APPEND PYCXX_SOURCES ${PYCXX_SOURCE_DIR}/cxx_exceptions.cxx)
123
add_definitions(-DPYCXX_6_2_COMPATIBILITY)
124
#end old compatibility
126
MESSAGE(STATUS "PyCXX not found")