summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMate Barany <mate.barany@qt.io>2022-07-13 16:39:08 +0200
committerMate Barany <mate.barany@qt.io>2022-09-06 11:44:22 +0200
commitaa99bf532da51fc024c70e989e54b014e4cec199 (patch)
treec86276720e4a8bde0bd5a98684cb1131bcc5c051 /src
parent214953fad6c166cbaaab28f5f3ceb777e762f278 (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.cmake8
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp70
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;
}