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)