On Tuesday 12 June 2007, Alexander Neundorf wrote:
> Hi,
>
> On Saturday 09 June 2007 05:20, Matthias Kretz wrote:
> > On Saturday 09 June 2007, Alexander Neundorf wrote:
> > > On Friday 08 June 2007 05:07, Matthias Kretz wrote:
> > > > On Friday 08 June 2007, Alexander Neundorf wrote:
> > > > > Using OBJECT_DEPENDS works more or less, but not 100%.
> > > > >
> > > > :( Is this a bug in cmake or is it some corner case that
> > > >
> > > > add_library/add_executable works around?
> > > >
> > > > > IOW we have to stay with a non-source-file extension.
> > > >
> > > > How about the attached patch? It creates a new top-level target that
> > > > depends on all moc custom commands and the library/executable target
> > > > then depends on that moc target.
> > > > I tried it with a clean kdelibs build and it created _all_ moc files
> > > > before it started any compile job. I'm not sure why cmake/make does
> > > > that but it's not really wrong either.
> > > >
> > > > A variation of the patch could be to check for .cpp files in
> > > > _automoc_FILES and only then add this additional top-level target.
> > > > Else do the same as before.
> > >
> > > I still have a patch here which moves the automoc test from cmake-time
> > > to build time (i.e. faster cmake run)
> > > This and your patch might fit together.
> > > I have to get it up-to-date and then we can see whether they work
> > > together. Please don't commit before.
> >
> > OK, then I'll revert my local moc include changes in phonon - otherwise I
> > can't work on it anymore... The reason why I'd like to have it working
> > soon is that Trolltech wants to be able to compile phonon using qmake
> > (makes it easier for them to work on Windows and MacOS).
>
> attached you can find a modified KDE4Macros.cmake.
> It creates for every target a automoc target, which executes an external
> cmake script (kde4automoc.cmake), which does the actual parsing.
> It seems to work here for me for kdelibs.
>
> In kde4automoc.cmake it should be easy to also search for moc_*.cpp files.

Yep. That was easy. :-) Patch attached.

> Please give it a try and see how it works.

So far it's been working great. I especially like that I don't have to rerun 
cmake when something automoc related changes and the CMakeLists.txt files 
don't change (e.g. if you forgot to #include the moc file). There are many 
STATUS messages, but I guess you'll comment those out before committing to 
trunk?

-- 
________________________________________________________
Matthias Kretz (Germany)                            <><
http://Vir.homelinux.org/
[EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED]
Index: kde4automoc.cmake
===================================================================
--- kde4automoc.cmake	(revision 675396)
+++ kde4automoc.cmake	(working copy)
@@ -18,23 +18,28 @@
 
       set(_mocs_PER_FILE)
 
-      string(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}")
+      string(REGEX MATCHALL "#include +([\"<]moc_[^ ]+\\.cpp|[^ ]+\\.moc)[\">]" _match "${_contents}")
       if (_match)
          foreach (_current_MOC_INC ${_match})
             string(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
+            if(_current_MOC)
+               get_filename_component(_basename ${_current_MOC} NAME_WE)
+            else(_current_MOC)
+               string(REGEX MATCH "moc_[^ <\"]+\\.cpp" _current_MOC "${_current_MOC_INC}")
+               get_filename_component(_basename ${_current_MOC} NAME_WE)
+               string(REPLACE "moc_" "" _basename "${_basename}")
+            endif(_current_MOC)
 
-            get_filename_component(_basename ${_current_MOC} NAME_WE)
             set(_header ${_abs_PATH}/${_basename}.h)
             set(_moc    ${KDE4_CURRENT_BINARY_DIR}/${_current_MOC})
 
+            if (NOT EXISTS ${_header})
+               message(FATAL_ERROR "In the file \"${_filename}\" the moc file \"${_current_MOC}\" is included, but \"${_header}\" doesn't exist.")
+            endif (NOT EXISTS ${_header})
+
             list(APPEND _mocs_PER_FILE ${_basename})
             file(APPEND ${_moc_mark_FILE} "set( ${_basename}_MOC ${_moc})\n")
             file(APPEND ${_moc_mark_FILE} "set( ${_basename}_HEADER ${_header})\n")
-
-            if (NOT EXISTS ${_abs_PATH}/${_basename}.h)
-               message(FATAL_ERROR "In the file \"${_filename}\" the moc file \"${_current_MOC}\" is included, but \"${_abs_PATH}/${_basename}.h\" doesn't exist.")
-            endif (NOT EXISTS ${_abs_PATH}/${_basename}.h)
-
          endforeach (_current_MOC_INC)
       endif (_match)
       file(APPEND ${_moc_mark_FILE} "set(mocs ${_mocs_PER_FILE})\n")

Attachment: pgpbqwEuaibgW.pgp
Description: PGP signature

_______________________________________________
Kde-buildsystem mailing list
Kde-buildsystem@kde.org
https://mail.kde.org/mailman/listinfo/kde-buildsystem

Reply via email to