Hi,

I have been investigating some weird build failures on build.kde.org, such 
as this one:

http://build.kde.org/job/kde-workspace_master_qt5/1432/console (error is
at 12:04:37)

I found out this is a dependency issue: the new json system should run
commands in this order (commands are simplified):

    desktoptojson \
        plasma-containmentactions-contextmenu.desktop \
        plasma-containmentactions-contextmenu.json

    moc menu.cpp -o menu.moc

    g++ menu.cpp -o menu.o

The kservice framework provides a macro to call desktoptojson:
kservice_desktop_to_json. The problem right now is that the macro does
not define a dependency to express that the json file should be
generated before moc is run.

I put together a new test for kservice to reproduce this problem, see
attached patch. It builds successfully with `make -j1` in the test dir,
but I am able to reproduce the build failure with `make -j4`.
(Note that you must manually rm the .json file from the build dir to
reproduce it over and over: `make clean` does not remove it)

I tried to express the missing dependency using various mixes of
OBJECT_DEPENDS, but I can't find a way to say: "this target must be
built before moc". Do you have any advice?

Aurélien
>From 097d935f32683a8c79dc09f6c7207af02ed8243d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= <[email protected]>
Date: Thu, 7 Nov 2013 10:37:22 +0100
Subject: [PATCH] Add test for kservice_desktop_to_json

---
 tier3/kservice/src/desktoptojson/CMakeLists.txt |  1 +
 tier3/kservice/tests/CMakeLists.txt             |  7 +++++++
 tier3/kservice/tests/dummy-service.desktop      | 10 ++++++++++
 tier3/kservice/tests/dummyplugin.cpp            |  9 +++++++++
 tier3/kservice/tests/dummyplugin.h              | 13 +++++++++++++
 5 files changed, 40 insertions(+)
 create mode 100644 tier3/kservice/tests/dummy-service.desktop
 create mode 100644 tier3/kservice/tests/dummyplugin.cpp
 create mode 100644 tier3/kservice/tests/dummyplugin.h

diff --git a/tier3/kservice/src/desktoptojson/CMakeLists.txt b/tier3/kservice/src/desktoptojson/CMakeLists.txt
index 9dc8635..afe21f2 100644
--- a/tier3/kservice/src/desktoptojson/CMakeLists.txt
+++ b/tier3/kservice/src/desktoptojson/CMakeLists.txt
@@ -4,6 +4,7 @@ add_executable(desktoptojson
     main.cpp
     kconfigtojson.cpp
 )
+add_executable(KF5::desktoptojson ALIAS desktoptojson)
 
 target_link_libraries(desktoptojson
     Qt5::Core
diff --git a/tier3/kservice/tests/CMakeLists.txt b/tier3/kservice/tests/CMakeLists.txt
index 70c450c..4f03aac 100644
--- a/tier3/kservice/tests/CMakeLists.txt
+++ b/tier3/kservice/tests/CMakeLists.txt
@@ -30,3 +30,10 @@ ecm_mark_as_test(kmimeassociationstest)
 
 target_link_libraries(kmimeassociationstest KService KF5::KConfigCore Qt5::Test)
 target_include_directories(kmimeassociationstest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src/kbuildsycoca/")
+
+######### kservicetojsontest ########
+include(../KServiceMacros.cmake)
+kservice_desktop_to_json(dummy-service.desktop)
+add_library(kservicetojsontest dummyplugin.cpp)
+target_link_libraries(kservicetojsontest KF5::KService)
+target_include_directories(kservicetojsontest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../src/plugin/")
diff --git a/tier3/kservice/tests/dummy-service.desktop b/tier3/kservice/tests/dummy-service.desktop
new file mode 100644
index 0000000..217e6de
--- /dev/null
+++ b/tier3/kservice/tests/dummy-service.desktop
@@ -0,0 +1,10 @@
+[Desktop entry]
+Type=Service
+Icon=
+Name=Dummy
+ServiceTypes=Dummy
+X-KDE-Library=kservicetojsontest
+X-KDE-PluginInfo-Author=Aurélien Gâteau
[email protected]
+X-KDE-PluginInfo-Name=kservicetojsontest
+X-KDE-PluginInfo-Version=°.1
diff --git a/tier3/kservice/tests/dummyplugin.cpp b/tier3/kservice/tests/dummyplugin.cpp
new file mode 100644
index 0000000..ca6acdb
--- /dev/null
+++ b/tier3/kservice/tests/dummyplugin.cpp
@@ -0,0 +1,9 @@
+#include <dummyplugin.h>
+#include <kpluginfactory.h>
+
+DummyPlugin::DummyPlugin(QObject*, const QVariantList&)
+{}
+
+K_PLUGIN_FACTORY_WITH_JSON(DummyPluginFactory, "dummy-service.json", registerPlugin<DummyPlugin>();)
+
+#include <dummyplugin.moc>
diff --git a/tier3/kservice/tests/dummyplugin.h b/tier3/kservice/tests/dummyplugin.h
new file mode 100644
index 0000000..33b1403
--- /dev/null
+++ b/tier3/kservice/tests/dummyplugin.h
@@ -0,0 +1,13 @@
+#ifndef DUMMYPLUGIN_H
+#define DUMMYPLUGIN_H
+
+#include <QObject>
+
+class DummyPlugin : public QObject
+{
+    Q_OBJECT
+public:
+    DummyPlugin(QObject*, const QVariantList&);
+};
+
+#endif /* DUMMYPLUGIN_H */
-- 
1.8.3.2


_______________________________________________
Kde-buildsystem mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-buildsystem

Reply via email to