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. -- ________________________________________________________ Matthias Kretz (Germany) <>< http://Vir.homelinux.org/ [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
Index: KDE4Macros.cmake
===================================================================
--- KDE4Macros.cmake (revision 671744)
+++ KDE4Macros.cmake (working copy)
@@ -173,11 +173,18 @@
file(READ ${_abs_FILE} _contents)
get_filename_component(_abs_PATH ${_abs_FILE} PATH)
- 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}")
- get_filename_component(_basename ${_current_MOC} NAME_WE)
+ 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)
+
set(_header ${_abs_PATH}/${_basename}.h)
set(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
@@ -632,13 +639,16 @@
endif (${_with_PREFIX} STREQUAL "WITH_PREFIX")
kde4_get_automoc_files(_automoc_FILES ${_first_SRC} ${ARGN})
+ set(_moc_target_NAME moc_${_target_NAME})
+ add_custom_target(${_moc_target_NAME} DEPENDS ${_automoc_FILES})
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)
+ add_dependencies(${_target_NAME} ${_moc_target_NAME})
if (_first_SRC)
set_target_properties(${_target_NAME} PROPERTIES PREFIX "")
@@ -718,14 +728,16 @@
# else (WIN32)
# under UNIX, create a shared library and a small executable, which links to this library
kde4_get_automoc_files(_automoc_FILES ${_SRCS})
+ set(_moc_target_NAME moc_${_target_NAME})
+ add_custom_target(${_moc_target_NAME} DEPENDS ${_automoc_FILES})
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)
+ add_dependencies(kdeinit_${_target_NAME} ${_moc_target_NAME})
kde4_handle_rpath_for_library(kdeinit_${_target_NAME})
set_target_properties(kdeinit_${_target_NAME} PROPERTIES OUTPUT_NAME kdeinit4_${_target_NAME})
@@ -759,9 +771,11 @@
endif (NOT KDE4_BUILD_TESTS)
kde4_get_automoc_files(_automoc_FILES ${ARGN})
+ set(_moc_target_NAME moc_${_target_NAME})
+ add_custom_target(${_moc_target_NAME} DEPENDS ${_automoc_FILES})
+ add_executable(${_target_NAME} ${_add_executable_param} ${ARGN})
+ add_dependencies(${_target_NAME} ${_moc_target_NAME})
- add_executable(${_target_NAME} ${_add_executable_param} ${ARGN} ${_automoc_FILES})
-
set_target_properties(${_target_NAME} PROPERTIES
EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}
DEFINITIONS -DKDESRCDIR=\\"${CMAKE_CURRENT_SOURCE_DIR}\\"
@@ -803,13 +817,16 @@
endif (_uninst)
kde4_get_automoc_files(_automoc_FILES ${_SRCS})
+ set(_moc_target_NAME moc_${_target_NAME})
+ add_custom_target(${_moc_target_NAME} DEPENDS ${_automoc_FILES})
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)
+ add_dependencies(${_target_NAME} ${_moc_target_NAME})
kde4_handle_rpath_for_executable(${_target_NAME} ${_type})
@@ -840,13 +857,16 @@
endif (${_lib_TYPE} STREQUAL "MODULE")
kde4_get_automoc_files(_automoc_FILES ${_first_SRC} ${ARGN})
+ set(_moc_target_NAME moc_${_target_NAME})
+ add_custom_target(${_moc_target_NAME} DEPENDS ${_automoc_FILES})
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)
+ add_dependencies(${_target_NAME} ${_moc_target_NAME})
kde4_handle_rpath_for_library(${_target_NAME})
pgpdDqYeSykFt.pgp
Description: PGP signature
_______________________________________________ Kde-buildsystem mailing list [email protected] https://mail.kde.org/mailman/listinfo/kde-buildsystem
