d312faef38746493b98fea7aa026741499dd9d9a
[libftdi] / python / CMakeLists.txt
1 # workaround for cmake bug #0013449
2 if (NOT DEFINED CMAKE_FIND_ROOT_PATH OR NOT CMAKE_VERSION VERSION_LESS 3.0.0)
3     find_package(SWIG REQUIRED)
4 else ()
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 ()
10 endif ()
11 find_package(Python3 COMPONENTS Interpreter Development)
12
13 include(UseSWIG)
14 include_directories(BEFORE ${PROJECT_SOURCE_DIR}/src)
15 include_directories(${Python3_INCLUDE_DIRS})
16 link_directories(${CMAKE_CURRENT_BINARY_DIR}/../src)
17
18 if (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)
22 endif ()
23 swig_add_library(pyftdi1 LANGUAGE python SOURCES ftdi1.i)
24 swig_link_libraries(pyftdi1 ftdi1)
25
26 if (LINK_PYTHON_LIBRARY)
27     swig_link_libraries(pyftdi1 ${PYTHON_LIBRARIES})
28 elseif (APPLE)
29     set_target_properties(pyftdi1 PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
30 endif ()
31
32 set_target_properties(pyftdi1 PROPERTIES NO_SONAME ON)
33
34 execute_process(COMMAND ${Python3_EXECUTABLE} -c "import sysconfig; print( sysconfig.get_path( 'platlib', vars={'platbase': '${CMAKE_INSTALL_PREFIX}'} ) )"
35         OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
36         OUTPUT_STRIP_TRAILING_WHITESPACE)
37
38 get_filename_component(_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE)
39 file(RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH})
40
41 set(PYTHON_MODULE_PATH ${_REL_PYTHON_MODULE_PATH})
42
43 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ftdi1.py DESTINATION ${PYTHON_MODULE_PATH})
44 install(TARGETS pyftdi1 LIBRARY DESTINATION ${PYTHON_MODULE_PATH})
45
46 if (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     )
54
55     # generate .i from doxygen .xml
56     add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
57             COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
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)
68
69 endif (DOCUMENTATION)
70
71 set(LIBFTDI_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/${PYTHON_MODULE_PATH})
72 set(LIBFTDI_PYTHON_MODULE_PATH ${LIBFTDI_PYTHON_MODULE_PATH} PARENT_SCOPE) # for ftdiconfig.cmake
73
74 add_subdirectory(examples)