From e0291e73d2243a05614d0d28a4339c2020b82697 Mon Sep 17 00:00:00 2001 From: feihong Date: Tue, 26 Nov 2024 15:18:15 +0800 Subject: [PATCH 01/20] add CMake build system support --- CMakeLists.txt | 35 ++++++++ extensions/CMakeLists.txt | 1 + extensions/PythonQt_QtAll/CMakeLists.txt | 103 +++++++++++++++++++++++ src/CMakeLists.txt | 59 +++++++++++++ tests/CMakeLists.txt | 22 +++++ 5 files changed, 220 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 extensions/CMakeLists.txt create mode 100644 extensions/PythonQt_QtAll/CMakeLists.txt create mode 100644 src/CMakeLists.txt create mode 100644 tests/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..183660d7d --- /dev/null +++ b/CMakeLists.txt @@ -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) diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt new file mode 100644 index 000000000..03577a7a2 --- /dev/null +++ b/extensions/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(PythonQt_QtAll) \ No newline at end of file diff --git a/extensions/PythonQt_QtAll/CMakeLists.txt b/extensions/PythonQt_QtAll/CMakeLists.txt new file mode 100644 index 000000000..fe0132168 --- /dev/null +++ b/extensions/PythonQt_QtAll/CMakeLists.txt @@ -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} +) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 000000000..0d947db2a --- /dev/null +++ b/src/CMakeLists.txt @@ -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} +) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..9accf7bd2 --- /dev/null +++ b/tests/CMakeLists.txt @@ -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}) From 651427e24cb727659762e43bd3f0ca3f456fb511 Mon Sep 17 00:00:00 2001 From: feihong Date: Tue, 26 Nov 2024 17:21:06 +0800 Subject: [PATCH 02/20] add static link support --- extensions/PythonQt_QtAll/CMakeLists.txt | 3 ++- extensions/PythonQt_QtAll/PythonQt_QtAll.h | 16 +++++++++------- src/CMakeLists.txt | 2 ++ src/PythonQtSystem.h | 20 ++++++++------------ 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/extensions/PythonQt_QtAll/CMakeLists.txt b/extensions/PythonQt_QtAll/CMakeLists.txt index fe0132168..97ae4274f 100644 --- a/extensions/PythonQt_QtAll/CMakeLists.txt +++ b/extensions/PythonQt_QtAll/CMakeLists.txt @@ -6,8 +6,10 @@ file(GLOB SOURCES *.h *.cpp) if(BUILD_SHARED_LIBS) add_library(${PROJECT_NAME} SHARED) + target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_QTALL_EXPORTS) else() add_library(${PROJECT_NAME} STATIC) + target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_QTALL_STATIC) endif() target_sources(${PROJECT_NAME} PRIVATE @@ -21,7 +23,6 @@ target_link_libraries(${PROJECT_NAME} PUBLIC 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) diff --git a/extensions/PythonQt_QtAll/PythonQt_QtAll.h b/extensions/PythonQt_QtAll/PythonQt_QtAll.h index 689e2e83c..f4a5ff769 100644 --- a/extensions/PythonQt_QtAll/PythonQt_QtAll.h +++ b/extensions/PythonQt_QtAll/PythonQt_QtAll.h @@ -33,14 +33,16 @@ * */ -#ifdef WIN32 -#ifdef PYTHONQT_QTALL_EXPORTS -#define PYTHONQT_QTALL_EXPORT __declspec(dllexport) -#else -#define PYTHONQT_QTALL_EXPORT __declspec(dllimport) -#endif +#include + +#ifndef PYTHONQT_QTALL_STATIC +# if defined(PYTHONQT_QTALL_EXPORTS) +# define PYTHONQT_QTALL_EXPORT Q_DECL_EXPORT +# else +# define PYTHONQT_QTALL_EXPORT Q_DECL_IMPORT +# endif #else -#define PYTHONQT_QTALL_EXPORT +# define PYTHONQT_QTALL_EXPORT #endif namespace PythonQt_QtAll diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0d947db2a..e07bad29f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,8 +9,10 @@ file(GLOB SOURCES *.h *.cpp) if(BUILD_SHARED_LIBS) add_library(${PROJECT_NAME} SHARED) + target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_EXPORTS) else() add_library(${PROJECT_NAME} STATIC) + target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_STATIC) endif() file(GLOB GENERATE_SOURCES diff --git a/src/PythonQtSystem.h b/src/PythonQtSystem.h index d49345eeb..dc0bfd0e6 100644 --- a/src/PythonQtSystem.h +++ b/src/PythonQtSystem.h @@ -42,21 +42,17 @@ */ //---------------------------------------------------------------------------------- +#include -#if defined(WIN32) - #ifdef PYTHONQT_EXPORTS - #define PYTHONQT_EXPORT __declspec(dllexport) - #else - #define PYTHONQT_EXPORT __declspec(dllimport) - #endif +#ifndef PYTHONQT_STATIC +# if defined(PYTHONQT_EXPORTS) +# define PYTHONQT_EXPORT Q_DECL_EXPORT +# else +# define PYTHONQT_EXPORT Q_DECL_IMPORT +# endif #else - #ifdef PYTHONQT_EXPORTS - #define PYTHONQT_EXPORT __attribute__((__visibility__("default"))) - #else - #define PYTHONQT_EXPORT - #endif +# define PYTHONQT_EXPORT #endif - #endif From 6bbd177d2f29c738114a694ab254aa2f20be0dfe Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 27 Nov 2024 11:49:03 +0800 Subject: [PATCH 03/20] add CMake build support to PythonQtGenerator --- CMakeLists.txt | 2 +- generator/CMakeLists.txt | 169 +++------------------------- generator/parser/CMakeLists.txt | 26 +++++ generator/parser/rpp/CMakeLists.txt | 14 +++ 4 files changed, 57 insertions(+), 154 deletions(-) create mode 100644 generator/parser/CMakeLists.txt create mode 100644 generator/parser/rpp/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 183660d7d..423d48fb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ else() endif() add_subdirectory(src) -# add_subdirectory(generator) +add_subdirectory(generator) add_subdirectory(extensions) add_subdirectory(tests) # add_subdirectory(examples) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 1d659dd87..6368e5da7 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -1,162 +1,25 @@ -cmake_minimum_required(VERSION 2.8) +project(PythonQtGenerator LANGUAGES CXX) -#----------------------------------------------------------------------------- -project(PythonQtGenerator) -#----------------------------------------------------------------------------- +add_subdirectory(parser) -include(CTestUseLaunchers OPTIONAL) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) -#----------------------------------------------------------------------------- -# Setup Qt +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Xml REQUIRED) -set(minimum_required_qt_version "4.6.2") +file(GLOB SOURCES *.h *.cpp *.qrc) +list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_LIST_DIR}/qtscript_masterinclude.h") -find_package(Qt4) - -if(QT4_FOUND) - - set(found_qt_version ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) - - if(${found_qt_version} VERSION_LESS ${minimum_required_qt_version}) - message(FATAL_ERROR "error: PythonQt requires Qt >= ${minimum_required_qt_version} -- you cannot use Qt ${found_qt_version}.") - endif() - - set(QT_USE_QTXML ON) - - include(${QT_USE_FILE}) -else() - message(FATAL_ERROR "error: Qt4 was not found on your system. You probably need to set the QT_QMAKE_EXECUTABLE variable") -endif() - -#----------------------------------------------------------------------------- -# Sources - -set(sources - parser/ast.cpp - parser/binder.cpp - parser/class_compiler.cpp - parser/codemodel.cpp - parser/codemodel_finder.cpp - parser/compiler_utils.cpp - parser/control.cpp - parser/declarator_compiler.cpp - parser/default_visitor.cpp - parser/dumptree.cpp - parser/lexer.cpp - parser/list.cpp - parser/name_compiler.cpp - parser/parser.cpp - parser/smallobject.cpp - parser/tokens.cpp - parser/type_compiler.cpp - parser/visitor.cpp +add_executable(${PROJECT_NAME}) - abstractmetabuilder.cpp - abstractmetalang.cpp - asttoxml.cpp - customtypes.cpp - fileout.cpp - generator.cpp - generatorset.cpp - generatorsetqtscript.cpp - main.cpp - metajava.cpp - metaqtscriptbuilder.cpp - metaqtscript.cpp - prigenerator.cpp - reporthandler.cpp - setupgenerator.cpp - shellgenerator.cpp - shellheadergenerator.cpp - shellimplgenerator.cpp - typeparser.cpp - typesystem.cpp - ) - -#----------------------------------------------------------------------------- -# List headers. This list is used for the install command. - -set(headers - ) - -#----------------------------------------------------------------------------- -# Headers that should run through moc - -set(moc_sources - fileout.h - generator.h - generatorset.h - generatorsetqtscript.h - prigenerator.h - setupgenerator.h - shellgenerator.h - shellheadergenerator.h - shellimplgenerator.h - ) - -#----------------------------------------------------------------------------- -# UI files - -set(ui_sources ) - -#----------------------------------------------------------------------------- -# Resources - -set(qrc_sources - generator.qrc - ) - -#----------------------------------------------------------------------------- -# Do wrapping -qt4_wrap_cpp(gen_moc_sources ${moc_sources}) -qt4_wrap_ui(gen_ui_sources ${ui_sources}) -qt4_add_resources(gen_qrc_sources ${qrc_sources}) - -#----------------------------------------------------------------------------- -# Copy file expected by the generator and specify install rules - -file(GLOB files_to_copy RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "build_*.txt" "typesystem_*.xml") -list(APPEND files_to_copy qtscript_masterinclude.h parser/rpp/pp-qt-configuration) -foreach(file ${files_to_copy}) - configure_file( - ${file} - ${CMAKE_CURRENT_BINARY_DIR}/${file} - COPYONLY - ) - get_filename_component(destination_dir ${file} PATH) - install(FILES ${file} DESTINATION bin/${destination_dir}) -endforeach() - -#----------------------------------------------------------------------------- -# Build the library - -SOURCE_GROUP("Resources" FILES - ${qrc_sources} - ${ui_sources} - ${files_to_copy} - ) - -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/parser - ${CMAKE_CURRENT_SOURCE_DIR}/parser/rpp - ) - -add_definitions(-DRXX_ALLOCATOR_INIT_0) - -add_executable(${PROJECT_NAME} - ${sources} - ${gen_moc_sources} - ${gen_ui_sources} - ${gen_qrc_sources} +target_sources(${PROJECT_NAME} PRIVATE + ${SOURCES} ) -target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES}) - -#----------------------------------------------------------------------------- -# Install library (on windows, put the dll in 'bin' and the archive in 'lib') +target_link_libraries(${PROJECT_NAME} PUBLIC + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::Xml + rxx +) -install(TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) diff --git a/generator/parser/CMakeLists.txt b/generator/parser/CMakeLists.txt new file mode 100644 index 000000000..7b70c98aa --- /dev/null +++ b/generator/parser/CMakeLists.txt @@ -0,0 +1,26 @@ +project(rxx LANGUAGES CXX) +add_subdirectory(rpp) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) + +file(GLOB SOURCES *.h *.cpp) + +add_library(${PROJECT_NAME} INTERFACE) + +target_sources(${PROJECT_NAME} INTERFACE + ${SOURCES} +) + +target_link_libraries(${PROJECT_NAME} INTERFACE + Qt${QT_VERSION_MAJOR}::Core + rpp +) + +target_include_directories(${PROJECT_NAME} INTERFACE + ${CMAKE_CURRENT_LIST_DIR} +) + +target_compile_definitions(${PROJECT_NAME} INTERFACE RXX_ALLOCATOR_INIT_0) diff --git a/generator/parser/rpp/CMakeLists.txt b/generator/parser/rpp/CMakeLists.txt new file mode 100644 index 000000000..99ccd130e --- /dev/null +++ b/generator/parser/rpp/CMakeLists.txt @@ -0,0 +1,14 @@ +project(rpp LANGUAGES CXX) + +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) + +file(GLOB SOURCES *.h preprocessor.cpp) + +add_library(${PROJECT_NAME} INTERFACE) + +target_sources(${PROJECT_NAME} INTERFACE ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} INTERFACE Qt${QT_VERSION_MAJOR}::Core) + +target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_LIST_DIR}) + From 5ac1ecaff991a6205b9688c690601dc0bc8e59d3 Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 28 Nov 2024 14:18:53 +0800 Subject: [PATCH 04/20] prefer to use ${CMAKE_CURRENT_LIST_DIR}/generated_cpp --- CMakeLists.txt | 31 +++++++++++++++++-------------- generator/CMakeLists.txt | 13 +++++++++++++ tests/CMakeLists.txt | 5 ++++- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 423d48fb1..6acb828f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,26 +10,29 @@ find_package(Python3 COMPONENTS Development) set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}) +add_subdirectory(generator) -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) +set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp) +if(NOT EXISTS ${PYTHONQT_GENERATED_PATH}) + 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() - set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_515) + message(FATAL "No generated sources exist for Qt${QT_VERSION}") 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) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 6368e5da7..26d900a0d 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -23,3 +23,16 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) + +# file(GLOB resources_files *.txt *.xml) +# foreach(resources_file IN LISTS resources_files) +# configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) +# endforeach() + +# file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated_cpp") + +# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD +# COMMAND set Path="%Path%;" +# COMMAND $ +# WORKING_DIRECTORY $ +# ) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9accf7bd2..35a5c8252 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,4 +19,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE QtAll ) -add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME}) +add_test(NAME ${PROJECT_NAME} + COMMAND $ + WORKING_DIRECTORY $ +) From d1c8d34d9c8eab11e267890e91c295b2a0ee67c9 Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 5 Dec 2024 17:05:13 +0800 Subject: [PATCH 05/20] add custom targets to automatically run generated commands --- CMakeLists.txt | 5 +++-- generator/CMakeLists.txt | 33 +++++++++++++++++++++------------ tests/CMakeLists.txt | 4 ++++ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6acb828f4..e0fc19f6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.27) +enable_testing() + project(PythonQt LANGUAGES CXX VERSION 3.5.6) set(CMAKE_CXX_STANDARD 11) @@ -12,8 +14,7 @@ set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VE add_subdirectory(generator) -set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp) -if(NOT EXISTS ${PYTHONQT_GENERATED_PATH}) +if(NOT EXISTS "${PYTHONQT_GENERATED_PATH}") 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) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 26d900a0d..23f2c39bf 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -24,15 +24,24 @@ target_link_libraries(${PROJECT_NAME} PUBLIC target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) -# file(GLOB resources_files *.txt *.xml) -# foreach(resources_file IN LISTS resources_files) -# configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) -# endforeach() - -# file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated_cpp") - -# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD -# COMMAND set Path="%Path%;" -# COMMAND $ -# WORKING_DIRECTORY $ -# ) +set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_BINARY_DIR}/../generated_cpp PARENT_SCOPE) + +if(NOT EXISTS ${PYTHONQT_GENERATED_PATH}) + file(GLOB resources_files *.txt *.xml qtscript_masterinclude.h) + foreach(resources_file IN LISTS resources_files) + configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) + endforeach() + + if(WIN32) + set(LIBRARY_SEARCH_PATH PATH) + else() + set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH) + endif() + + add_custom_target(GenerateCpp + COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ + WORKING_DIRECTORY $ + VERBATIM USES_TERMINAL + ) +endif() + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 35a5c8252..8d9ad75fb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -23,3 +23,7 @@ add_test(NAME ${PROJECT_NAME} COMMAND $ WORKING_DIRECTORY $ ) + +set_tests_properties(${PROJECT_NAME} PROPERTIES + ENVIRONMENT_MODIFICATION "Path=path_list_append:$" +) From 815730f6cc5b40bf1f0054bfeb82c3144da18a8b Mon Sep 17 00:00:00 2001 From: feihong Date: Tue, 11 Feb 2025 16:11:29 +0800 Subject: [PATCH 06/20] Initial support for using auto-generated wrappers --- CMakeLists.txt | 22 --------- extensions/PythonQt_QtAll/CMakeLists.txt | 38 +++++---------- generator/CMakeLists.txt | 61 +++++++++++++++++------- generator/generatorsetqtscript.h | 2 +- generator/parser/CMakeLists.txt | 1 + generator/parser/rpp/CMakeLists.txt | 4 ++ src/CMakeLists.txt | 12 ++--- tests/CMakeLists.txt | 10 +++- 8 files changed, 75 insertions(+), 75 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0fc19f6a..1d6756d18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,5 @@ cmake_minimum_required(VERSION 3.27) -enable_testing() - project(PythonQt LANGUAGES CXX VERSION 3.5.6) set(CMAKE_CXX_STANDARD 11) @@ -13,26 +11,6 @@ find_package(Python3 COMPONENTS Development) set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}) add_subdirectory(generator) - -if(NOT EXISTS "${PYTHONQT_GENERATED_PATH}") - 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() -endif() - add_subdirectory(src) add_subdirectory(extensions) add_subdirectory(tests) diff --git a/extensions/PythonQt_QtAll/CMakeLists.txt b/extensions/PythonQt_QtAll/CMakeLists.txt index 97ae4274f..bd91d4b4a 100644 --- a/extensions/PythonQt_QtAll/CMakeLists.txt +++ b/extensions/PythonQt_QtAll/CMakeLists.txt @@ -12,40 +12,28 @@ else() target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_QTALL_STATIC) endif() -target_sources(${PROJECT_NAME} PRIVATE - ${SOURCES} - ${GENERATE_SOURCES} -) +target_sources(${PROJECT_NAME} PRIVATE ${SOURCES}) -target_link_libraries(${PROJECT_NAME} PUBLIC - Core -) +target_link_libraries(${PROJECT_NAME} PUBLIC Core) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}) - 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}) +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}) + string(TOUPPER ${QtModule} QTMODULE) + target_sources(${PROJECT_NAME} PRIVATE ${PYTHONQT_WRAPPER_${QTMODULE}_SOURCES}) + target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::${QtModule}) + target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_WITH_${QTMODULE}) endforeach() -if(TARGET Qt${QT_VERSION_MAJOR}::Gui) +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 @@ -53,28 +41,28 @@ if(TARGET Qt${QT_VERSION_MAJOR}::Gui) ) endif() -if(TARGET Qt${QT_VERSION_MAJOR}::Svg AND QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6) +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) +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) +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) +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 diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 23f2c39bf..2fae23d4c 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -1,3 +1,4 @@ +cmake_minimum_required(VERSION 3.27) project(PythonQtGenerator LANGUAGES CXX) add_subdirectory(parser) @@ -5,7 +6,8 @@ add_subdirectory(parser) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Xml REQUIRED) +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets Xml REQUIRED) file(GLOB SOURCES *.h *.cpp *.qrc) list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_LIST_DIR}/qtscript_masterinclude.h") @@ -17,31 +19,56 @@ target_sources(${PROJECT_NAME} PRIVATE ) target_link_libraries(${PROJECT_NAME} PUBLIC + Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Xml rxx ) +if (${QT_VERSION_MAJOR} VERSION_GREATER 5) + find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core5Compat REQUIRED) + target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Core5Compat) +endif() + target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) -set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_BINARY_DIR}/../generated_cpp PARENT_SCOPE) +get_filename_component(PYTHONQT_GENERATED_PATH "${CMAKE_CURRENT_BINARY_DIR}" PATH) +set(PYTHONQT_GENERATED_PATH "${PYTHONQT_GENERATED_PATH}/generated_cpp") -if(NOT EXISTS ${PYTHONQT_GENERATED_PATH}) - file(GLOB resources_files *.txt *.xml qtscript_masterinclude.h) - foreach(resources_file IN LISTS resources_files) - configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) - endforeach() +file(GLOB resources_files *.txt *.xml qtscript_masterinclude.h) +foreach(resources_file IN LISTS resources_files) + configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) +endforeach() - if(WIN32) - set(LIBRARY_SEARCH_PATH PATH) - else() - set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH) - endif() +if(WIN32) + set(LIBRARY_SEARCH_PATH PATH) +else() + set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH) +endif() - add_custom_target(GenerateCpp - COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ - WORKING_DIRECTORY $ - VERBATIM USES_TERMINAL +list(APPEND wrapper_list core core_builtin gui gui_builtin multimedia network qml quick sql svg uitools xml) +foreach(wrapper IN LISTS wrapper_list) + string(TOUPPER ${wrapper} WRAPPER) + set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES + "${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}0.h" + "${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}0.cpp" + "${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}_init.cpp" ) -endif() + list(APPEND PYTHONQT_WRAPPER_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES}) + set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES} PARENT_SCOPE) +endforeach() +add_custom_command(OUTPUT ${PYTHONQT_WRAPPER_SOURCES} + COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} #[[$]] + DEPENDS ${PROJECT_NAME} + VERBATIM +) + +set_source_files_properties(${PYTHONQT_WRAPPER_SOURCES} PROPERTIES + SKIP_AUTOMOC TRUE + SKIP_AUTOUIC TRUE +) +add_custom_target(PythonQtWrapper + DEPENDS ${PROJECT_NAME} ${PYTHONQT_WRAPPER_SOURCES} +) diff --git a/generator/generatorsetqtscript.h b/generator/generatorsetqtscript.h index 06d836906..237abbdbc 100644 --- a/generator/generatorsetqtscript.h +++ b/generator/generatorsetqtscript.h @@ -62,7 +62,7 @@ class GeneratorSetQtScript : public GeneratorSet private: MetaQtScriptBuilder builder; - int maxClassesPerFile{30}; + int maxClassesPerFile{std::numeric_limits::max() >> 1}; }; diff --git a/generator/parser/CMakeLists.txt b/generator/parser/CMakeLists.txt index 7b70c98aa..45bd7fe87 100644 --- a/generator/parser/CMakeLists.txt +++ b/generator/parser/CMakeLists.txt @@ -4,6 +4,7 @@ add_subdirectory(rpp) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) file(GLOB SOURCES *.h *.cpp) diff --git a/generator/parser/rpp/CMakeLists.txt b/generator/parser/rpp/CMakeLists.txt index 99ccd130e..08d9f1879 100644 --- a/generator/parser/rpp/CMakeLists.txt +++ b/generator/parser/rpp/CMakeLists.txt @@ -1,5 +1,9 @@ project(rpp LANGUAGES CXX) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) file(GLOB SOURCES *.h preprocessor.cpp) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e07bad29f..4ad6f781b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,18 +15,14 @@ else() target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_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} + ${PYTHONQT_WRAPPER_CORE_BUILTIN_SOURCES} + ${PYTHONQT_WRAPPER_GUI_BUILTIN_SOURCES} ) +add_dependencies(${PROJECT_NAME} PythonQtWrapper) + file(GLOB PUBLIC_HEADER *.h) set_target_properties(${PROJECT_NAME} PROPERTIES diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8d9ad75fb..8926055be 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -project(tests LANGUAGES CXX) +project(PythonQtTest LANGUAGES CXX) set(CMAKE_AUTOMOC ON) @@ -24,6 +24,12 @@ add_test(NAME ${PROJECT_NAME} WORKING_DIRECTORY $ ) +if(WIN32) + set(LIBRARY_SEARCH_PATH PATH) +else() + set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH) +endif() + set_tests_properties(${PROJECT_NAME} PROPERTIES - ENVIRONMENT_MODIFICATION "Path=path_list_append:$" + ENVIRONMENT_MODIFICATION "${LIBRARY_SEARCH_PATH}=path_list_prepend:$" ) From 56bd7e4cebf487a14a30eb80a815748ddb4a20aa Mon Sep 17 00:00:00 2001 From: feihong Date: Tue, 11 Feb 2025 16:45:35 +0800 Subject: [PATCH 07/20] enable testing --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d6756d18..7b0748077 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.27) project(PythonQt LANGUAGES CXX VERSION 3.5.6) +enable_testing() + set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) From e02479f266c302180be899317d26f570e15c4738 Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 14:36:08 +0800 Subject: [PATCH 08/20] add cmake ci --- .github/workflows/cmake.yml | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 000000000..a1ed5e7ad --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,53 @@ +name: CMake CI + +on: + push: + branches: + - master + +jobs: + build-and-test: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + qt_version: [5, 6] + python_version: ["3.8", "3.9", "3.10"] + fail-fast: false + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python_version }} + + - name: Install dependencies (Linux) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y qt${{ matrix.qt_version }}-base qt${{ matrix.qt_version }}-tools + + - name: Install dependencies (Windows) + if: runner.os == 'Windows' + run: | + choco install qt${{ matrix.qt_version }} --version ${{ matrix.qt_version }}.0.0 --params "/InstallationFolder C:/Qt/${{ matrix.qt_version }}" + echo "C:/Qt/${{ matrix.qt_version }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + + - name: Configure CMake + run: | + mkdir build + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=./install + + - name: Build project + run: | + cmake --build build --parallel --target all install + + - name: Run tests + run: | + cd build + ctest --output-on-failure \ No newline at end of file From bd2ef211bf8fe9386adf3940f2cee995236e52fb Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 14:48:24 +0800 Subject: [PATCH 09/20] CMake CI Process Validation --- .github/workflows/cmake.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index a1ed5e7ad..8848a4531 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -28,7 +28,11 @@ jobs: if: runner.os == 'Linux' run: | sudo apt-get update - sudo apt-get install -y qt${{ matrix.qt_version }}-base qt${{ matrix.qt_version }}-tools + if [ "${{ matrix.qt_version }}" = "5" ]; then + sudo apt-get install -y qtbase5-dev qt5-default + else + sudo apt-get install -y qt6-base-dev + fi - name: Install dependencies (Windows) if: runner.os == 'Windows' From b1f079c376b7164be9bebae4eca4029d6a6450f3 Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 14:53:52 +0800 Subject: [PATCH 10/20] CMake CI Process Validation --- .github/workflows/cmake.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 8848a4531..6e3e3bf71 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -42,7 +42,6 @@ jobs: - name: Configure CMake run: | - mkdir build cmake -S . -B build \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=./install From 85aa600a2239e96599f49df1aeebf70f1236f80b Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 15:03:20 +0800 Subject: [PATCH 11/20] CMake CI Process Validation --- .github/workflows/cmake.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6e3e3bf71..1cfc75ab4 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -29,9 +29,9 @@ jobs: run: | sudo apt-get update if [ "${{ matrix.qt_version }}" = "5" ]; then - sudo apt-get install -y qtbase5-dev qt5-default + sudo apt-get install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools else - sudo apt-get install -y qt6-base-dev + sudo apt-get install -y qt6-base-dev qt6-5compat-dev fi - name: Install dependencies (Windows) From d4f5f7f3da306cf9f37cea5139676159a2d7aaa7 Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 16:23:46 +0800 Subject: [PATCH 12/20] CMake CI Process Validation --- .github/workflows/cmake.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1cfc75ab4..cbc7b98cd 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -29,9 +29,12 @@ jobs: run: | sudo apt-get update if [ "${{ matrix.qt_version }}" = "5" ]; then - sudo apt-get install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools + sudo apt-get install -y qtbase5-dev qtbase5-private-dev qtchooser qt5-qmake qtbase5-dev-tools \ + libqt5svg5-dev qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev qtdeclarative5-dev \ + qtwebengine5-dev libqt5webkit5-dev else - sudo apt-get install -y qt6-base-dev qt6-5compat-dev + sudo apt-get install -y qt6-base-dev qt6-base-private-dev qt6-5compat-dev qt6-qmake qt6-base-dev-tools \ + libqt6svg6-dev qt6-multimedia-dev qt6-declarative-dev qt6-webengine-dev fi - name: Install dependencies (Windows) From a02dd4942618f7246d6450b08c0832c719147701 Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 16:50:56 +0800 Subject: [PATCH 13/20] CMake CI Process Validation --- .github/workflows/cmake.yml | 2 +- CMakeLists.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index cbc7b98cd..d76ec11c8 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -33,7 +33,7 @@ jobs: libqt5svg5-dev qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev qtdeclarative5-dev \ qtwebengine5-dev libqt5webkit5-dev else - sudo apt-get install -y qt6-base-dev qt6-base-private-dev qt6-5compat-dev qt6-qmake qt6-base-dev-tools \ + sudo apt-get install -y qt6-base-dev qt6-base-private-dev qt6-5compat-dev qt6-base-dev-tools \ libqt6svg6-dev qt6-multimedia-dev qt6-declarative-dev qt6-webengine-dev fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b0748077..08a50d750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,10 @@ 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}) +get_filename_component(QTDIR "${Qt${QT_VERSION_MAJOR}_DIR}" PATH) +get_filename_component(QTDIR "${QTDIR}" PATH) +get_filename_component(QTDIR "${QTDIR}" PATH) +set(ENV{QTDIR} "${QTDIR}") add_subdirectory(generator) add_subdirectory(src) From 09ea47814a8813ecc39695ce8f17578292e1fcbd Mon Sep 17 00:00:00 2001 From: feihong Date: Wed, 12 Feb 2025 17:24:11 +0800 Subject: [PATCH 14/20] CMake CI Process Validation --- CMakeLists.txt | 4 ---- generator/CMakeLists.txt | 7 ++++++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08a50d750..7b0748077 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,10 +11,6 @@ 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}) -get_filename_component(QTDIR "${Qt${QT_VERSION_MAJOR}_DIR}" PATH) -get_filename_component(QTDIR "${QTDIR}" PATH) -get_filename_component(QTDIR "${QTDIR}" PATH) -set(ENV{QTDIR} "${QTDIR}") add_subdirectory(generator) add_subdirectory(src) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 2fae23d4c..05e8c2746 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -57,8 +57,13 @@ foreach(wrapper IN LISTS wrapper_list) list(APPEND PYTHONQT_WRAPPER_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES}) set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES} PARENT_SCOPE) endforeach() + +get_filename_component(_qt_install_prefix "${Qt${QT_VERSION_MAJOR}_DIR}" PATH) +get_filename_component(_qt_install_prefix "${_qt_install_prefix}" PATH) +get_filename_component(_qt_install_prefix "${_qt_install_prefix}" PATH) + add_custom_command(OUTPUT ${PYTHONQT_WRAPPER_SOURCES} - COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ + COMMAND ${CMAKE_COMMAND} -E env QTDIR=${_qt_install_prefix} --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} #[[$]] DEPENDS ${PROJECT_NAME} VERBATIM From e469f27280bb94ef2f4429dd5e9418ad5c2edf0c Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 13 Feb 2025 08:51:40 +0800 Subject: [PATCH 15/20] CMake CI Process Validation --- generator/CMakeLists.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 05e8c2746..a00d561e5 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -58,12 +58,17 @@ foreach(wrapper IN LISTS wrapper_list) set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES} PARENT_SCOPE) endforeach() -get_filename_component(_qt_install_prefix "${Qt${QT_VERSION_MAJOR}_DIR}" PATH) -get_filename_component(_qt_install_prefix "${_qt_install_prefix}" PATH) -get_filename_component(_qt_install_prefix "${_qt_install_prefix}" PATH) +get_target_property(_qt_include_dirs Qt${QT_VERSION_MAJOR}::Core INTERFACE_INCLUDE_DIRECTORIES) +foreach(_qt_include_dir IN LISTS _qt_include_dirs) + get_filename_component(_qt_install_prefix "${_qt_include_dir}" PATH) + if (EXISTS "${_qt_install_prefix}/include/QtCore") + set(_qt_dir "${_qt_install_prefix}") + break() + endif() +endforeach() add_custom_command(OUTPUT ${PYTHONQT_WRAPPER_SOURCES} - COMMAND ${CMAKE_COMMAND} -E env QTDIR=${_qt_install_prefix} --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ + COMMAND ${CMAKE_COMMAND} -E env QTDIR=${_qt_dir} --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} #[[$]] DEPENDS ${PROJECT_NAME} VERBATIM @@ -77,3 +82,5 @@ set_source_files_properties(${PYTHONQT_WRAPPER_SOURCES} PROPERTIES add_custom_target(PythonQtWrapper DEPENDS ${PROJECT_NAME} ${PYTHONQT_WRAPPER_SOURCES} ) + +message("_qt5Core_install_prefix " ${_qt5Core_install_prefix}) From 952b6d3da643671d090e59f7b3b521d893cd37c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=82=B2=E4=B8=9D=E6=9F=93?= <946488029@qq.com> Date: Thu, 13 Feb 2025 10:19:10 +0800 Subject: [PATCH 16/20] Update cmake.yml --- .github/workflows/cmake.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d76ec11c8..c66f56a2a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -32,16 +32,28 @@ jobs: sudo apt-get install -y qtbase5-dev qtbase5-private-dev qtchooser qt5-qmake qtbase5-dev-tools \ libqt5svg5-dev qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev qtdeclarative5-dev \ qtwebengine5-dev libqt5webkit5-dev + echo "QTDIR=/usr/lib/x86_64-linux-gnu/qt5" | tee -a $GITHUB_ENV else sudo apt-get install -y qt6-base-dev qt6-base-private-dev qt6-5compat-dev qt6-base-dev-tools \ libqt6svg6-dev qt6-multimedia-dev qt6-declarative-dev qt6-webengine-dev + echo "QTDIR=/usr/lib/x86_64-linux-gnu/qt6" | tee -a $GITHUB_ENV fi - name: Install dependencies (Windows) if: runner.os == 'Windows' run: | - choco install qt${{ matrix.qt_version }} --version ${{ matrix.qt_version }}.0.0 --params "/InstallationFolder C:/Qt/${{ matrix.qt_version }}" - echo "C:/Qt/${{ matrix.qt_version }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + if ("${{ matrix.qt_version }}" -eq "5") { + pip install aqtinstall + aqt install-qt windows desktop ${{ matrix.qt_version }}.15.2 win64_msvc2019 -m qtbase qtmultimedia qtdeclarative qttools qtsvg + $Qt5Dir = "$env:USERPROFILE\Qt\${{ matrix.qt_version }}.15.2\msvc2019_64" + echo "Qt5Dir=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + echo "$Qt5Dir\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "QTDIR=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } else { + choco install qt6 --version ${{ matrix.qt_version }}.0.0 --params "/InstallationFolder C:/Qt/${{ matrix.qt_version }}" + echo "C:/Qt/${{ matrix.qt_version }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + echo "QTDIR=C:/Qt/${{ matrix.qt_version }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + } - name: Configure CMake run: | @@ -56,4 +68,4 @@ jobs: - name: Run tests run: | cd build - ctest --output-on-failure \ No newline at end of file + ctest --output-on-failure From f474b3f6e6d6223c08ffafc481ca7b0cbf60ac1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=82=B2=E4=B8=9D=E6=9F=93?= <946488029@qq.com> Date: Thu, 13 Feb 2025 11:48:03 +0800 Subject: [PATCH 17/20] Update cmake.yml --- .github/workflows/cmake.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c66f56a2a..52efdb32d 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -44,8 +44,8 @@ jobs: run: | if ("${{ matrix.qt_version }}" -eq "5") { pip install aqtinstall - aqt install-qt windows desktop ${{ matrix.qt_version }}.15.2 win64_msvc2019 -m qtbase qtmultimedia qtdeclarative qttools qtsvg - $Qt5Dir = "$env:USERPROFILE\Qt\${{ matrix.qt_version }}.15.2\msvc2019_64" + # aqt install-qt windows desktop 5.15.2 win64_msvc2019 -m all + $Qt5Dir = "$env:USERPROFILE\Qt\5.15.2\msvc2019_64" echo "Qt5Dir=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "$Qt5Dir\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "QTDIR=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append From 473efa07cdc6bddd7be5c0f58b80b6094190727c Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 13 Feb 2025 14:29:39 +0800 Subject: [PATCH 18/20] adapting more Qt header file include paths --- generator/CMakeLists.txt | 17 +++++++---------- generator/main.cpp | 23 ++++++++++++++++------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index a00d561e5..66da0df07 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -58,20 +58,19 @@ foreach(wrapper IN LISTS wrapper_list) set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES} PARENT_SCOPE) endforeach() -get_target_property(_qt_include_dirs Qt${QT_VERSION_MAJOR}::Core INTERFACE_INCLUDE_DIRECTORIES) -foreach(_qt_include_dir IN LISTS _qt_include_dirs) - get_filename_component(_qt_install_prefix "${_qt_include_dir}" PATH) - if (EXISTS "${_qt_install_prefix}/include/QtCore") - set(_qt_dir "${_qt_install_prefix}") +get_target_property(_qtcore_include_dirs Qt${QT_VERSION_MAJOR}::Core INTERFACE_INCLUDE_DIRECTORIES) +foreach(_qtcore_include_dir IN LISTS _qtcore_include_dirs) + if (EXISTS "${_qtcore_include_dir}/QtCore") + set(_qt_include_prefix "${_qtcore_include_dir}") break() endif() endforeach() add_custom_command(OUTPUT ${PYTHONQT_WRAPPER_SOURCES} - COMMAND ${CMAKE_COMMAND} -E env QTDIR=${_qt_dir} --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ $ - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} #[[$]] + COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$ + $ --qt-include-prefix="${_qt_include_prefix}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${PROJECT_NAME} - VERBATIM ) set_source_files_properties(${PYTHONQT_WRAPPER_SOURCES} PROPERTIES @@ -82,5 +81,3 @@ set_source_files_properties(${PYTHONQT_WRAPPER_SOURCES} PROPERTIES add_custom_target(PythonQtWrapper DEPENDS ${PROJECT_NAME} ${PYTHONQT_WRAPPER_SOURCES} ) - -message("_qt5Core_install_prefix " ${_qt5Core_install_prefix}) diff --git a/generator/main.cpp b/generator/main.cpp index a6494363b..38e06f70e 100644 --- a/generator/main.cpp +++ b/generator/main.cpp @@ -61,7 +61,7 @@ void displayHelp(GeneratorSet *generatorSet); namespace { - QStringList getIncludeDirectories(const QString &commandLineIncludes) + QStringList getIncludeDirectories(const QString &commandLineIncludes, const QString &qtIncludePrefix) { QStringList includes; includes << QString("."); @@ -121,11 +121,20 @@ namespace includes << (qtdir + "/QtOpenGL"); includes << qtdir; } + if (!qtIncludePrefix.isEmpty() && QFile::exists(qtIncludePrefix)) { + std::cout << "qt include prefix: " << qtIncludePrefix.toLocal8Bit().constData() << std::endl; + includes << (qtIncludePrefix + "/QtXml"); + includes << (qtIncludePrefix + "/QtNetwork"); + includes << (qtIncludePrefix + "/QtCore"); + includes << (qtIncludePrefix + "/QtGui"); + includes << (qtIncludePrefix + "/QtOpenGL"); + includes << qtIncludePrefix; + } return includes; } bool - preprocess(const QString &sourceFile, const QString &targetFile, const QString &commandLineIncludes = QString()) + preprocess(const QString &sourceFile, const QString &targetFile, const QString &commandLineIncludes = QString(), const QString &qtIncludPrefix = {}) { rpp::pp_environment env; rpp::pp preprocess(env); @@ -146,7 +155,7 @@ namespace preprocess.operator()(ba.constData(), ba.constData() + ba.size(), null_out); foreach(QString - include, getIncludeDirectories(commandLineIncludes)) { + include, getIncludeDirectories(commandLineIncludes, qtIncludPrefix)) { preprocess.push_include_path(QDir::toNativeSeparators(include).toStdString()); } @@ -177,10 +186,10 @@ namespace return true; } - unsigned int getQtVersion(const QString &commandLineIncludes) + unsigned int getQtVersion(const QString &commandLineIncludes, const QString &qtIncludPrefix = {}) { QRegularExpression re("#define\\s+QTCORE_VERSION\\s+0x([0-9a-f]+)", QRegularExpression::CaseInsensitiveOption); - for (const QString &includeDir: getIncludeDirectories(commandLineIncludes)) + for (const QString &includeDir: getIncludeDirectories(commandLineIncludes, qtIncludPrefix)) { QFileInfo fi(QDir(includeDir), "qtcoreversion.h"); if (fi.exists()) @@ -315,7 +324,7 @@ int main(int argc, char *argv[]) if (!qtVersion) { printf("Trying to determine Qt version...\n"); - qtVersion = getQtVersion(args.value("include-paths")); + qtVersion = getQtVersion(args.value("include-paths"), args.value("qt-include-prefix")); if (!qtVersion) { fprintf(stderr, "Aborting\n"); // the error message was printed by getQtVersion @@ -337,7 +346,7 @@ int main(int argc, char *argv[]) printf("PreProcessing - Generate [%s] using [%s] and include-paths [%s]\n", qPrintable(pp_file), qPrintable(fileName), qPrintable(args.value("include-paths"))); ReportHandler::setContext("Preprocess"); - if (!preprocess(fileName, pp_file, args.value("include-paths"))) { + if (!preprocess(fileName, pp_file, args.value("include-paths"), args.value("qt-include-prefix"))) { fprintf(stderr, "Preprocessor failed on file: '%s'\n", qPrintable(fileName)); return 1; } From 22e38fc36cf7f215fbec0c549e49a5f624c5a324 Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 13 Feb 2025 14:56:38 +0800 Subject: [PATCH 19/20] fix _qt_include_prefix --- generator/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 66da0df07..f9f095a6e 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -60,7 +60,7 @@ endforeach() get_target_property(_qtcore_include_dirs Qt${QT_VERSION_MAJOR}::Core INTERFACE_INCLUDE_DIRECTORIES) foreach(_qtcore_include_dir IN LISTS _qtcore_include_dirs) - if (EXISTS "${_qtcore_include_dir}/QtCore") + if (IS_DIRECTORY "${_qtcore_include_dir}/QtCore") set(_qt_include_prefix "${_qtcore_include_dir}") break() endif() From cb96f7f7d8695973ff6bc762441b3b9b5d197a61 Mon Sep 17 00:00:00 2001 From: feihong Date: Thu, 13 Feb 2025 15:08:42 +0800 Subject: [PATCH 20/20] update cmake.yml --- .github/workflows/cmake.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 52efdb32d..4eaf80f47 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -44,22 +44,22 @@ jobs: run: | if ("${{ matrix.qt_version }}" -eq "5") { pip install aqtinstall - # aqt install-qt windows desktop 5.15.2 win64_msvc2019 -m all + aqt install-qt windows desktop 5.15.2 win64_msvc2019 -m all $Qt5Dir = "$env:USERPROFILE\Qt\5.15.2\msvc2019_64" echo "Qt5Dir=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append echo "$Qt5Dir\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "QTDIR=$Qt5Dir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } else { - choco install qt6 --version ${{ matrix.qt_version }}.0.0 --params "/InstallationFolder C:/Qt/${{ matrix.qt_version }}" + choco install -y qt6-base-dev qt6-base-private-dev qt6-5compat-dev qt6-base-dev-tools ` + libqt6svg6-dev qt6-multimedia-dev qt6-declarative-dev qt6-webengine-dev ` + --params "/InstallationFolder C:/Qt/${{ matrix.qt_version }}" echo "C:/Qt/${{ matrix.qt_version }}/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo "QTDIR=C:/Qt/${{ matrix.qt_version }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append } - name: Configure CMake run: | - cmake -S . -B build \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=./install + cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./install - name: Build project run: |