From 1c2f055074c7901ad2fe38bf416444c22cfdb484 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 13 Sep 2022 02:13:07 +0200 Subject: [PATCH] Qt6DBusMacros: Fix regression after moc filename changes This fixes an regression after commit aa99bf532da51fc024c70e989e54b014e4cec199, where the moc filename was changed. It does not check if basename contains a relative path. This checks if basename contains a relative path. In that case, make sure to correctly set the path in the `_moc` variable. Fixes: QTBUG-106571 Change-Id: I88ec156d7c666b626d85018e9cde0dc397051035 Reviewed-by: Marc Mutz Reviewed-by: Alexandru Croitor --- src/dbus/Qt6DBusMacros.cmake | 50 ++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/dbus/Qt6DBusMacros.cmake b/src/dbus/Qt6DBusMacros.cmake index 7c76ed5bf3..c2c4a6dc6f 100644 --- a/src/dbus/Qt6DBusMacros.cmake +++ b/src/dbus/Qt6DBusMacros.cmake @@ -6,11 +6,17 @@ include(MacroAddFileDependencies) include(CMakeParseArguments) -function(qt6_add_dbus_interface _sources _interface _basename) +function(qt6_add_dbus_interface _sources _interface _relativename) get_filename_component(_infile ${_interface} ABSOLUTE) - set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h") - set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp") - set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") + get_filename_component(_basepath ${_relativename} DIRECTORY) + get_filename_component(_basename ${_relativename} NAME) + set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.h") + set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.cpp") + if(_basepath) + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/moc_${_basename}.cpp") + else() + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") + endif() get_source_file_property(_nonamespace ${_interface} NO_NAMESPACE) if(_nonamespace) @@ -30,7 +36,7 @@ function(qt6_add_dbus_interface _sources _interface _basename) endif() add_custom_command(OUTPUT "${_impl}" "${_header}" - COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp ${_params} -p ${_basename} ${_infile} + COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp ${_params} -p ${_relativename} ${_infile} DEPENDS ${_infile} ${QT_CMAKE_EXPORT_NAMESPACE}::qdbuscpp2xml VERBATIM ) @@ -52,14 +58,14 @@ if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) # arguments, so we can preserve them exactly. As an added bonus, if the # caller doesn't provide enough arguments, they will get an error message # for their call site instead of here in the wrapper. - function(qt_add_dbus_interface sources interface basename) + function(qt_add_dbus_interface sources interface relativename) if(ARGC GREATER 3) message(FATAL_ERROR "Unexpected arguments: ${ARGN}") endif() if(QT_DEFAULT_MAJOR_VERSION EQUAL 5) - qt5_add_dbus_interface("${sources}" "${interface}" "${basename}") + qt5_add_dbus_interface("${sources}" "${interface}" "${relativename}") elseif(QT_DEFAULT_MAJOR_VERSION EQUAL 6) - qt6_add_dbus_interface("${sources}" "${interface}" "${basename}") + qt6_add_dbus_interface("${sources}" "${interface}" "${relativename}") endif() set("${sources}" "${${sources}}" PARENT_SCOPE) endfunction() @@ -136,7 +142,7 @@ if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) endif() -function(qt6_add_dbus_adaptor _sources _xml_file _include) # _optionalParentClass _optionalBasename _optionalClassName) +function(qt6_add_dbus_adaptor _sources _xml_file _include) # _optionalParentClass _optionalRelativename _optionalClassName) get_filename_component(_infile ${_xml_file} ABSOLUTE) set(_optionalParentClass "${ARGV3}") @@ -145,28 +151,34 @@ function(qt6_add_dbus_adaptor _sources _xml_file _include) # _optionalParentClas set(_parentClass "${_optionalParentClass}") endif() - set(_optionalBasename "${ARGV4}") - if(_optionalBasename) - set(_basename ${_optionalBasename} ) + set(_optionalRelativename "${ARGV4}") + if(_optionalRelativename) + set(_relativename ${_optionalRelativename}) else() - string(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _basename ${_infile}) - string(TOLOWER ${_basename} _basename) + string(REGEX REPLACE "(.*[/\\.])?([^\\.]+)\\.xml" "\\2adaptor" _relativename ${_infile}) + string(TOLOWER ${_relativename} _relativename) endif() + get_filename_component(_basepath ${_relativename} DIRECTORY) + get_filename_component(_basename ${_relativename} NAME) set(_optionalClassName "${ARGV5}") - set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h") - set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp") - set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") + set(_header "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.h") + set(_impl "${CMAKE_CURRENT_BINARY_DIR}/${_relativename}.cpp") + if(_basepath) + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/${_basepath}/moc_${_basename}.cpp") + else() + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") + endif() if(_optionalClassName) add_custom_command(OUTPUT "${_impl}" "${_header}" - COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp -m -a ${_basename} -c ${_optionalClassName} -i ${_include} ${_parentClassOption} ${_parentClass} ${_infile} + COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp -m -a ${_relativename} -c ${_optionalClassName} -i ${_include} ${_parentClassOption} ${_parentClass} ${_infile} DEPENDS ${_infile} ${QT_CMAKE_EXPORT_NAMESPACE}::qdbuscpp2xml VERBATIM ) else() add_custom_command(OUTPUT "${_impl}" "${_header}" - COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp -m -a ${_basename} -i ${_include} ${_parentClassOption} ${_parentClass} ${_infile} + COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::qdbusxml2cpp -m -a ${_relativename} -i ${_include} ${_parentClassOption} ${_parentClass} ${_infile} DEPENDS ${_infile} ${QT_CMAKE_EXPORT_NAMESPACE}::qdbuscpp2xml VERBATIM )