Skip to content

Commit

Permalink
add CMake build system support
Browse files Browse the repository at this point in the history
  • Loading branch information
feihong committed Nov 26, 2024
1 parent 8e5581b commit e0291e7
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 0 deletions.
35 changes: 35 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
cmake_minimum_required(VERSION 3.27)

project(PythonQt LANGUAGES CXX VERSION 3.5.6)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Python3 COMPONENTS Development)

set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR})


if(${QT_VERSION_MAJOR} VERSION_EQUAL 5)
if(${QT_VERSION_MINOR} VERSION_LESS 3)
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_50)
elseif(${QT_VERSION_MINOR} VERSION_LESS 6)
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_54)
elseif(${QT_VERSION_MINOR} VERSION_LESS 11)
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_56)
elseif(${QT_VERSION_MINOR} VERSION_LESS 15)
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_511)
else()
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_515)
endif()
# elseif(${QT_VERSION_MAJOR} VERSION_EQUAL 6)
else()
message(FATAL "No generated sources exist for Qt${QT_VERSION}")
endif()

add_subdirectory(src)
# add_subdirectory(generator)
add_subdirectory(extensions)
add_subdirectory(tests)
# add_subdirectory(examples)
1 change: 1 addition & 0 deletions extensions/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_subdirectory(PythonQt_QtAll)
103 changes: 103 additions & 0 deletions extensions/PythonQt_QtAll/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
project(QtAll LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)

file(GLOB SOURCES *.h *.cpp)

if(BUILD_SHARED_LIBS)
add_library(${PROJECT_NAME} SHARED)
else()
add_library(${PROJECT_NAME} STATIC)
endif()

target_sources(${PROJECT_NAME} PRIVATE
${SOURCES}
${GENERATE_SOURCES}
)

target_link_libraries(${PROJECT_NAME} PUBLIC
Core
)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})

target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_QTALL_EXPORTS)

list(APPEND QTMODULES Core Gui Svg Sql Network OpenGL Xml XmlPatterns Multimedia Qml Quick UiTools WebEngineWidgets WebKit)

find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QTMODULES})

foreach(QTMODULE IN LISTS QTMODULES)
if(NOT TARGET Qt${QT_VERSION_MAJOR}::${QTMODULE})
continue()
endif()

string(TOLOWER ${QTMODULE} qtmodule)
file(GLOB GENERATE_SOURCES
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.h
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.cpp
)
target_sources(${PROJECT_NAME} PRIVATE ${GENERATE_SOURCES})
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::${QTMODULE})

string(TOUPPER ${QTMODULE} qtmodule)
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_WITH_${qtmodule})
endforeach()

if(TARGET Qt${QT_VERSION_MAJOR}::Gui)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets PrintSupport REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::PrintSupport
)
endif()

if(TARGET Qt${QT_VERSION_MAJOR}::Svg AND QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS SvgWidgets REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::SvgWidgets
)
endif()

if(TARGET Qt${QT_VERSION_MAJOR}::Multimedia)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS MultimediaWidgets REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::MultimediaWidgets
)
endif()

if(TARGET Qt${QT_VERSION_MAJOR}::Quick)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS QuickWidgets REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::QuickWidgets
)
endif()

if(TARGET Qt${QT_VERSION_MAJOR}::WebKit)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WebKitWidgets REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::WebKitWidgets
)
endif()

file(GLOB PUBLIC_HEADER *.h)

set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_NAME PythonQt-QtAll-${PYTHONQT_SUFFIX}
PUBLIC_HEADER "${PUBLIC_HEADER}"
)

if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE "/bigobj")
elseif(MINGW)
target_compile_options(${PROJECT_NAME} PRIVATE "-Wa,-mbig-obj")
endif()

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
59 changes: 59 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
project(Core LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)

find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets REQUIRED)
find_package(Python3 COMPONENTS Development REQUIRED)

file(GLOB SOURCES *.h *.cpp)

if(BUILD_SHARED_LIBS)
add_library(${PROJECT_NAME} SHARED)
else()
add_library(${PROJECT_NAME} STATIC)
endif()

file(GLOB GENERATE_SOURCES
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.h
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.cpp
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.h
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.cpp
)

target_sources(${PROJECT_NAME} PRIVATE
${SOURCES}
${GENERATE_SOURCES}
)

file(GLOB PUBLIC_HEADER *.h)

set_target_properties(${PROJECT_NAME} PROPERTIES
OUTPUT_NAME PythonQt-${PYTHONQT_SUFFIX}
PUBLIC_HEADER "${PUBLIC_HEADER}"
)

target_link_libraries(${PROJECT_NAME} PUBLIC
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::CorePrivate
Qt${QT_VERSION_MAJOR}::Widgets
Python3::Python
)

target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_EXPORTS PYTHONQT_CATCH_ALL_EXCEPTIONS)

target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})

if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE "/bigobj")
elseif(MINGW)
target_compile_options(${PROJECT_NAME} PRIVATE "-Wa,-mbig-obj")
endif()

include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
22 changes: 22 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
project(tests LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)

find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Test REQUIRED)

file(GLOB SOURCES *.h *.cpp)

add_executable(${PROJECT_NAME})

target_sources(${PROJECT_NAME} PRIVATE
${SOURCES}
)

target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::Test
Core
QtAll
)

add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME})

0 comments on commit e0291e7

Please sign in to comment.