summaryrefslogtreecommitdiffstats
path: root/cmake/QtBuild.cmake
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2018-10-29 16:53:51 +0100
committerTobias Hunger <tobias.hunger@qt.io>2018-11-01 11:49:30 +0000
commitb5aaea7998870c88d700ce4b41219cd15c29c0b4 (patch)
treee574043bd24533b9bcde8d0e53985e5512b46e59 /cmake/QtBuild.cmake
parente3f047f1cd4b7e74023bf4521da71015fd0ba36c (diff)
Support dbus adaptors and interfaces
Change-Id: I06ffff19574bbb8df79adabfcc447acff09d7ecf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'cmake/QtBuild.cmake')
-rw-r--r--cmake/QtBuild.cmake60
1 files changed, 57 insertions, 3 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index cf16be6126..25cfe7e8ba 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -405,7 +405,7 @@ function(qt_internal_process_automatic_sources target)
endfunction()
-set(__default_private_args "SOURCES;LIBRARIES;INCLUDE_DIRECTORIES;DEFINES")
+set(__default_private_args "SOURCES;LIBRARIES;INCLUDE_DIRECTORIES;DEFINES;DBUS_ADAPTOR_FLAGS;DBUS_ADAPTOR_SOURCES;DBUS_INTERFACE_FLAGS;DBUS_INTERFACE_SOURCES")
set(__default_public_args "PUBLIC_LIBRARIES;PUBLIC_INCLUDE_DIRECTORIES;PUBLIC_DEFINES")
@@ -423,7 +423,16 @@ function(extend_target target)
qt_evaluate_config_expression(result ${_arg_CONDITION})
if (${result})
- qt_internal_process_automatic_sources("${target}" ${_arg_SOURCES})
+ set(dbus_sources "")
+ foreach(adaptor ${_arg_DBUS_ADAPTOR_SOURCES})
+ qt_create_qdbusxml2cpp_command("${target}" "${adaptor}" ADAPTOR FLAGS "${_arg_DBUS_ADAPTOR_FLAGS}")
+ list(APPEND dbus_sources "${sources}")
+ endforeach()
+ foreach(interface ${_arg_DBUS_INTERFACE_SOURCES})
+ qt_create_qdbusxml2cpp_command("${target}" "${interface}" INTERFACE FLAGS "${_arg_DBUS_INTERFACE_FLAGS}")
+ list(APPEND dbus_sources "${sources}")
+ endforeach()
+ qt_internal_process_automatic_sources("${target}" "${_arg_SOURCES}")
foreach(dep ${_arg_LIBRARIES} ${_arg_PUBLIC_LIBRARIES})
if("${dep}" MATCHES "Qt::(.+)(Private?)")
@@ -445,7 +454,7 @@ function(extend_target target)
endif()
endforeach()
- target_sources("${target}" PRIVATE ${_arg_SOURCES})
+ target_sources("${target}" PRIVATE ${_arg_SOURCES} ${dbus_sources})
if (_arg_COMPILE_FLAGS)
set_source_files_properties(${_arg_SOURCES} PROPERTIES COMPILE_FLAGS "${_arg_COMPILE_FLAGS}")
endif()
@@ -635,6 +644,10 @@ function(add_qt_module name)
${_arg_PUBLIC_LIBRARIES}
LIBRARIES
${_arg_LIBRARIES}
+ DBUS_ADAPTOR_SOURCES "${_arg_DBUS_ADAPTOR_SOURCES}"
+ DBUS_ADAPTOR_FLAGS "${_arg_DBUS_ADAPTOR_FLAGS}"
+ DBUS_INTERFACE_SOURCES "${_arg_DBUS_INTERFACE_SOURCES}"
+ DBUS_INTERFACE_FLAGS "${_arg_DBUS_INTERFACE_FLAGS}"
)
### FIXME: Can we replace headers.pri?
@@ -774,6 +787,10 @@ function(add_qt_plugin name)
PUBLIC_DEFINES
QT_${name_upper}_LIB
${_arg_PUBLIC_DEFINES}
+ DBUS_ADAPTOR_SOURCES "${_arg_DBUS_ADAPTOR_SOURCES}"
+ DBUS_ADAPTOR_FLAGS "${_arg_DBUS_ADAPTOR_FLAGS}"
+ DBUS_INTERFACE_SOURCES "${_arg_DBUS_INTERFACE_SOURCES}"
+ DBUS_INTERFACE_FLAGS "${_arg_DBUS_INTERFACE_FLAGS}"
)
install(TARGETS "${module}" EXPORT "${module}Targets"
@@ -811,6 +828,10 @@ function(add_qt_executable name)
${_arg_INCLUDE_DIRECTORIES}
DEFINES ${_arg_DEFINES}
LIBRARIES ${_arg_LIBRARIES}
+ DBUS_ADAPTOR_SOURCES "${_arg_DBUS_ADAPTOR_SOURCES}"
+ DBUS_ADAPTOR_FLAGS "${_arg_DBUS_ADAPTOR_FLAGS}"
+ DBUS_INTERFACE_SOURCES "${_arg_DBUS_INTERFACE_SOURCES}"
+ DBUS_INTERFACE_FLAGS "${_arg_DBUS_INTERFACE_FLAGS}"
)
set_target_properties("${name}" PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${_arg_OUTPUT_DIRECTORY}"
@@ -1047,6 +1068,39 @@ function(qt_create_uic_command infile _result)
endfunction()
+# helper to set up a qdbusxml2cpp rule
+function(qt_create_qdbusxml2cpp_command target infile)
+ qt_parse_all_arguments(_arg "qt_create_qdbusxml2cpp_command" "ADAPTOR;INTERFACE" "" "FLAGS" ${ARGN})
+ if((_arg_ADAPTOR AND _arg_INTERFACE) OR (NOT _arg_ADAPTOR AND NOT _arg_INTERFACE))
+ message(FATAL_ERROR "qt_create_dbusxml2cpp_command needs either ADAPTOR or INTERFACE.")
+ endif()
+
+ set(_option "-a")
+ set(_type "adaptor")
+ if (_arg_INTERFACE)
+ set(_option "-p")
+ set(_type "interface")
+ endif()
+
+ get_filename_component(file_name "${infile}" NAME_WE)
+ string(TOLOWER "${file_name}" file_name)
+
+ set(header_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_${_type}.h")
+ set(source_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name}_${_type}.cpp")
+
+ add_custom_command(OUTPUT "${header_file}" "${source_file}"
+ COMMAND Qt::qdbusxml2cpp ${_arg_FLAGS} "${_option}" "${header_file}:${source_file}" "${infile}"
+ DEPENDS "${infile}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ VERBATIM)
+
+ # Moc the header:
+ qt_internal_wrap_cpp(moc_sources TARGET "${target}" MOC "${header_file}" HEADER_FILE_ONLY OFF)
+
+ target_sources("${target}" PRIVATE "${header_file}" "${source_file}" "${moc_sources}")
+endfunction()
+
+
function(qt_generate_forwarding_headers module)
qt_parse_all_arguments(_arg "qt_generate_forwarding_headers"
"PRIVATE" "SOURCE;DESTINATION" "CLASSES" ${ARGN})