Alexander Neundorf wrote:

> On Tuesday 22 November 2011, Stephen Kelly wrote:
>> On 11/22/2011 10:03 PM, Alexander Neundorf wrote:
>> >> Now when I try to build the frameworks branch using the cmake next
>> >> branch, I get:
>> >> 
>> >> AUTOMOC: error:
>> >> /home/stephen/dev/src/kf5/tier1/libkcoreaddons/src/io/kdirwatch.cpp:
>> >> The file includes the moc file "kdirwatch_p.moc", which seems to be
>> >> the moc file from a different source file. This is not supported.
>> >> Include "kdirwatch.moc" to run moc on this source file.
>> > 
>> > I added special handling now for the case that basename_p.moc is
>> > included with Qt4.
>> 
>> Your new commits work with the parts of the frameworks branch affected
>> by this, yes.
>> 
>> However, there are still many places where the foo.moc file is expected
>> to be the result of moc'ing the header, which causes errors like this:
>> 
>> 
>> In file included from
>> /home/stephen/dev/build/qt48/kf5/tier1/libkdbus/kdbus_automoc.cpp:2:0:
>> 
/home/stephen/dev/build/qt48/kf5/tier1/libkdbus/moc_kdbusinterprocesslock.c
>> pp: In static member function 'static void
>> KDBusInterProcessLock::qt_static_metacall(QObject*, QMetaObject::Call,
>> int, void**)':
>> 
/home/stephen/dev/build/qt48/kf5/tier1/libkdbus/moc_kdbusinterprocesslock.c
>> pp:55:22: error: invalid use of incomplete type 'struct
>> KDBusInterProcessLockPrivate'
>> 
/home/stephen/dev/build/qt48/kf5/tier1/libkdbus/../../../../../src/kf5/tie
>> r1/libkdbus/kdbusinterprocesslock.h:30:7: error: forward declaration of
>> 'struct KDBusInterProcessLockPrivate'
>> 
>> Fixed by changing the include from foo.moc to moc_foo.cpp of course.
>> 
>> This is due to the use of Q_PRIVATE_SLOT. I've just added a testcase to
>> the branch.
> 
> Please give the current AutomocIncludedDotMocFileHandling branch a try, it
> checks now also for this.

Building solid still fails with the AutomocIncludedDotMocFileHandling 
branch. One of the reasons for failure is including a file with a different 
basename .moc. Fixed in solid with 

-#include "devicenotifier.moc"
+#include "moc_devicenotifier.cpp"

in devicemanager.cpp.

The other failure is building files in subdirectories from a CMakeLists two 
levels up (all the files in the subdirectories are compiled into a single 
library) and including their moc files, which fails.

/home/stephen/dev/src/kf5/tier1/solid/solid/backends/fakehw/fakedevice.cpp:338:42:
 
fatal error: backends/fakehw/fakedevice.moc: No such file or directory


Solid builds standalone with Qt 4 in the frameworks branch. You already have 
it in your kdelibs git repo. The easiest thing would be:

git new-workdir kdelibs kdelibs-frameworks frameworks
cd kdelibs-frameworks/tier1/solid
mkdir build && cd build
cmake .. && make 

For convenience I put the current solid source here:

http://www.steveire.com/share/solid.tar.gz

You can decide how much of this should be covered in the backwards guarantee 
automoc feature and how much will require fixing solid instead. I attach the 
patch which fixes solid with cmake AutomocIncludedDotMocFileHandling branch.

Thanks,

Steve.
diff --git a/tier1/solid/solid/audiointerface.cpp b/tier1/solid/solid/audiointerface.cpp
index ddf6cbc..98e42b2 100644
--- a/tier1/solid/solid/audiointerface.cpp
+++ b/tier1/solid/solid/audiointerface.cpp
@@ -67,4 +67,4 @@ Solid::AudioInterface::SoundcardType Solid::AudioInterface::soundcardType() cons
     return_SOLID_CALL(Ifaces::AudioInterface *, d->backendObject(), InternalSoundcard, soundcardType());
 }
 
-#include "audiointerface.moc"
+#include "moc_audiointerface.cpp"
diff --git a/tier1/solid/solid/backends/fakehw/fakedevice.cpp b/tier1/solid/solid/backends/fakehw/fakedevice.cpp
index dce82e4..1e5781a 100644
--- a/tier1/solid/solid/backends/fakehw/fakedevice.cpp
+++ b/tier1/solid/solid/backends/fakehw/fakedevice.cpp
@@ -335,5 +335,5 @@ QObject *FakeDevice::createDeviceInterface(const Solid::DeviceInterface::Type &t
     return iface;
 }
 
-#include "backends/fakehw/fakedevice.moc"
+#include "backends/fakehw/moc_fakedevice.cpp"
 #include "backends/fakehw/fakedevice_p.moc"
diff --git a/tier1/solid/solid/devicemanager.cpp b/tier1/solid/solid/devicemanager.cpp
index 06919c3..0fd8c89 100644
--- a/tier1/solid/solid/devicemanager.cpp
+++ b/tier1/solid/solid/devicemanager.cpp
@@ -288,6 +288,6 @@ void Solid::DeviceManagerStorage::ensureManagerCreated()
     }
 }
 
-#include "devicenotifier.moc"
+#include "moc_devicenotifier.cpp"
 #include "moc_devicemanager_p.cpp"
 

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to