|
| 1 | +set (CURRENT_PACKAGE_NAME "QtPython3_v2") |
| 2 | +set (CURRENT_PACKAGE_MACRO_NAME "QT_PYTHON_3_V2") |
| 3 | + |
| 4 | +find_package (GUIToolkitsVariables 1.7 REQUIRED) |
| 5 | + |
| 6 | +include (${CMAKE_SOURCE_DIR}/cmake/version.cmake) |
| 7 | +include (${GUIToolkitsVariables_CMAKE_DIR}/common.cmake) |
| 8 | +include (${GUIToolkitsVariables_CMAKE_DIR}/common_qt.cmake) # QT_MAJOR |
| 9 | +include (${GUIToolkitsVariables_CMAKE_DIR}/python_binding.cmake) |
| 10 | +include (${GUIToolkitsVariables_CMAKE_DIR}/workarounds.cmake) |
| 11 | +include (${GUIToolkitsVariables_CMAKE_DIR}/utilities.cmake) |
| 12 | + |
| 13 | +# Le répertoire des scripts python : |
| 14 | +set (QT_PYTHON_SCRIPTS_DIR "${CMAKE_INSTALL_PREFIX}/${PYTHON_BINDING_DIR}") |
| 15 | + |
| 16 | +find_package (QtUtil 6 REQUIRED) |
| 17 | +find_package (PythonUtil 6 REQUIRED) |
| 18 | +find_package(Qt${QT_MAJOR}Core NO_CMAKE_SYSTEM_PATH) # In order to enable moc ... |
| 19 | + |
| 20 | +file (GLOB HEADERS public/${CURRENT_PACKAGE_NAME}/*.h) |
| 21 | +file (GLOB CPP_SOURCES *.cpp *.qrc) |
| 22 | +file (GLOB PRIVATE_HEADERS include/pyconsole/*.h) |
| 23 | + |
| 24 | +# On ajoute les en-têtes aux sources. C'est utile pour cmake dans certains cas, |
| 25 | +# par exemple lorsqu'ils doivent être pré-processés (moc, ...). |
| 26 | +add_library (QtPython3_v2 ${CPP_SOURCES} ${HEADERS} ${PRIVATE_HEADERS}) |
| 27 | +set_property (TARGET QtPython3_v2 PROPERTY AUTOMOC ON) |
| 28 | +set_property (TARGET QtPython3_v2 PROPERTY AUTORCC ON) |
| 29 | +set (ALL_TARGETS QtPython3_v2) |
| 30 | +set_property (TARGET QtPython3_v2 PROPERTY VERSION ${QT_PYTHON_3_VERSION}) |
| 31 | +set_property (TARGET QtPython3_v2 PROPERTY SOVERSION ${QT_PYTHON_3_MAJOR_VERSION}) |
| 32 | +set (QT_LIB_DEPENDENCIES Qt${QT_MAJOR}::Widgets Qt${QT_MAJOR}::Gui Qt${QT_MAJOR}::Core) |
| 33 | +set (QT_INC_DEPENDENCIES ${Qt${QT_MAJOR}Gui_INCLUDE_DIRS} ${Qt${QT_MAJOR}Core_INCLUDE_DIRS}) |
| 34 | +# Rem : en Qt v 4.* on utilise -DUSE_QT_WEBKIT |
| 35 | +set (QT_PYTHON_3_PUBLIC_FLAGS -DQT_${QT_MAJOR}) |
| 36 | +set (QT_PYTHON_3_PRIVATE_FLAGS -DQT_PYTHON_VERSION="${QT_PYTHON_3_VERSION}") |
| 37 | + |
| 38 | +target_include_directories (QtPython3_v2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/public>$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>) |
| 39 | +target_include_directories (QtPython3_v2 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>) |
| 40 | +target_compile_definitions (QtPython3_v2 PUBLIC ${QT_PYTHON_3_PUBLIC_FLAGS}) |
| 41 | +target_compile_definitions (QtPython3_v2 PRIVATE ${QT_PYTHON_3_PRIVATE_FLAGS}) |
| 42 | +target_compile_definitions (QtPython3_v2 PRIVATE PYTHON_CONSOLE_BRIDGE_PATH=\"${QT_PYTHON_SCRIPTS_DIR}/console_bridge.py\") |
| 43 | +target_compile_options (QtPython3_v2 PRIVATE ${SHARED_CFLAGS}) # Requested by Qt ... |
| 44 | +target_include_directories (QtPython3_v2 PUBLIC ${QT_INC_DEPENDENCIES}) |
| 45 | +target_link_libraries (QtPython3_v2 PUBLIC QtUtil::QtUtil PythonUtil::PythonUtil) |
| 46 | +target_include_directories (QtPython3_v2 PUBLIC ${QT_INC_DEPENDENCIES} ${Python3_INCLUDE_DIRS}) |
| 47 | +# Etre capable une fois installée de retrouver QtUtil, TkUtil, Qt5*, ... : |
| 48 | +# (Rem : en son absence on a Set runtime path of "/tmp/pignerol/install/lib/libQtPython3_v2.so.5.0.0" to "") ... |
| 49 | +set_target_properties (QtPython3_v2 PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1) |
| 50 | +separate_debug_infos (QtPython3_v2 ${CMAKE_INSTALL_PREFIX}/src) |
| 51 | +
|
| 52 | +# INSTALLATION : |
| 53 | +include(CMakePackageConfigHelpers) |
| 54 | +# Génération du fichier contenant les informations sur la distribution : |
| 55 | +configure_file (cmake/QtPython3_v2Distribution.h.in ${CMAKE_CURRENT_BINARY_DIR}/QtPython3_v2Distribution.tmp) |
| 56 | +configure_file (${CMAKE_CURRENT_BINARY_DIR}/QtPython3_v2Distribution.tmp ${CMAKE_CURRENT_BINARY_DIR}/QtPython3_v2Distribution.h) |
| 57 | +
|
| 58 | +# ConfigPackageLocation : c'est plus ou moins standardisé, le défaut étant lib/cmake. |
| 59 | +# On nos recommande très vivement d'utiliser ce répertoire afin de limiter les soucis par la suite, |
| 60 | +# notamment au niveau des vues. |
| 61 | +set (ConfigPackageLocation ${CMAKE_CMAKE_DIR}) |
| 62 | +
|
| 63 | +# La génération des règles d'installation : |
| 64 | +install (TARGETS ${ALL_TARGETS} EXPORT ${CMAKE_PACKAGE_TARGETS_NAME} |
| 65 | + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 66 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 67 | + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
| 68 | + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| 69 | +
|
| 70 | +# Recopie des en-têtes dans le répertoire d'installation : |
| 71 | +install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CURRENT_PACKAGE_NAME}) |
| 72 | +# Dont QtPython3_v2Distribution.h généré plus haut : |
| 73 | +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/QtPython3_v2Distribution.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CURRENT_PACKAGE_NAME}) |
| 74 | +
|
| 75 | +# Recopie des fichiers python indispensable au bon fonctionnement de la console : |
| 76 | +file (GLOB QT_PYTHON_SCRIPTS "${CMAKE_CURRENT_SOURCE_DIR}/python/*.py") |
| 77 | +
|
| 78 | +# A l'installation recopie dans le répertoire d'installation : |
| 79 | +install (FILES ${QT_PYTHON_SCRIPTS} DESTINATION "${QT_PYTHON_SCRIPTS_DIR}") |
| 80 | +
|
| 81 | +# Le fichier contenant les informations de version de ce module : |
| 82 | +write_basic_package_version_file(${CMAKE_PACKAGE_VERSION_FILE} VERSION ${QT_PYTHON_3_VERSION} COMPATIBILITY SameMajorVersion) |
| 83 | +export (EXPORT ${CMAKE_PACKAGE_TARGETS_NAME} FILE ${CMAKE_PACKAGE_TARGETS_FILE} NAMESPACE ${CMAKE_MODULE_NAMESPACE}) |
| 84 | +
|
| 85 | +# Utilisation par d'autres modules de QtPython3_v2 : |
| 86 | +set (INCLUDE_INSTALL_DIR include/) # QtPython3_v2_INCLUDE_DIR avec QtPython3_v2Config.cmake.in |
| 87 | +set (LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) # QtPython3_v2_LIB_DIR avec QtPython3_v2Config.cmake.in |
| 88 | +set (RUNTIME_INSTALL_DIR ${PYTHON_BINDING_DIR}) # QtPython3_v2_RUNTIME_DIR avec QtPython3_v2Config.cmake.in |
| 89 | +# Création du fichier QtPython3_v2Config.cmake qui définira QtPython3_v2_INCLUDE_DIR, QtPython3_v2_LIB_DIR et QtPython3_v2_BIN_DIR : |
| 90 | +configure_package_config_file (cmake/${CMAKE_PACKAGE_CONFIG_NAME}.cmake.in ${CMAKE_PACKAGE_CONFIG_FILE} |
| 91 | + INSTALL_DESTINATION ${CMAKE_CMAKE_DIR} PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR RUNTIME_INSTALL_DIR) |
| 92 | +
|
| 93 | +# Copie du fichier QtPython3_v2Targets.cmake dans prefix/lib/QtPython3_v2/cmake : |
| 94 | +install (EXPORT ${CMAKE_PACKAGE_TARGETS_NAME} |
| 95 | + FILE ${CMAKE_PACKAGE_TARGETS_BASENAME} NAMESPACE ${CMAKE_MODULE_NAMESPACE} |
| 96 | + DESTINATION ${ConfigPackageLocation}) |
| 97 | +# Copie des fichiers QtPython3_v2Config.cmake et QtPython3_v2ConfigVersion.cmake dans prefix/lib/QtPython3_v2/cmake : |
| 98 | +install (FILES ${CMAKE_PACKAGE_CONFIG_FILE} ${CMAKE_PACKAGE_VERSION_FILE} DESTINATION ${ConfigPackageLocation}) |
0 commit comments