Files
FreeCADWasmDev/cMake/FreeCAD_Helpers/SetupQt.cmake
wangdequan b5a086fda5
Some checks failed
FreeCAD master CI / Prepare (push) Has been cancelled
FreeCAD master CI / Pixi (push) Has been cancelled
FreeCAD master CI / Ubuntu (push) Has been cancelled
FreeCAD master CI / Windows (push) Has been cancelled
FreeCAD master CI / Lint (push) Has been cancelled
FreeCAD master CI / WrapUp (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
Stale Issues / stale (push) Has been cancelled
FreeCAD WebAssembly development snapshot
2026-08-20 07:00:53 +08:00

143 lines
5.7 KiB
CMake

# -------------------------------- Qt --------------------------------
set(FREECAD_QT_COMPONENTS Core Concurrent Network Xml)
if(FREECAD_WEB)
# QtConcurrent is only used by GUI code in the current Web module graph.
set(FREECAD_QT_COMPONENTS Core Network Xml)
endif()
if (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 OpenGLWidgets)
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()
# QtBase does not ship the LinguistTools CMake module. The Web dependency
# prefix intentionally builds only QtBase, so provide the small part of
# qt_add_translation needed by core resource generation using host lrelease.
if(FREECAD_WEB AND NOT COMMAND qt_add_translation)
find_program(FREECAD_WEB_LRELEASE_EXECUTABLE NAMES lrelease lrelease-qt5)
if(NOT FREECAD_WEB_LRELEASE_EXECUTABLE)
message(FATAL_ERROR "FREECAD_WEB requires a host lrelease executable to build translations")
endif()
function(qt_add_translation _qm_files)
set(_generated_qm_files)
foreach(_ts_file IN LISTS ARGN)
get_filename_component(_ts_name "${_ts_file}" NAME_WE)
get_source_file_property(_output_location "${_ts_file}" OUTPUT_LOCATION)
if(NOT _output_location OR _output_location STREQUAL "NOTFOUND")
set(_output_location "${CMAKE_CURRENT_BINARY_DIR}")
endif()
set(_qm_file "${_output_location}/${_ts_name}.qm")
add_custom_command(
OUTPUT "${_qm_file}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${_output_location}"
COMMAND "${FREECAD_WEB_LRELEASE_EXECUTABLE}" "${_ts_file}" -qm "${_qm_file}"
DEPENDS "${_ts_file}"
VERBATIM)
list(APPEND _generated_qm_files "${_qm_file}")
endforeach()
set(${_qm_files} "${_generated_qm_files}" PARENT_SCOPE)
endfunction()
endif()
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)
configure_file(${CMAKE_SOURCE_DIR}/src/QtWidgets.h.cmake ${CMAKE_BINARY_DIR}/src/QtWidgets.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()