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})
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Kde-buildsystem mailing list [email protected] https://mail.kde.org/mailman/listinfo/kde-buildsystem
