blob: ffaccaf8939498d7aeeb2e615f1a98dfa4dd03b3 (
plain)
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
|
# Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
function(qt6_add_statecharts target_or_outfiles)
set(options)
set(oneValueArgs OUTPUT_DIR OUTPUT_DIRECTORY NAMESPACE)
set(multiValueArgs QSCXMLC_ARGUMENTS OPTIONS)
cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(scxml_files ${ARGS_UNPARSED_ARGUMENTS})
set(outfiles)
if (ARGS_NAMESPACE)
set(namespace "--namespace" ${ARGS_NAMESPACE})
endif()
if (ARGS_OUTPUT_DIR)
message(AUTHOR_WARNING
"OUTPUT_DIR is deprecated. Please use OUTPUT_DIRECTORY instead.")
set(ARGS_OUTPUT_DIRECTORY ${ARGS_OUTPUT_DIR})
endif()
if (ARGS_QSCXMLC_ARGUMENTS)
message(AUTHOR_WARNING
"QSCXMLC_ARGUMENTS is deprecated. Please use OPTIONS instead.")
set(ARGS_OPTIONS ${ARGS_QSCXMLC_ARGUMENTS})
endif()
set(qscxmlcOutputDir ${CMAKE_CURRENT_BINARY_DIR})
if (ARGS_OUTPUT_DIRECTORY)
set(qscxmlcOutputDir ${ARGS_OUTPUT_DIRECTORY})
if (NOT EXISTS "${qscxmlcOutputDir}" OR NOT IS_DIRECTORY "${qscxmlcOutputDir}")
message(WARNING
"qt6_add_statecharts: output dir does not exist: \"" ${qscxmlcOutputDir} "\". "
"Statechart code generation may fail on some platforms." )
endif()
endif()
_qt_internal_get_tool_wrapper_script_path(tool_wrapper)
set(qscxmlc_bin "${tool_wrapper}" "$<TARGET_FILE:${QT_CMAKE_EXPORT_NAMESPACE}::qscxmlc>")
set(outfiles)
foreach(it ${scxml_files})
get_filename_component(outfilename ${it} NAME_WE)
get_filename_component(infile ${it} ABSOLUTE)
set(outfile ${qscxmlcOutputDir}/${outfilename})
set(outfile_cpp ${qscxmlcOutputDir}/${outfilename}.cpp)
set(outfile_h ${qscxmlcOutputDir}/${outfilename}.h)
add_custom_command(OUTPUT ${outfile_cpp} ${outfile_h}
COMMAND
${qscxmlc_bin} ${namespace} ${ARGS_OPTIONS}
--output ${outfile} ${infile}
DEPENDS ${QT_CMAKE_EXPORT_NAMESPACE}::qscxmlc
MAIN_DEPENDENCY ${infile}
VERBATIM)
set_source_files_properties(${outfile_cpp} ${outfile_h} PROPERTIES SKIP_AUTOGEN TRUE)
list(APPEND outfiles ${outfile_cpp})
endforeach()
if (TARGET ${target_or_outfiles})
target_include_directories(${target_or_outfiles} PRIVATE ${qscxmlcOutputDir})
target_sources(${target_or_outfiles} PRIVATE ${outfiles})
else()
set(${target_or_outfiles} ${outfiles} PARENT_SCOPE)
endif()
endfunction()
if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
function(qt_add_statecharts outfiles)
if(QT_DEFAULT_MAJOR_VERSION EQUAL 5)
qt5_add_statecharts("${outfiles}" ${ARGN})
elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6)
qt6_add_statecharts("${outfiles}" ${ARGN})
endif()
set("${outfiles}" "${${outfiles}}" PARENT_SCOPE)
endfunction()
endif()
|