/
SetupQt.cmake
110 lines (92 loc) · 4.12 KB
/
SetupQt.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# -------------------------------- Qt --------------------------------
set(FREECAD_QT_COMPONENTS Core Concurrent Network Xml)
if (FREECAD_QT_MAJOR_VERSION EQUAL 5)
list (APPEND FREECAD_QT_COMPONENTS XmlPatterns)
elseif (FREECAD_QT_MAJOR_VERSION EQUAL 6)
set (Qt6Core_MOC_EXECUTABLE Qt6::moc)
endif()
if(BUILD_GUI)
if (FREECAD_QT_MAJOR_VERSION EQUAL 5)
if (WIN32)
list (APPEND FREECAD_QT_COMPONENTS WinExtras)
endif()
elseif (FREECAD_QT_MAJOR_VERSION EQUAL 6)
list (APPEND FREECAD_QT_COMPONENTS GuiTools)
list (APPEND FREECAD_QT_COMPONENTS SvgWidgets)
list (APPEND FREECAD_QT_COMPONENTS Core5Compat)
endif()
list (APPEND FREECAD_QT_COMPONENTS OpenGL PrintSupport Svg UiTools Widgets LinguistTools)
if(BUILD_DESIGNER_PLUGIN)
list (APPEND FREECAD_QT_COMPONENTS Designer)
endif()
endif()
if (ENABLE_DEVELOPER_TESTS)
list (APPEND FREECAD_QT_COMPONENTS Test)
endif ()
foreach(COMPONENT IN LISTS FREECAD_QT_COMPONENTS)
find_package(Qt${FREECAD_QT_MAJOR_VERSION} REQUIRED COMPONENTS ${COMPONENT})
set(Qt${COMPONENT}_LIBRARIES ${Qt${FREECAD_QT_MAJOR_VERSION}${COMPONENT}_LIBRARIES})
set(Qt${COMPONENT}_INCLUDE_DIRS ${Qt${FREECAD_QT_MAJOR_VERSION}${COMPONENT}_INCLUDE_DIRS})
set(Qt${COMPONENT}_FOUND ${Qt${FREECAD_QT_MAJOR_VERSION}${COMPONENT}_FOUND})
set(Qt${COMPONENT}_VERSION ${Qt${FREECAD_QT_MAJOR_VERSION}${COMPONENT}_VERSION})
endforeach()
set(CMAKE_AUTOMOC TRUE)
set(CMAKE_AUTOUIC TRUE)
set(QtCore_MOC_EXECUTABLE ${Qt${FREECAD_QT_MAJOR_VERSION}Core_MOC_EXECUTABLE})
add_definitions(-DQT_NO_KEYWORDS)
message(STATUS "Set up to compile with Qt ${Qt${FREECAD_QT_MAJOR_VERSION}Core_VERSION}")
# In Qt 5.15 they added more generic names for these functions: "backport" those new names
# so we can migrate to using the non-version-named functions in all instances.
if (Qt${FREECAD_QT_MAJOR_VERSION}Core_VERSION VERSION_LESS 5.15.0)
message(STATUS "Manually creating qt_wrap_cpp() and qt_add_resources() to support Qt ${Qt${FREECAD_QT_MAJOR_VERSION}Core_VERSION}")
# Wrapper code adapted from Qt 6's Qt6CoreMacros.cmake file:
function(qt_add_resources outfiles)
qt5_add_resources("${outfiles}" ${ARGN})
if(TARGET ${outfiles})
cmake_parse_arguments(PARSE_ARGV 1 arg "" "OUTPUT_TARGETS" "")
if (arg_OUTPUT_TARGETS)
set(${arg_OUTPUT_TARGETS} ${${arg_OUTPUT_TARGETS}} PARENT_SCOPE)
endif()
else()
set("${outfiles}" "${${outfiles}}" PARENT_SCOPE)
endif()
endfunction()
function(qt_wrap_cpp outfiles)
qt5_wrap_cpp("${outfiles}" ${ARGN})
set("${outfiles}" "${${outfiles}}" PARENT_SCOPE)
endfunction()
function(qt_add_translation _qm_files)
qt5_add_translation("${_qm_files}" ${ARGN})
set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
endfunction()
# Since Qt 5.15 Q_DISABLE_COPY_MOVE is defined
set (HAVE_Q_DISABLE_COPY_MOVE 0)
else()
# Since Qt 5.15 Q_DISABLE_COPY_MOVE is defined
set (HAVE_Q_DISABLE_COPY_MOVE 1)
endif()
configure_file(${CMAKE_SOURCE_DIR}/src/QtCore.h.cmake ${CMAKE_BINARY_DIR}/src/QtCore.h)
function(qt_find_and_add_translation _qm_files _tr_dir _qm_dir)
file(GLOB _ts_files ${_tr_dir})
set_source_files_properties(${_ts_files} PROPERTIES OUTPUT_LOCATION ${_qm_dir})
qt_add_translation("${_qm_files}" ${_ts_files})
set("${_qm_files}" "${${_qm_files}}" PARENT_SCOPE)
endfunction()
function(qt_create_resource_file outfile)
set(QRC "<RCC>\n <qresource>\n")
foreach (it ${ARGN})
get_filename_component(qmfile "${it}" NAME)
string(APPEND QRC " <file>translations/${qmfile}</file>")
endforeach()
string(APPEND QRC " </qresource>\n</RCC>\n")
file(WRITE ${outfile} ${QRC})
endfunction()
function(qt_create_resource_file_prefix outfile)
set(QRC "<RCC>\n <qresource prefix=\"/translations\">\n")
foreach (it ${ARGN})
get_filename_component(qmfile "${it}" NAME)
string(APPEND QRC " <file>${qmfile}</file>")
endforeach()
string(APPEND QRC " </qresource>\n</RCC>\n")
file(WRITE ${outfile} ${QRC})
endfunction()