-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add CMake build system support #240
base: master
Are you sure you want to change the base?
Changes from 1 commit
e0291e7
651427e
6bbd177
5ac1eca
d1c8d34
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
add_subdirectory(PythonQt_QtAll) |
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) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this list shall be different for Qt5 and Qt6. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think as long as there are no modules with the same name but different functionality in Qt 5 and Qt 6, there shouldn't be a problem. |
||
|
||
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} | ||
) |
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} | ||
) |
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}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This does not handle the (actually preferred) case of self-generated wrappers in
generated_cpp
, as done in the qmake file. Especially this will not work for Qt6, unless I'm missing something.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm trying to build generator using CMake, and so far it's testing well.