Skip to content

Commit 3579e20

Browse files
committed
py3k: Allow build Python wrapper on 2 and/or 3.
Signed-off-by: Elliott Sales de Andrade <[email protected]>
1 parent 244a326 commit 3579e20

File tree

2 files changed

+56
-18
lines changed

2 files changed

+56
-18
lines changed

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
######################################################################################
3232

3333
cmake_minimum_required(VERSION 2.6)
34-
set(PYTHON_EXECUTABLE "python2")
3534

3635
######################################################################################
3736
# Project declaration and options
@@ -61,7 +60,9 @@ OPTION(BUILD_C_SYNC "Build c synchronous library" ON)
6160
OPTION(BUILD_CPP "Build C++ Library (currently header only)" ON)
6261
OPTION(BUILD_CV "Build OpenCV wrapper" OFF)
6362
OPTION(BUILD_AS3_SERVER "Build the Actionscript 3 Server Example" OFF)
64-
OPTION(BUILD_PYTHON "Build Python extension" OFF)
63+
OPTION(BUILD_PYTHON "Build Python extensions" OFF)
64+
OPTION(BUILD_PYTHON2 "Build Python 2 extension" OFF)
65+
OPTION(BUILD_PYTHON3 "Build Python 3 extension" OFF)
6566
OPTION(BUILD_OPENNI2_DRIVER "Build libfreenect driver for OpenNI2" OFF)
6667
IF(PROJECT_OS_LINUX)
6768
OPTION(BUILD_CPACK_DEB "Build an DEB using CPack" OFF)
@@ -157,6 +158,10 @@ IF(BUILD_AS3_SERVER)
157158
ENDIF()
158159

159160
IF(BUILD_PYTHON)
161+
set(BUILD_PYTHON2 ON)
162+
set(BUILD_PYTHON3 ON)
163+
ENDIF()
164+
IF(BUILD_PYTHON2 OR BUILD_PYTHON3)
160165
add_subdirectory (wrappers/python)
161166
ENDIF()
162167

wrappers/python/CMakeLists.txt

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,71 @@
22
# Python extension builder
33
######################################################################################
44

5-
include(FindPythonInterp)
6-
include(FindPythonLibs)
5+
macro(Python_BUILD_EXTENSION Python_BUILD_VERSION)
76

7+
set(Python_ADDITIONAL_VERSIONS ${Python_BUILD_VERSION})
8+
find_package(PythonInterp)
9+
set(PYTHON${Python_BUILD_VERSION}INTERP_FOUND ${PYTHONINTERP_FOUND})
10+
set(PYTHON${Python_BUILD_VERSION}_EXECUTABLE ${PYTHON_EXECUTABLE})
11+
set(PYTHON${Python_BUILD_VERSION}_VERSION_STRING ${PYTHON_VERSION_STRING})
12+
set(PYTHON${Python_BUILD_VERSION}_VERSION_MAJOR ${PYTHON_VERSION_MAJOR})
13+
set(PYTHON${Python_BUILD_VERSION}_VERSION_MINOR ${PYTHON_VERSION_MINOR})
14+
set(PYTHON${Python_BUILD_VERSION}_VERSION_PATCH ${PYTHON_VERSION_PATCH})
15+
find_package(PythonLibs)
16+
set(PYTHON${Python_BUILD_VERSION}LIBS_FOUND ${PYTHONLIBS_FOUND})
17+
set(PYTHON${Python_BUILD_VERSION}LIBS_VERSION_STRING ${PYTHONLIBS_VERSION_STRING})
18+
set(PYTHON${Python_BUILD_VERSION}_DEBUG_LIBRARIES ${PYTHON_DEBUG_LIBRARIES})
19+
set(PYTHON${Python_BUILD_VERSION}_INCLUDE_PATH ${PYTHON_INCLUDE_PATH})
20+
set(PYTHON${Python_BUILD_VERSION}_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
21+
set(PYTHON${Python_BUILD_VERSION}_LIBRARIES ${PYTHON_LIBRARIES})
822
find_program(CYTHON_EXECUTABLE cython)
923

1024
# Figure out installation path
1125
execute_process(COMMAND
12-
${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(prefix='${CMAKE_INSTALL_PREFIX}'))"
13-
OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
26+
${PYTHON${Python_BUILD_VERSION}_EXECUTABLE}
27+
-c "from distutils.sysconfig import get_python_lib; print(get_python_lib(prefix='${CMAKE_INSTALL_PREFIX}'))"
28+
OUTPUT_VARIABLE PYTHON${Python_BUILD_VERSION}_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
1429

1530
# Figure out numpy include path
1631
execute_process(COMMAND
17-
${PYTHON_EXECUTABLE} -c "import numpy; print(numpy.get_include())"
18-
OUTPUT_VARIABLE NUMPY_INCLUDE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
32+
${PYTHON${Python_BUILD_VERSION}_EXECUTABLE}
33+
-c "import numpy; print(numpy.get_include())"
34+
OUTPUT_VARIABLE PYTHON${Python_BUILD_VERSION}_NUMPY_INCLUDE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
1935

2036
# How to Cython the .pyx file
21-
add_custom_command(OUTPUT freenect.c
22-
COMMAND ${CYTHON_EXECUTABLE} -o freenect.c "${CMAKE_CURRENT_SOURCE_DIR}/freenect.pyx")
23-
list(APPEND ADDITIONAL_MAKE_CLEAN_FILES freenect.c)
37+
add_custom_command(OUTPUT freenect${Python_BUILD_VERSION}.c
38+
COMMAND
39+
${CYTHON_EXECUTABLE}
40+
-${Python_BUILD_VERSION}
41+
-o freenect${Python_BUILD_VERSION}.c
42+
"${CMAKE_CURRENT_SOURCE_DIR}/freenect.pyx")
43+
list(APPEND ADDITIONAL_MAKE_CLEAN_FILES freenect${Python_BUILD_VERSION}.c)
2444

2545
# Compile the extension
26-
add_library(cython_freenect MODULE freenect.c)
27-
set_target_properties(cython_freenect PROPERTIES
46+
add_library(cython${Python_BUILD_VERSION}_freenect MODULE freenect${Python_BUILD_VERSION}.c)
47+
set_target_properties(cython${Python_BUILD_VERSION}_freenect PROPERTIES
2848
PREFIX ""
2949
OUTPUT_NAME "freenect"
30-
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
31-
target_link_libraries(cython_freenect freenect_sync ${PYTHON_LIBRARIES})
32-
include_directories(${PYTHON_INCLUDE_PATH} ../c_sync/ ${NUMPY_INCLUDE_PATH})
50+
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/python${Python_BUILD_VERSION})
51+
target_link_libraries(cython${Python_BUILD_VERSION}_freenect
52+
freenect_sync
53+
${PYTHON${Python_BUILD_VERSION}_LIBRARIES})
54+
target_include_directories(cython${Python_BUILD_VERSION}_freenect PRIVATE
55+
${PYTHON${Python_BUILD_VERSION}_INCLUDE_PATH}
56+
../c_sync/
57+
${PYTHON${Python_BUILD_VERSION}_NUMPY_INCLUDE_PATH})
3358

3459
# Install the extension
35-
install(TARGETS cython_freenect
36-
DESTINATION ${PYTHON_SITE_PACKAGES})
60+
install(TARGETS cython${Python_BUILD_VERSION}_freenect
61+
DESTINATION ${PYTHON${Python_BUILD_VERSION}_SITE_PACKAGES})
3762

3863
# TODO: decide on what to do with demo_ scripts and were to install
3964
# them
65+
endmacro(Python_BUILD_EXTENSION)
66+
67+
if (BUILD_PYTHON2)
68+
Python_BUILD_EXTENSION(2)
69+
endif(BUILD_PYTHON2)
70+
if (BUILD_PYTHON3)
71+
Python_BUILD_EXTENSION(3)
72+
endif(BUILD_PYTHON3)

0 commit comments

Comments
 (0)