All pastes #590166 Raw Edit

Someone

public text v1 · immutable
#590166 ·published 2007-06-26 12:05 UTC
rendered paste body
Index: KDE4Macros.cmake
===================================================================
--- KDE4Macros.cmake    (revision 680441)
+++ KDE4Macros.cmake    (working copy)
@@ -145,77 +145,122 @@
    endforeach (_current_FILE)
 endmacro (KDE4_ADD_UI3_FILES)

+# keep it here until it is removed everywhere
+macro(KDE4_AUTOMOC)
+endmacro(KDE4_AUTOMOC)

-macro (KDE4_AUTOMOC)
-   qt4_get_moc_inc_dirs(_moc_INCS)

-   # iterate over all  files
+macro(KDE4_HANDLE_AUTOMOC _target_NAME )
+
+  set(_automoc_file_CONTENTS
+"# this file is autogenerated, do not edit
+set(MOC_FILES
+")
    foreach (_current_FILE ${ARGN})
+      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)

-      get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
-      # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
-      # here. this is required to make bouic work correctly:
-      # we need to add generated .cpp files to the sources (to compile them),
-      # but we cannot let automoc handle them, as the .cpp files don't exist yet when
-      # cmake is run for the very first time on them -> however the .cpp files might
-      # exist at a later run. at that time we need to skip them, so that we don't add two
-      # different rules for the same moc file
-      get_source_file_property(_skip ${_abs_FILE} SKIP_AUTOMOC)
+      if(NOT _generated AND NOT _skip)
+         get_filename_component(_suffix "${_current_FILE}" EXT)
+         if( ".cpp" STREQUAL "${_suffix}" OR ".cc" STREQUAL "${_suffix}" OR ".cxx" STREQUAL "${_suffix}" OR ".C" STREQUAL "${_suffix}")
+            get_filename_component(_basename "${_current_FILE}" NAME)
+            macro_additional_clean_files("${CMAKE_CURRENT_BINARY_DIR}/${_basename}_automoc.mark")
+            set(_automoc_file_CONTENTS  "${_automoc_file_CONTENTS} ${_abs_current_FILE}\n")
+         else( ".cpp" STREQUAL "${_suffix}" OR ".cc" STREQUAL "${_suffix}" OR ".cxx" STREQUAL "${_suffix}" OR ".C" STREQUAL "${_suffix}")
+         endif( ".cpp" STREQUAL "${_suffix}" OR ".cc" STREQUAL "${_suffix}" OR ".cxx" STREQUAL "${_suffix}" OR ".C" STREQUAL "${_suffix}")
+      endif(NOT _generated AND NOT _skip)

-      # if the file exists and should not be skipped read it completely into memory
-      # and grep for all include <foo.moc> lines
-      # for each found moc file generate a custom_target and collect
-      # the generated moc files in a list which will be set as a source files property
-      # and later be queried in kde4_add_library/executable/plugin()
-      if (EXISTS ${_abs_FILE} AND NOT _skip)
-         set(_moc_FILES_PROPERTY)
+   endforeach (_current_FILE)

-         file(READ ${_abs_FILE} _contents)
-         get_filename_component(_abs_PATH ${_abs_FILE} PATH)
+   qt4_get_moc_inc_dirs(_moc_INCS)
+   set(_automoc_file_CONTENTS  "${_automoc_file_CONTENTS} )
+set(QT_MOC_EXECUTABLE ${QT_MOC_EXECUTABLE})
+set(QT_MOC_INCS ${_moc_INCS})
+")

-         string(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}")
-         if (_match)
-            foreach (_current_MOC_INC ${_match})
-               string(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
-               get_filename_component(_basename ${_current_MOC} NAME_WE)
-               set(_header ${_abs_PATH}/${_basename}.h)
-               set(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
+   file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_automoc.files" "${_automoc_file_CONTENTS}")

-               if (NOT EXISTS ${_abs_PATH}/${_basename}.h)
-                  message(FATAL_ERROR "In the file \"${_abs_FILE}\" the moc file \"${_current_MOC}\" is included, but \"${_abs_PATH}/${_basename}.h\" doesn't exist.")
-               endif (NOT EXISTS ${_abs_PATH}/${_basename}.h)
+   add_custom_target(${_target_NAME}_automoc
+                    COMMAND ${CMAKE_COMMAND}
+                      -DKDE4_AUTOMOC_FILE=${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_automoc.files
+                      -DKDE4_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
+                      -P ${KDE4_MODULE_DIR}/kde4automoc.cmake
+                    )
+   add_dependencies(${_target_NAME} ${_target_NAME}_automoc)
+endmacro(KDE4_HANDLE_AUTOMOC)

-               add_custom_command(OUTPUT ${_moc}
-                  COMMAND ${QT_MOC_EXECUTABLE}
-                  ARGS ${_moc_INCS} ${_header} -o ${_moc}
-                  MAIN_DEPENDENCY ${_header}
-               )

-               list(APPEND _moc_FILES_PROPERTY ${_moc})
+# macro (KDE4_AUTOMOC)
+#    qt4_get_moc_inc_dirs(_moc_INCS)
+#
+#    # iterate over all  files
+#    foreach (_current_FILE ${ARGN})
+#
+#       get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
+#       # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
+#       # here. this is required to make bouic work correctly:
+#       # we need to add generated .cpp files to the sources (to compile them),
+#       # but we cannot let automoc handle them, as the .cpp files don't exist yet when
+#       # cmake is run for the very first time on them -> however the .cpp files might
+#       # exist at a later run. at that time we need to skip them, so that we don't add two
+#       # different rules for the same moc file
+#       get_source_file_property(_skip ${_abs_FILE} SKIP_AUTOMOC)
+#
+#       # if the file exists and should not be skipped read it completely into memory
+#       # and grep for all include <foo.moc> lines
+#       # for each found moc file generate a custom_target and collect
+#       # the generated moc files in a list which will be set as a source files property
+#       # and later be queried in kde4_add_library/executable/plugin()
+#       if (EXISTS ${_abs_FILE} AND NOT _skip)
+#          set(_moc_FILES_PROPERTY)
+#
+#          file(READ ${_abs_FILE} _contents)
+#          get_filename_component(_abs_PATH ${_abs_FILE} PATH)
+#
+#          string(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}")
+#          if (_match)
+#             foreach (_current_MOC_INC ${_match})
+#                string(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
+#                get_filename_component(_basename ${_current_MOC} NAME_WE)
+#                set(_header ${_abs_PATH}/${_basename}.h)
+#                set(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
+#
+#                if (NOT EXISTS ${_abs_PATH}/${_basename}.h)
+#                   message(FATAL_ERROR "In the file \"${_abs_FILE}\" the moc file \"${_current_MOC}\" is included, but \"${_abs_PATH}/${_basename}.h\" doesn't exist.")
+#                endif (NOT EXISTS ${_abs_PATH}/${_basename}.h)
+#
+#                add_custom_command(OUTPUT ${_moc}
+#                   COMMAND ${QT_MOC_EXECUTABLE}
+#                   ARGS ${_moc_INCS} ${_header} -o ${_moc}
+#                   MAIN_DEPENDENCY ${_header}
+#                )
+#
+#                list(APPEND _moc_FILES_PROPERTY ${_moc})
+#
+#             endforeach (_current_MOC_INC)
+#          endif (_match)
+#
+#          set_source_files_properties(${_abs_FILE} PROPERTIES AUTOMOC_FILES "${_moc_FILES_PROPERTY}")
+#       endif (EXISTS ${_abs_FILE} AND NOT _skip)
+#    endforeach (_current_FILE)
+# endmacro (KDE4_AUTOMOC)
+#
+#
+# macro(KDE4_GET_AUTOMOC_FILES _list)
+#    set(${_list})
+#    foreach (_current_FILE ${ARGN})
+#       set(_automoc_FILES_PROPERTY)
+#       get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
+#       get_source_file_property(_automoc_FILES_PROPERTY ${_abs_FILE} AUTOMOC_FILES)
+#       if (_automoc_FILES_PROPERTY)
+#          foreach (_current_MOC_FILE ${_automoc_FILES_PROPERTY})
+#             list(APPEND ${_list} ${_current_MOC_FILE})
+#          endforeach (_current_MOC_FILE)
+#       endif (_automoc_FILES_PROPERTY)
+#    endforeach (_current_FILE)
+# endmacro(KDE4_GET_AUTOMOC_FILES)

-            endforeach (_current_MOC_INC)
-         endif (_match)
-
-         set_source_files_properties(${_abs_FILE} PROPERTIES AUTOMOC_FILES "${_moc_FILES_PROPERTY}")
-      endif (EXISTS ${_abs_FILE} AND NOT _skip)
-   endforeach (_current_FILE)
-endmacro (KDE4_AUTOMOC)
-
-
-macro(KDE4_GET_AUTOMOC_FILES _list)
-   set(${_list})
-   foreach (_current_FILE ${ARGN})
-      set(_automoc_FILES_PROPERTY)
-      get_filename_component(_abs_FILE ${_current_FILE} ABSOLUTE)
-      get_source_file_property(_automoc_FILES_PROPERTY ${_abs_FILE} AUTOMOC_FILES)
-      if (_automoc_FILES_PROPERTY)
-         foreach (_current_MOC_FILE ${_automoc_FILES_PROPERTY})
-            list(APPEND ${_list} ${_current_MOC_FILE})
-         endforeach (_current_MOC_FILE)
-      endif (_automoc_FILES_PROPERTY)
-   endforeach (_current_FILE)
-endmacro(KDE4_GET_AUTOMOC_FILES)
-
 macro(KDE4_CREATE_PO_FILES)
    set(_list_gmo)
    file(GLOB _po_files *.po)
@@ -631,19 +676,18 @@
       set(_first_SRC ${_with_PREFIX})
    endif (${_with_PREFIX} STREQUAL "WITH_PREFIX")

-   kde4_get_automoc_files(_automoc_FILES ${_first_SRC} ${ARGN})
-
    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_first_SRC} ${ARGN})
-      add_library(${_target_NAME} MODULE  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files} ${_automoc_FILES})
+      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 ${_first_SRC} ${ARGN} ${_automoc_FILES})
+      add_library(${_target_NAME} MODULE ${_first_SRC} ${ARGN})
    endif (KDE4_ENABLE_FINAL)

    if (_first_SRC)
       set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
    endif (_first_SRC)

+   kde4_handle_automoc(${_target_NAME} ${_first_SRC} ${ARGN})
    kde4_handle_rpath_for_library(${_target_NAME})

    if (WIN32)
@@ -718,16 +762,16 @@
 #      KDE4_ADD_EXECUTABLE(${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ${ARGN} )
 #   else (WIN32)
       # under UNIX, create a shared library and a small executable, which links to this library
-   kde4_get_automoc_files(_automoc_FILES ${_SRCS})

    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp _separate_files ${_SRCS})
-      add_library(kdeinit_${_target_NAME} SHARED  ${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp ${_separate_files} ${_automoc_FILES})
+      add_library(kdeinit_${_target_NAME} SHARED  ${CMAKE_CURRENT_BINARY_DIR}/kdeinit_${_target_NAME}_final_cpp.cpp ${_separate_files})

    else (KDE4_ENABLE_FINAL)
-      add_library(kdeinit_${_target_NAME} SHARED ${_SRCS} ${_automoc_FILES})
+      add_library(kdeinit_${_target_NAME} SHARED ${_SRCS})
    endif (KDE4_ENABLE_FINAL)

+   kde4_handle_automoc(kdeinit_${_target_NAME} ${_SRCS})
    kde4_handle_rpath_for_library(kdeinit_${_target_NAME})
    set_target_properties(kdeinit_${_target_NAME} PROPERTIES OUTPUT_NAME kdeinit4_${_target_NAME})

@@ -778,15 +822,15 @@

    set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )

-   kde4_get_automoc_files(_automoc_FILES ${ARGN})
+   add_executable(${_target_NAME} ${_add_executable_param} ${ARGN})

-   add_executable(${_target_NAME} ${_add_executable_param} ${ARGN} ${_automoc_FILES})
-
    set_target_properties(${_target_NAME} PROPERTIES
                          COMPILE_FLAGS -DKDESRCDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\"
                          SKIP_BUILD_RPATH FALSE
                          BUILD_WITH_INSTALL_RPATH FALSE)

+   kde4_handle_automoc(${_target_NAME} ${ARGN})
+
    if (WIN32)
       target_link_libraries(${_target_NAME} ${QT_QTMAIN_LIBRARY})
    endif (WIN32)
@@ -821,15 +865,14 @@
       set(_type "RUN_UNINSTALLED")
    endif (_uninst)

-   kde4_get_automoc_files(_automoc_FILES ${_SRCS})
-
    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} ${_automoc_FILES})
+      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} ${_automoc_FILES})
+      add_executable(${_target_NAME} ${_add_executable_param} ${_SRCS})
    endif (KDE4_ENABLE_FINAL)

+   kde4_handle_automoc(${_target_NAME} ${_SRCS})
    kde4_handle_rpath_for_executable(${_target_NAME} ${_type})

    if (WIN32)
@@ -858,15 +901,14 @@
       set(_add_lib_param MODULE)
    endif (${_lib_TYPE} STREQUAL "MODULE")

-   kde4_get_automoc_files(_automoc_FILES ${_first_SRC} ${ARGN})
-
    if (KDE4_ENABLE_FINAL)
       kde4_create_final_files(${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp _separate_files ${_first_SRC} ${ARGN})
-      add_library(${_target_NAME} ${_add_lib_param}  ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_final_cpp.cpp ${_separate_files} ${_automoc_FILES})
+      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} ${_first_SRC} ${ARGN} ${_automoc_FILES})
+      add_library(${_target_NAME} ${_add_lib_param} ${_first_SRC} ${ARGN})
    endif (KDE4_ENABLE_FINAL)

+   kde4_handle_automoc(${_target_NAME} ${_first_SRC} ${ARGN})
    kde4_handle_rpath_for_library(${_target_NAME})

    if (WIN32)