On Monday 16 June 2008 17:13:41 Matthias Kretz wrote:
> Hmm, perhaps the target could be made explicit:
>
> add_automoc4_target(phonon_automoc phonon_SRCS)
> add_library(phonon ${phonon_SRCS})
> add_dependencies(phonon phonon_automoc)
>
> kde4_add_library/executable/plugin would hide all that.

Please test the attached patch (esp. on Windows) and let me know what you 
think about this new automoc macro.

-- 
________________________________________________________
Matthias Kretz (Germany)                            <><
http://Vir.homelinux.org/
[EMAIL PROTECTED], [EMAIL PROTECTED],
[EMAIL PROTECTED]

Index: kdesupport/automoc/Automoc4Config.cmake
===================================================================
--- kdesupport/automoc/Automoc4Config.cmake	(revision 821826)
+++ kdesupport/automoc/Automoc4Config.cmake	(working copy)
@@ -33,13 +33,11 @@
 
 macro(AUTOMOC4 _target_NAME _SRCS)
    set(_moc_files)
-#   set(_moc_headers)
 
    # first list all explicitly set headers
    foreach(_header_to_moc ${_automoc4_headers_${_target_NAME}} )
       get_filename_component(_abs_header ${_header_to_moc} ABSOLUTE)
       list(APPEND _moc_files ${_abs_header})
-#      list(APPEND _moc_headers ${_abs_header})
    endforeach(_header_to_moc)
 
    # now add all the sources for the automoc
@@ -52,16 +50,6 @@
          get_filename_component(_suffix "${_current_FILE}" EXT)
          # skip every source file that's not C++
          if(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
-#             get_filename_component(_basename "${_current_FILE}" NAME_WE)
-#             get_filename_component(_abs_path "${_abs_current_FILE}" PATH)
-#             set(_header "${_abs_path}/${_basename}.h")
-#             if(EXISTS "${_header}")
-#                list(APPEND _moc_headers ${_header})
-#             endif(EXISTS "${_header}")
-#             set(_pheader "${_abs_path}/${_basename}_p.h")
-#             if(EXISTS "${_pheader}")
-#                list(APPEND _moc_headers ${_pheader})
-#             endif(EXISTS "${_pheader}")
              list(APPEND _moc_files ${_abs_current_FILE})
          endif(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
       endif(NOT  _generated  AND NOT  _skip)
@@ -75,18 +63,6 @@
       # configure_file replaces _moc_files, _moc_incs and _moc_defs
       configure_file(${_AUTOMOC4_CURRENT_DIR}/automoc4.files.in ${_automoc_source}.files)
 
-#      add_custom_target(${_target_NAME}_automoc
-#         ALL
-#         COMMAND ${AUTOMOC4_EXECUTABLE}
-#         ${_automoc_source}
-#         ${CMAKE_CURRENT_SOURCE_DIR}
-#         ${CMAKE_CURRENT_BINARY_DIR}
-#         ${QT_MOC_EXECUTABLE}
-#         ${CMAKE_COMMAND}
-#         DEPENDS ${_automoc_source}.files ${_AUTOMOC4_EXECUTABLE_DEP} ${_moc_headers} ${${_SRCS}}
-#         #COMMENT ""
-#         VERBATIM
-#         )
       add_custom_command(OUTPUT ${_automoc_source}
          COMMAND ${AUTOMOC4_EXECUTABLE}
          ${_automoc_source}
@@ -99,10 +75,69 @@
          COMMENT ""
          VERBATIM
          )
-#      set_source_files_properties(${_automoc_source} PROPERTIES GENERATED TRUE)
-#      set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${_automoc_source})
       set(${_SRCS} ${_automoc_source} ${${_SRCS}})
-#      add_dependencies(${_target_NAME} ${_target_NAME}_automoc)
    endif(_moc_files)
 endmacro(AUTOMOC4)
 
+macro(ADD_AUTOMOC4_TARGET _target_NAME _SRCS)
+   set(_moc_files)
+   set(_moc_headers)
+
+   # first list all explicitly set headers
+   foreach(_header_to_moc ${ARGN} )
+      get_filename_component(_abs_header ${_header_to_moc} ABSOLUTE)
+      list(APPEND _moc_files ${_abs_header})
+      list(APPEND _moc_headers ${_abs_header})
+   endforeach(_header_to_moc)
+
+   # now add all the sources for the automoc
+   foreach (_current_FILE ${${_SRCS}})
+      get_filename_component(_abs_current_FILE "${_current_FILE}" ABSOLUTE)
+      get_source_file_property(_skip      "${_abs_current_FILE}" SKIP_AUTOMOC)
+      get_source_file_property(_generated "${_abs_current_FILE}" GENERATED)
+
+      if(NOT  _generated  AND NOT  _skip)
+         get_filename_component(_suffix "${_current_FILE}" EXT)
+         # skip every source file that's not C++
+         if(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
+             get_filename_component(_basename "${_current_FILE}" NAME_WE)
+             get_filename_component(_abs_path "${_abs_current_FILE}" PATH)
+             set(_header "${_abs_path}/${_basename}.h")
+             if(EXISTS "${_header}")
+                list(APPEND _moc_headers ${_header})
+             endif(EXISTS "${_header}")
+             set(_pheader "${_abs_path}/${_basename}_p.h")
+             if(EXISTS "${_pheader}")
+                list(APPEND _moc_headers ${_pheader})
+             endif(EXISTS "${_pheader}")
+             list(APPEND _moc_files ${_abs_current_FILE})
+         endif(_suffix STREQUAL ".cpp" OR _suffix STREQUAL ".cc" OR _suffix STREQUAL ".cxx" OR _suffix STREQUAL ".C")
+      endif(NOT  _generated  AND NOT  _skip)
+   endforeach (_current_FILE)
+
+   if(_moc_files)
+      set(_automoc_source "${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}.cpp")
+      set(_automoc_dotFiles "${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}.files")
+      get_directory_property(_moc_incs INCLUDE_DIRECTORIES)
+      get_directory_property(_moc_defs DEFINITIONS)
+
+      # configure_file replaces _moc_files, _moc_incs and _moc_defs
+      configure_file(${_AUTOMOC4_CURRENT_DIR}/automoc4.files.in ${_automoc_dotFiles})
+
+      add_custom_target(${_target_NAME}
+         ALL
+         COMMAND ${AUTOMOC4_EXECUTABLE}
+         ${_automoc_source}
+         ${CMAKE_CURRENT_SOURCE_DIR}
+         ${CMAKE_CURRENT_BINARY_DIR}
+         ${QT_MOC_EXECUTABLE}
+         ${CMAKE_COMMAND}
+         DEPENDS ${_automoc_dotFiles} ${_AUTOMOC4_EXECUTABLE_DEP} ${_moc_headers} ${${_SRCS}}
+         COMMENT ""
+         VERBATIM
+         )
+      set_source_files_properties(${_automoc_source} PROPERTIES GENERATED TRUE)
+      set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${_automoc_source})
+      set(${_SRCS} ${_automoc_source} ${${_SRCS}})
+   endif(_moc_files)
+endmacro(ADD_AUTOMOC4_TARGET)
Index: kdelibs/cmake/modules/KDE4Macros.cmake
===================================================================
--- kdelibs/cmake/modules/KDE4Macros.cmake	(revision 822433)
+++ kdelibs/cmake/modules/KDE4Macros.cmake	(working copy)
@@ -187,7 +187,7 @@
    # if automoc4 from kdesupport has been found, use the macro provided there,
    # otherwise fall back to the kdelibs one
    if (AUTOMOC4_EXECUTABLE)
-      AUTOMOC4(${_target_NAME} ${_SRCS})
+      message(FATAL_ERROR "KDE4_HANDLE_AUTOMOC should not get called with automoc4 installed")
    else (AUTOMOC4_EXECUTABLE)
       set(_moc_files)
       set(_moc_headers)
@@ -629,13 +629,20 @@
    endif (${_with_PREFIX} STREQUAL "WITH_PREFIX")
 
    set(_SRCS ${_first_SRC} ${ARGN})
-   kde4_handle_automoc(${_target_NAME} _SRCS)
+   if(AUTOMOC4_EXECUTABLE)
+      add_automoc4_target("${_target_NAME}_automoc" _SRCS)
+   else(AUTOMOC4_EXECUTABLE)
+      kde4_handle_automoc(${_target_NAME} _SRCS)
+   endif(AUTOMOC4_EXECUTABLE)
    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
       add_library(${_target_NAME} MODULE  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
    else (KDE4_ENABLE_FINAL)
       add_library(${_target_NAME} MODULE ${_SRCS})
    endif (KDE4_ENABLE_FINAL)
+   if(AUTOMOC4_EXECUTABLE)
+      add_dependencies(${_target_NAME} "${_target_NAME}_automoc")
+   endif(AUTOMOC4_EXECUTABLE)
 
    if (_first_SRC)
       set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
@@ -749,7 +756,11 @@
 
       target_link_libraries(${_target_NAME} ${QT_QTMAIN_LIBRARY} kdeinit_${_target_NAME})
    else(WIN32)
-      kde4_handle_automoc(kdeinit_${_target_NAME} _SRCS)
+      if(AUTOMOC4_EXECUTABLE)
+         add_automoc4_target("kdeinit_${_target_NAME}_automoc" _SRCS)
+      else(AUTOMOC4_EXECUTABLE)
+         kde4_handle_automoc(kdeinit_${_target_NAME} _SRCS)
+      endif(AUTOMOC4_EXECUTABLE)
 
       if (KDE4_ENABLE_FINAL)
          kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
@@ -758,6 +769,9 @@
       else (KDE4_ENABLE_FINAL)
          add_library(kdeinit_${_target_NAME} SHARED ${_SRCS})
       endif (KDE4_ENABLE_FINAL)
+      if(AUTOMOC4_EXECUTABLE)
+         add_dependencies(kdeinit_${_target_NAME} "kdeinit_${_target_NAME}_automoc")
+      endif(AUTOMOC4_EXECUTABLE)
 
       kde4_handle_rpath_for_library(kdeinit_${_target_NAME})
       set_target_properties(kdeinit_${_target_NAME} PROPERTIES OUTPUT_NAME kdeinit4_${_target_NAME})
@@ -872,13 +886,20 @@
       set(_add_executable_param ${_add_executable_param} EXCLUDE_FROM_ALL)
    endif (_test AND NOT KDE4_BUILD_TESTS)
 
-   kde4_handle_automoc(${_target_NAME} _SRCS)
+   if(AUTOMOC4_EXECUTABLE)
+      add_automoc4_target("${_target_NAME}_automoc" _SRCS)
+   else(AUTOMOC4_EXECUTABLE)
+      kde4_handle_automoc(${_target_NAME} _SRCS)
+   endif(AUTOMOC4_EXECUTABLE)
    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
       add_executable(${_target_NAME} ${_add_executable_param} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
    else (KDE4_ENABLE_FINAL)
       add_executable(${_target_NAME} ${_add_executable_param} ${_SRCS})
    endif (KDE4_ENABLE_FINAL)
+   if(AUTOMOC4_EXECUTABLE)
+      add_dependencies(${_target_NAME} "${_target_NAME}_automoc")
+   endif(AUTOMOC4_EXECUTABLE)
 
    if (_test)
       set_target_properties(${_target_NAME} PROPERTIES COMPILE_FLAGS -DKDESRCDIR="\\"${CMAKE_CURRENT_SOURCE_DIR}\\"")
@@ -913,13 +934,20 @@
    endif (${_lib_TYPE} STREQUAL "MODULE")
 
    set(_SRCS ${_first_SRC} ${ARGN})
-   kde4_handle_automoc(${_target_NAME} _SRCS)
+   if(AUTOMOC4_EXECUTABLE)
+      add_automoc4_target("${_target_NAME}_automoc" _SRCS)
+   else(AUTOMOC4_EXECUTABLE)
+      kde4_handle_automoc(${_target_NAME} _SRCS)
+   endif(AUTOMOC4_EXECUTABLE)
    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
       add_library(${_target_NAME} ${_add_lib_param}  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files})
    else (KDE4_ENABLE_FINAL)
       add_library(${_target_NAME} ${_add_lib_param} ${_SRCS})
    endif (KDE4_ENABLE_FINAL)
+   if(AUTOMOC4_EXECUTABLE)
+      add_dependencies(${_target_NAME} "${_target_NAME}_automoc")
+   endif(AUTOMOC4_EXECUTABLE)
 
    kde4_handle_rpath_for_library(${_target_NAME})
 

Attachment: signature.asc
Description: This is a digitally signed message part.

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

Reply via email to