Skip to content

Commit 815730f

Browse files
author
feihong
committed
Initial support for using auto-generated wrappers
1 parent d1c8d34 commit 815730f

File tree

8 files changed

+75
-75
lines changed

8 files changed

+75
-75
lines changed

CMakeLists.txt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
cmake_minimum_required(VERSION 3.27)
22

3-
enable_testing()
4-
53
project(PythonQt LANGUAGES CXX VERSION 3.5.6)
64

75
set(CMAKE_CXX_STANDARD 11)
@@ -13,26 +11,6 @@ find_package(Python3 COMPONENTS Development)
1311
set(PYTHONQT_SUFFIX Qt${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}-Python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR})
1412

1513
add_subdirectory(generator)
16-
17-
if(NOT EXISTS "${PYTHONQT_GENERATED_PATH}")
18-
if(${QT_VERSION_MAJOR} VERSION_EQUAL 5)
19-
if(${QT_VERSION_MINOR} VERSION_LESS 3)
20-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_50)
21-
elseif(${QT_VERSION_MINOR} VERSION_LESS 6)
22-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_54)
23-
elseif(${QT_VERSION_MINOR} VERSION_LESS 11)
24-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_56)
25-
elseif(${QT_VERSION_MINOR} VERSION_LESS 15)
26-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_511)
27-
else()
28-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_LIST_DIR}/generated_cpp_515)
29-
endif()
30-
# elseif(${QT_VERSION_MAJOR} VERSION_EQUAL 6)
31-
else()
32-
message(FATAL "No generated sources exist for Qt${QT_VERSION}")
33-
endif()
34-
endif()
35-
3614
add_subdirectory(src)
3715
add_subdirectory(extensions)
3816
add_subdirectory(tests)

extensions/PythonQt_QtAll/CMakeLists.txt

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,69 +12,57 @@ else()
1212
target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_QTALL_STATIC)
1313
endif()
1414

15-
target_sources(${PROJECT_NAME} PRIVATE
16-
${SOURCES}
17-
${GENERATE_SOURCES}
18-
)
15+
target_sources(${PROJECT_NAME} PRIVATE ${SOURCES})
1916

20-
target_link_libraries(${PROJECT_NAME} PUBLIC
21-
Core
22-
)
17+
target_link_libraries(${PROJECT_NAME} PUBLIC Core)
2318

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

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

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

31-
foreach(QTMODULE IN LISTS QTMODULES)
32-
if(NOT TARGET Qt${QT_VERSION_MAJOR}::${QTMODULE})
25+
foreach(QtModule IN LISTS QTMODULES)
26+
if(NOT TARGET "Qt${QT_VERSION_MAJOR}::${QtModule}")
3327
continue()
3428
endif()
3529

36-
string(TOLOWER ${QTMODULE} qtmodule)
37-
file(GLOB GENERATE_SOURCES
38-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.h
39-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${qtmodule}/*.cpp
40-
)
41-
target_sources(${PROJECT_NAME} PRIVATE ${GENERATE_SOURCES})
42-
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::${QTMODULE})
43-
44-
string(TOUPPER ${QTMODULE} qtmodule)
45-
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_WITH_${qtmodule})
30+
string(TOUPPER ${QtModule} QTMODULE)
31+
target_sources(${PROJECT_NAME} PRIVATE ${PYTHONQT_WRAPPER_${QTMODULE}_SOURCES})
32+
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::${QtModule})
33+
target_compile_definitions(${PROJECT_NAME} PRIVATE PYTHONQT_WITH_${QTMODULE})
4634
endforeach()
4735

48-
if(TARGET Qt${QT_VERSION_MAJOR}::Gui)
36+
if(TARGET "Qt${QT_VERSION_MAJOR}::Gui")
4937
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets PrintSupport REQUIRED)
5038
target_link_libraries(${PROJECT_NAME} PUBLIC
5139
Qt${QT_VERSION_MAJOR}::Widgets
5240
Qt${QT_VERSION_MAJOR}::PrintSupport
5341
)
5442
endif()
5543

56-
if(TARGET Qt${QT_VERSION_MAJOR}::Svg AND QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
44+
if(TARGET "Qt${QT_VERSION_MAJOR}::Svg" AND QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
5745
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS SvgWidgets REQUIRED)
5846
target_link_libraries(${PROJECT_NAME} PUBLIC
5947
Qt${QT_VERSION_MAJOR}::SvgWidgets
6048
)
6149
endif()
6250

63-
if(TARGET Qt${QT_VERSION_MAJOR}::Multimedia)
51+
if(TARGET "Qt${QT_VERSION_MAJOR}::Multimedia")
6452
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS MultimediaWidgets REQUIRED)
6553
target_link_libraries(${PROJECT_NAME} PUBLIC
6654
Qt${QT_VERSION_MAJOR}::MultimediaWidgets
6755
)
6856
endif()
6957

70-
if(TARGET Qt${QT_VERSION_MAJOR}::Quick)
58+
if(TARGET "Qt${QT_VERSION_MAJOR}::Quick")
7159
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS QuickWidgets REQUIRED)
7260
target_link_libraries(${PROJECT_NAME} PUBLIC
7361
Qt${QT_VERSION_MAJOR}::QuickWidgets
7462
)
7563
endif()
7664

77-
if(TARGET Qt${QT_VERSION_MAJOR}::WebKit)
65+
if(TARGET "Qt${QT_VERSION_MAJOR}::WebKit")
7866
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS WebKitWidgets REQUIRED)
7967
target_link_libraries(${PROJECT_NAME} PUBLIC
8068
Qt${QT_VERSION_MAJOR}::WebKitWidgets

generator/CMakeLists.txt

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
cmake_minimum_required(VERSION 3.27)
12
project(PythonQtGenerator LANGUAGES CXX)
23

34
add_subdirectory(parser)
45

56
set(CMAKE_AUTOMOC ON)
67
set(CMAKE_AUTORCC ON)
78

8-
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Xml REQUIRED)
9+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
10+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Widgets Xml REQUIRED)
911

1012
file(GLOB SOURCES *.h *.cpp *.qrc)
1113
list(REMOVE_ITEM SOURCES "${CMAKE_CURRENT_LIST_DIR}/qtscript_masterinclude.h")
@@ -17,31 +19,56 @@ target_sources(${PROJECT_NAME} PRIVATE
1719
)
1820

1921
target_link_libraries(${PROJECT_NAME} PUBLIC
22+
Qt${QT_VERSION_MAJOR}::Core
2023
Qt${QT_VERSION_MAJOR}::Widgets
2124
Qt${QT_VERSION_MAJOR}::Xml
2225
rxx
2326
)
2427

28+
if (${QT_VERSION_MAJOR} VERSION_GREATER 5)
29+
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core5Compat REQUIRED)
30+
target_link_libraries(${PROJECT_NAME} PUBLIC Qt${QT_VERSION_MAJOR}::Core5Compat)
31+
endif()
32+
2533
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR})
2634

27-
set(PYTHONQT_GENERATED_PATH ${CMAKE_CURRENT_BINARY_DIR}/../generated_cpp PARENT_SCOPE)
35+
get_filename_component(PYTHONQT_GENERATED_PATH "${CMAKE_CURRENT_BINARY_DIR}" PATH)
36+
set(PYTHONQT_GENERATED_PATH "${PYTHONQT_GENERATED_PATH}/generated_cpp")
2837

29-
if(NOT EXISTS ${PYTHONQT_GENERATED_PATH})
30-
file(GLOB resources_files *.txt *.xml qtscript_masterinclude.h)
31-
foreach(resources_file IN LISTS resources_files)
32-
configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
33-
endforeach()
38+
file(GLOB resources_files *.txt *.xml qtscript_masterinclude.h)
39+
foreach(resources_file IN LISTS resources_files)
40+
configure_file(${resources_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
41+
endforeach()
3442

35-
if(WIN32)
36-
set(LIBRARY_SEARCH_PATH PATH)
37-
else()
38-
set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH)
39-
endif()
43+
if(WIN32)
44+
set(LIBRARY_SEARCH_PATH PATH)
45+
else()
46+
set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH)
47+
endif()
4048

41-
add_custom_target(GenerateCpp
42-
COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$<TARGET_FILE_DIR:Qt${QT_VERSION_MAJOR}::Widgets> $<TARGET_FILE:${PROJECT_NAME}>
43-
WORKING_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>
44-
VERBATIM USES_TERMINAL
49+
list(APPEND wrapper_list core core_builtin gui gui_builtin multimedia network qml quick sql svg uitools xml)
50+
foreach(wrapper IN LISTS wrapper_list)
51+
string(TOUPPER ${wrapper} WRAPPER)
52+
set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES
53+
"${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}0.h"
54+
"${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}0.cpp"
55+
"${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_${wrapper}/com_trolltech_qt_${wrapper}_init.cpp"
4556
)
46-
endif()
57+
list(APPEND PYTHONQT_WRAPPER_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES})
58+
set(PYTHONQT_WRAPPER_${WRAPPER}_SOURCES ${PYTHONQT_WRAPPER_${WRAPPER}_SOURCES} PARENT_SCOPE)
59+
endforeach()
60+
add_custom_command(OUTPUT ${PYTHONQT_WRAPPER_SOURCES}
61+
COMMAND ${CMAKE_COMMAND} -E env --modify ${LIBRARY_SEARCH_PATH}=path_list_prepend:$<TARGET_FILE_DIR:Qt${QT_VERSION_MAJOR}::Widgets> $<TARGET_FILE:${PROJECT_NAME}>
62+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} #[[$<TARGET_FILE_DIR:${PROJECT_NAME}>]]
63+
DEPENDS ${PROJECT_NAME}
64+
VERBATIM
65+
)
66+
67+
set_source_files_properties(${PYTHONQT_WRAPPER_SOURCES} PROPERTIES
68+
SKIP_AUTOMOC TRUE
69+
SKIP_AUTOUIC TRUE
70+
)
4771

72+
add_custom_target(PythonQtWrapper
73+
DEPENDS ${PROJECT_NAME} ${PYTHONQT_WRAPPER_SOURCES}
74+
)

generator/generatorsetqtscript.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class GeneratorSetQtScript : public GeneratorSet
6262

6363
private:
6464
MetaQtScriptBuilder builder;
65-
int maxClassesPerFile{30};
65+
int maxClassesPerFile{std::numeric_limits<int>::max() >> 1};
6666

6767
};
6868

generator/parser/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ add_subdirectory(rpp)
44
set(CMAKE_AUTOMOC ON)
55
set(CMAKE_AUTORCC ON)
66

7+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
78
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
89

910
file(GLOB SOURCES *.h *.cpp)

generator/parser/rpp/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
project(rpp LANGUAGES CXX)
22

3+
set(CMAKE_AUTOMOC ON)
4+
set(CMAKE_AUTORCC ON)
5+
6+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
37
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED)
48

59
file(GLOB SOURCES *.h preprocessor.cpp)

src/CMakeLists.txt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,14 @@ else()
1515
target_compile_definitions(${PROJECT_NAME} PUBLIC PYTHONQT_STATIC)
1616
endif()
1717

18-
file(GLOB GENERATE_SOURCES
19-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.h
20-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_core_builtin/*.cpp
21-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.h
22-
${PYTHONQT_GENERATED_PATH}/com_trolltech_qt_gui_builtin/*.cpp
23-
)
24-
2518
target_sources(${PROJECT_NAME} PRIVATE
2619
${SOURCES}
27-
${GENERATE_SOURCES}
20+
${PYTHONQT_WRAPPER_CORE_BUILTIN_SOURCES}
21+
${PYTHONQT_WRAPPER_GUI_BUILTIN_SOURCES}
2822
)
2923

24+
add_dependencies(${PROJECT_NAME} PythonQtWrapper)
25+
3026
file(GLOB PUBLIC_HEADER *.h)
3127

3228
set_target_properties(${PROJECT_NAME} PROPERTIES

tests/CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
project(tests LANGUAGES CXX)
1+
project(PythonQtTest LANGUAGES CXX)
22

33
set(CMAKE_AUTOMOC ON)
44

@@ -24,6 +24,12 @@ add_test(NAME ${PROJECT_NAME}
2424
WORKING_DIRECTORY $<TARGET_FILE_DIR:${PROJECT_NAME}>
2525
)
2626

27+
if(WIN32)
28+
set(LIBRARY_SEARCH_PATH PATH)
29+
else()
30+
set(LIBRARY_SEARCH_PATH LD_LIBRARY_PATH)
31+
endif()
32+
2733
set_tests_properties(${PROJECT_NAME} PROPERTIES
28-
ENVIRONMENT_MODIFICATION "Path=path_list_append:$<TARGET_FILE_DIR:Qt${QT_VERSION_MAJOR}::Widgets>"
34+
ENVIRONMENT_MODIFICATION "${LIBRARY_SEARCH_PATH}=path_list_prepend:$<TARGET_FILE_DIR:Qt${QT_VERSION_MAJOR}::Widgets>"
2935
)

0 commit comments

Comments
 (0)