python/CMakeLists.txt: rework Python development files detection
[libftdi] / python / CMakeLists.txt
CommitLineData
68d2167b 1# workaround for cmake bug #0013449
019f4846
TJ
2if (NOT DEFINED CMAKE_FIND_ROOT_PATH OR NOT CMAKE_VERSION VERSION_LESS 3.0.0)
3 find_package(SWIG REQUIRED)
68d2167b 4else ()
019f4846
TJ
5 find_program(SWIG_EXECUTABLE NAMES swig2.0 swig)
6 if (SWIG_EXECUTABLE)
7 set(SWIG_USE_FILE ${CMAKE_ROOT}/Modules/UseSWIG.cmake)
8 set(SWIG_FOUND TRUE)
9 endif ()
e4e406b4 10endif ()
f7ed9dd3 11find_package(Python3 COMPONENTS Interpreter Development)
e4e406b4 12
019f4846
TJ
13include(UseSWIG)
14include_directories(BEFORE ${PROJECT_SOURCE_DIR}/src)
f7ed9dd3 15include_directories(${Python3_INCLUDE_DIRS})
019f4846 16link_directories(${CMAKE_CURRENT_BINARY_DIR}/../src)
e4e406b4 17
019f4846
TJ
18if (DOCUMENTATION)
19 set(CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
20 # manually add dependency for new cmake / swig versions
21 set_property(SOURCE ftdi1.i PROPERTY DEPENDS doc_i)
22endif ()
23swig_add_library(pyftdi1 LANGUAGE python SOURCES ftdi1.i)
24swig_link_libraries(pyftdi1 ftdi1)
e4e406b4 25
019f4846
TJ
26if (LINK_PYTHON_LIBRARY)
27 swig_link_libraries(pyftdi1 ${PYTHON_LIBRARIES})
28elseif (APPLE)
29 set_target_properties(pyftdi1 PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
68d2167b 30endif ()
d0c11961 31
019f4846 32set_target_properties(pyftdi1 PROPERTIES NO_SONAME ON)
d0c11961 33
f7ed9dd3 34execute_process(COMMAND ${Python3_EXECUTABLE} -c "import sysconfig; print( sysconfig.get_path( 'platlib', vars={'platbase': '${CMAKE_INSTALL_PREFIX}'} ) )"
019f4846
TJ
35 OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
36 OUTPUT_STRIP_TRAILING_WHITESPACE)
d0c11961 37
019f4846
TJ
38get_filename_component(_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
39file(RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
d0c11961 40
019f4846 41set(PYTHON_MODULE_PATH ${_REL_PYTHON_MODULE_PATH})
d0c11961 42
019f4846
TJ
43install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ftdi1.py DESTINATION ${PYTHON_MODULE_PATH})
44install(TARGETS pyftdi1 LIBRARY DESTINATION ${PYTHON_MODULE_PATH})
e4e406b4 45
019f4846
TJ
46if (DOCUMENTATION)
47 # Run doxygen to only generate the xml
48 add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/doc/xml/ftdi_8c.xml
49 COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/doc/Doxyfile.xml
50 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
51 COMMENT "Generating ftdi_8c.xml"
52 DEPENDS ${c_headers};${c_sources};${cpp_sources};${cpp_headers}
53 )
e4e406b4 54
019f4846
TJ
55 # generate .i from doxygen .xml
56 add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
f7ed9dd3 57 COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
019f4846
TJ
58 ${PROJECT_BINARY_DIR}/doc/xml/ftdi_8c.xml
59 ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
60 COMMENT "Generating ftdi1_doc.i from ftdi_8c.xml"
61 DEPENDS ${PROJECT_BINARY_DIR}/doc/xml/ftdi_8c.xml
62 )
63 add_custom_target(doc_i
64 COMMENT "Python API bindings documentation"
65 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
66 )
67 add_dependencies(pyftdi1 doc_i)
e4e406b4 68
019f4846 69endif (DOCUMENTATION)
d0c11961 70
019f4846
TJ
71set(LIBFTDI_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/${PYTHON_MODULE_PATH})
72set(LIBFTDI_PYTHON_MODULE_PATH ${LIBFTDI_PYTHON_MODULE_PATH} PARENT_SCOPE) # for ftdiconfig.cmake
c5285326 73
019f4846 74add_subdirectory(examples)