cmake support for tst_moc
We use qt_wrap_cpp instead of AUTOMOC so that we can easily find the json files. Getting autorcc to run only after json file has been generated was deemed too tricky. Therefore the test is slightly modified to check for the json files in its directory instead of the resource, if the qrc file does not exist. Change-Id: Id1aabb117c8bab3ff81156da1f66d64e796bf18b Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>bb10
parent
3e09c28101
commit
7b3a2f5e3d
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
add_subdirectory(qmakelib)
|
||||
add_subdirectory(qmake)
|
||||
#add_subdirectory(moc) # special case to be ported
|
||||
add_subdirectory(moc)
|
||||
add_subdirectory(rcc)
|
||||
if(TARGET Qt::Widgets)
|
||||
add_subdirectory(uic)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,144 @@
|
|||
# special case skip regeneration
|
||||
# Generated from moc.pro.
|
||||
|
||||
#####################################################################
|
||||
## tst_moc Test:
|
||||
#####################################################################
|
||||
|
||||
|
||||
set(JSON_HEADERS
|
||||
backslash-newlines.h
|
||||
c-comments.h
|
||||
cstyle-enums.h
|
||||
cxx11-enums.h
|
||||
cxx11-explicit-override-control.h
|
||||
cxx11-final-classes.h
|
||||
cxx17-namespaces.h
|
||||
dir-in-include-path.h
|
||||
escapes-in-string-literals.h
|
||||
enum_with_include.h
|
||||
forward-declared-param.h
|
||||
function-with-attributes.h
|
||||
gadgetwithnoenums.h
|
||||
grand-parent-gadget-class.h
|
||||
moc_include.h
|
||||
namespace.h
|
||||
namespaced-flags.h
|
||||
no-keywords.h
|
||||
non-gadget-parent-class.h
|
||||
oldstyle-casts.h
|
||||
parse-defines.h
|
||||
plugin_metadata.h
|
||||
pointery_to_incomplete.h
|
||||
pure-virtual-signals.h
|
||||
qinvokable.h
|
||||
qprivateslots.h
|
||||
qtbug-35657-gadget.h
|
||||
related-metaobjects-in-gadget.h
|
||||
related-metaobjects-in-namespaces.h
|
||||
related-metaobjects-name-conflict.h
|
||||
single-quote-digit-separator-n3781.h
|
||||
single_function_keyword.h
|
||||
slots-with-void-template.h
|
||||
task192552.h
|
||||
task234909.h
|
||||
task240368.h
|
||||
task87883.h
|
||||
trigraphs.h
|
||||
using-namespaces.h
|
||||
)
|
||||
|
||||
qt_wrap_cpp(comparison_relevant_moc_list ${JSON_HEADERS}
|
||||
TARGET tst_moc
|
||||
OPTIONS
|
||||
"-Muri=com.company.app"
|
||||
"-Muri=com.company.app.private"
|
||||
"-DDEFINE_CMDLINE_EMPTY="
|
||||
"-DDEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)"
|
||||
"--output-json"
|
||||
)
|
||||
|
||||
list(TRANSFORM comparison_relevant_moc_list APPEND ".json" OUTPUT_VARIABLE moc_json_files)
|
||||
|
||||
qt_add_test(tst_moc
|
||||
SOURCES
|
||||
cxx-attributes.h
|
||||
tst_moc.cpp
|
||||
${comparison_relevant_moc_list}
|
||||
INCLUDE_DIRECTORIES
|
||||
testproject
|
||||
testproject/include
|
||||
MOC_OPTIONS
|
||||
"-Muri=com.company.app"
|
||||
"-Muri=com.company.app.private"
|
||||
"-DDEFINE_CMDLINE_EMPTY="
|
||||
"-DDEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)"
|
||||
"--output-json"
|
||||
EXCEPTIONS
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc PUBLIC_LIBRARIES Qt::CorePrivate)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION CMAKE_CROSSCOMPILING
|
||||
DEFINES
|
||||
MOC_CROSS_COMPILED
|
||||
)
|
||||
|
||||
if (UNIX AND (CLANG OR GCC OR ICC))
|
||||
qt_wrap_cpp(os9_moc os9-newlines.h)
|
||||
endif()
|
||||
|
||||
qt_extend_target(tst_moc CONDITION UNIX AND (CLANG OR GCC OR ICC)
|
||||
SOURCES
|
||||
os9-newlines.h
|
||||
win-newlines.h
|
||||
${os9_moc}
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION CLANG OR GCC
|
||||
SOURCES
|
||||
dollars.h
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION TARGET Qt::DBus
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::DBus
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION TARGET Qt::Concurrent
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Concurrent
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION TARGET Qt::Network
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Network
|
||||
)
|
||||
|
||||
qt_extend_target(tst_moc CONDITION TARGET Qt::Sql
|
||||
PUBLIC_LIBRARIES
|
||||
Qt::Sql
|
||||
)
|
||||
|
||||
get_target_property(target_binary_dir tst_moc BINARY_DIR)
|
||||
set(cmake_autogen_cache_file
|
||||
"${target_binary_dir}/CMakeFiles/tst_moc_autogen.dir/ParseCache.txt")
|
||||
set(cmake_autogen_info_file
|
||||
"${target_binary_dir}/CMakeFiles/tst_moc_autogen.dir/AutogenInfo.json")
|
||||
set(moc_json_out ${target_binary_dir}/moc_json_out)
|
||||
|
||||
file(REMOVE ${moc_json_out})
|
||||
foreach(filename ${moc_json_files})
|
||||
file(APPEND ${moc_json_out} "${filename}\n")
|
||||
endforeach()
|
||||
|
||||
set(metatype_file "allmocs.json")
|
||||
configure_file("allmocs_baseline_in.json" "${target_binary_dir}/allmocs_baseline.json")
|
||||
|
||||
add_custom_command(TARGET tst_moc
|
||||
POST_BUILD
|
||||
COMMAND ${QT_CMAKE_EXPORT_NAMESPACE}::moc
|
||||
-o "allmocs.json"
|
||||
--collect-json "@${moc_json_out}"
|
||||
COMMENT "Running moc with --collect-json"
|
||||
)
|
||||
|
|
@ -3970,14 +3970,20 @@ void tst_Moc::mocJsonOutput()
|
|||
return QJsonDocument::fromJson(f.readAll());
|
||||
};
|
||||
|
||||
const QString actualFile = QStringLiteral(":/allmocs.json");
|
||||
const QString expectedFile = QStringLiteral(":/allmocs_baseline.json");
|
||||
QString actualFile = QStringLiteral(":/allmocs.json");
|
||||
QString expectedFile = QStringLiteral(":/allmocs_baseline.json");
|
||||
if (!QFile::exists(actualFile)) {
|
||||
// TODO: necessary with cmake as we cannot generate the qrc file soon enough
|
||||
auto const appDir = QCoreApplication::applicationDirPath();
|
||||
actualFile = appDir + QDir::separator() + QLatin1String("./allmocs.json");
|
||||
expectedFile = appDir + QDir::separator() + QLatin1String("./allmocs_baseline.json");
|
||||
}
|
||||
|
||||
QVERIFY2(QFile::exists(actualFile), qPrintable(actualFile));
|
||||
QVERIFY2(QFile::exists(expectedFile), qPrintable(expectedFile));
|
||||
|
||||
QJsonDocument actualOutput = readFile(QLatin1String(":/allmocs.json"));
|
||||
QJsonDocument expectedOutput = readFile(QLatin1String(":/allmocs_baseline.json"));
|
||||
QJsonDocument actualOutput = readFile(actualFile);
|
||||
QJsonDocument expectedOutput = readFile(expectedFile);
|
||||
|
||||
const auto showPotentialDiff = [](const QJsonDocument &actual, const QJsonDocument &expected) -> QByteArray {
|
||||
#if defined(Q_OS_UNIX)
|
||||
|
|
@ -4275,4 +4281,3 @@ QTEST_MAIN(tst_Moc)
|
|||
#undef emit
|
||||
|
||||
#include "tst_moc.moc"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue