diff options
author | Mate Barany <mate.barany@qt.io> | 2022-07-13 16:39:08 +0200 |
---|---|---|
committer | Mate Barany <mate.barany@qt.io> | 2022-09-06 11:44:22 +0200 |
commit | aa99bf532da51fc024c70e989e54b014e4cec199 (patch) | |
tree | c86276720e4a8bde0bd5a98684cb1131bcc5c051 /src | |
parent | 214953fad6c166cbaaab28f5f3ceb777e762f278 (diff) |
qdbusxml2cpp: modify the behavior of -m/--moc option
qdbusxml2cpp has a -m/--moc option. Change and modify the behavior
such that
-p foo -m includes moc_foo.cpp in the generated .cpp
-p :foo.cpp includes moc_foo.cpp in the generated .cpp
-p foo.h:foo.cpp includes moc_foo.cpp in the generated .cpp
Change the Qt6DbusMacros.cmake file accordingly.
[ChangeLog][qdbusxml2cpp] The -m/--moc option now generates
idiomatic moc file names (moc_base.cpp for headers, base.moc
for implementation files)(was: always base.moc). Build systems
using workarounds for the non-idiomatic naming of moc files
used by qdbusxml2cpp in the past can now drop these workarounds
for Qt versions >= 6.5.
Fixes: QTBUG-103313
Change-Id: I754b1b276f130cb8645166470e1b457a676590f7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/dbus/Qt6DBusMacros.cmake | 8 | ||||
-rw-r--r-- | src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 70 |
2 files changed, 65 insertions, 13 deletions
diff --git a/src/dbus/Qt6DBusMacros.cmake b/src/dbus/Qt6DBusMacros.cmake index 97f6e0fcc7..7c76ed5bf3 100644 --- a/src/dbus/Qt6DBusMacros.cmake +++ b/src/dbus/Qt6DBusMacros.cmake @@ -10,7 +10,7 @@ function(qt6_add_dbus_interface _sources _interface _basename) 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}/${_basename}.moc") + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") get_source_file_property(_nonamespace ${_interface} NO_NAMESPACE) if(_nonamespace) @@ -42,7 +42,7 @@ function(qt6_add_dbus_interface _sources _interface _basename) qt6_generate_moc("${_header}" "${_moc}") - list(APPEND ${_sources} "${_impl}" "${_header}" "${_moc}") + list(APPEND ${_sources} "${_impl}" "${_header}") macro_add_file_dependencies("${_impl}" "${_moc}") set(${_sources} ${${_sources}} PARENT_SCOPE) endfunction() @@ -156,7 +156,7 @@ function(qt6_add_dbus_adaptor _sources _xml_file _include) # _optionalParentClas 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}/${_basename}.moc") + set(_moc "${CMAKE_CURRENT_BINARY_DIR}/moc_${_basename}.cpp") if(_optionalClassName) add_custom_command(OUTPUT "${_impl}" "${_header}" @@ -179,7 +179,7 @@ function(qt6_add_dbus_adaptor _sources _xml_file _include) # _optionalParentClas ) macro_add_file_dependencies("${_impl}" "${_moc}") - list(APPEND ${_sources} "${_impl}" "${_header}" "${_moc}") + list(APPEND ${_sources} "${_impl}" "${_header}") set(${_sources} ${${_sources}} PARENT_SCOPE) endfunction() diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index c79baf66d6..82556ebae7 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -85,16 +85,32 @@ static void cleanInterfaces(QDBusIntrospection::Interfaces &interfaces) } } +static bool isSupportedSuffix(QStringView suffix) +{ + const QLatin1StringView candidates[] = { + "h"_L1, + "cpp"_L1, + "cc"_L1 + }; + + for (auto candidate : candidates) + if (suffix == candidate) + return true; + + return false; +} + // produce a header name from the file name static QString header(const QString &name) { QStringList parts = name.split(u':'); - QString retval = parts.first(); + QString retval = parts.front(); if (retval.isEmpty() || retval == "-"_L1) return retval; - if (!retval.endsWith(".h"_L1) && !retval.endsWith(".cpp"_L1) && !retval.endsWith(".cc"_L1)) + QFileInfo header{retval}; + if (!isSupportedSuffix(header.suffix())) retval.append(".h"_L1); return retval; @@ -104,12 +120,13 @@ static QString header(const QString &name) static QString cpp(const QString &name) { QStringList parts = name.split(u':'); - QString retval = parts.last(); + QString retval = parts.back(); if (retval.isEmpty() || retval == "-"_L1) return retval; - if (!retval.endsWith(".h"_L1) && !retval.endsWith(".cpp"_L1) && !retval.endsWith(".cc"_L1)) + QFileInfo source{retval}; + if (!isSupportedSuffix(source.suffix())) retval.append(".cpp"_L1); return retval; @@ -118,12 +135,47 @@ static QString cpp(const QString &name) // produce a moc name from the file name static QString moc(const QString &name) { - QString retval = header(name); - if (retval.isEmpty()) - return retval; + QString retval; + const QStringList fileNames = name.split(u':'); + + if (fileNames.size() == 1) { + QFileInfo fi{fileNames.front()}; + if (isSupportedSuffix(fi.suffix())) { + // Generates a file that contains the header and the implementation: include "filename.moc" + retval += fi.baseName(); + retval += ".moc"_L1; + } else { + // Separate source and header files are generated: include "moc_filename.cpp" + retval += "moc_"_L1; + retval += fi.baseName(); + retval += ".cpp"_L1; + } + } else { + QString headerName = fileNames.front(); + QString sourceName = fileNames.back(); + + if (sourceName.isEmpty() || sourceName == "-"_L1) { + // If only a header is generated, don't include anything + } else if (headerName.isEmpty() || headerName == "-"_L1) { + // If only source file is generated: include "moc_sourcename.cpp" + QFileInfo source{sourceName}; + + retval += "moc_"_L1; + retval += source.baseName(); + retval += ".cpp"_L1; + + fprintf(stderr, "warning: no header name is provided, assuming it to be \"%s\"\n", + qPrintable(source.baseName() + ".h"_L1)); + } else { + // Both source and header generated: include "moc_headername.cpp" + QFileInfo header{headerName}; + + retval += "moc_"_L1; + retval += header.baseName(); + retval += ".cpp"_L1; + } + } - retval.truncate(retval.length() - 1); // drop the h in .h - retval += "moc"_L1; return retval; } |