diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-10-29 16:53:51 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-11-01 11:49:30 +0000 |
commit | b5aaea7998870c88d700ce4b41219cd15c29c0b4 (patch) | |
tree | e574043bd24533b9bcde8d0e53985e5512b46e59 /cmake/QtBuild.cmake | |
parent | e3f047f1cd4b7e74023bf4521da71015fd0ba36c (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.cmake | 60 |
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}) |