diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index d88cff2fc66..4351c897f7c 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -1155,3 +1155,49 @@ function(qtc_glob_resources) string(APPEND qrcData "") file(WRITE "${_arg_QRC_FILE}" "${qrcData}") endfunction() + +function(qtc_copy_to_builddir custom_target_name) + cmake_parse_arguments(_arg "CREATE_SUBDIRS" "DESTINATION" "FILES;DIRECTORIES" ${ARGN}) + set(timestampFiles) + + qtc_output_binary_dir(_output_binary_dir) + + foreach(srcFile ${_arg_FILES}) + string(MAKE_C_IDENTIFIER "${srcFile}" destinationTimestampFilePart) + set(destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp") + list(APPEND timestampFiles "${destinationTimestampFileName}") + + add_custom_command(OUTPUT "${destinationTimestampFileName}" + COMMAND "${CMAKE_COMMAND}" -E make_directory "${_output_binary_dir}/${_arg_DESTINATION}" + COMMAND "${CMAKE_COMMAND}" -E copy "${srcFile}" "${_output_binary_dir}/${_arg_DESTINATION}" + COMMAND "${CMAKE_COMMAND}" -E touch "${destinationTimestampFileName}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Copy ${srcFile} into build directory" + DEPENDS "${srcFile}" + VERBATIM + ) + endforeach() + + foreach(srcDirectory ${_arg_DIRECTORIES}) + string(MAKE_C_IDENTIFIER "${srcDirectory}" destinationTimestampFilePart) + set(destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp") + list(APPEND timestampFiles "${destinationTimestampFileName}") + set(destinationDirectory "${_output_binary_dir}/${_arg_DESTINATION}") + + if(_arg_CREATE_SUBDIRS) + set(destinationDirectory "${destinationDirectory}/${srcDirectory}") + endif() + + file(GLOB_RECURSE filesToCopy "${srcDirectory}/*") + add_custom_command(OUTPUT "${destinationTimestampFileName}" + COMMAND "${CMAKE_COMMAND}" -E copy_directory "${srcDirectory}" "${destinationDirectory}" + COMMAND "${CMAKE_COMMAND}" -E touch "${destinationTimestampFileName}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Copy ${srcDirectory}/ into build directory" + DEPENDS ${filesToCopy} + VERBATIM + ) + endforeach() + + add_custom_target("${custom_target_name}" ALL DEPENDS ${timestampFiles}) +endfunction() diff --git a/share/qtcreator/CMakeLists.txt b/share/qtcreator/CMakeLists.txt index 303fb9c7d0b..622761f4d8a 100644 --- a/share/qtcreator/CMakeLists.txt +++ b/share/qtcreator/CMakeLists.txt @@ -20,21 +20,12 @@ if (APPLE) set(resource_directories ${resource_directories} scripts) endif() -add_custom_target(copy_share_to_builddir ALL - COMMENT Copy files into build directory - VERBATIM -) - # copy resource directories during build -foreach(dir IN ITEMS ${resource_directories}) - add_custom_command(TARGET copy_share_to_builddir POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}" - "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT Copy resource directories into build directory - VERBATIM - ) -endforeach() +qtc_copy_to_builddir(copy_share_to_builddir + DIRECTORIES ${resource_directories} + DESTINATION "${IDE_DATA_PATH}" + CREATE_SUBDIRS +) # create install rule for resource directories install(DIRECTORY ${resource_directories} DESTINATION "${IDE_DATA_PATH}") diff --git a/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt b/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt index 1304c1a004c..ca0a0391060 100644 --- a/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt +++ b/src/libs/3rdparty/syntax-highlighting/CMakeLists.txt @@ -37,11 +37,8 @@ install( DESTINATION "${IDE_DATA_PATH}/generic-highlighter/" ) -add_custom_target(copy_generic_highligher_to_builddir ALL VERBATIM) -add_custom_command(TARGET copy_generic_highligher_to_builddir POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_directory data/syntax - "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/generic-highlighter/syntax" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT Copy files into build directory - VERBATIM +# copy resource directories during build +qtc_copy_to_builddir(copy_generic_highligher_to_builddir + DIRECTORIES data/syntax + DESTINATION "${IDE_DATA_PATH}/generic-highlighter/syntax" ) diff --git a/src/libs/clangsupport/CMakeLists.txt b/src/libs/clangsupport/CMakeLists.txt index 20af2c1b9d2..d1f38507cb9 100644 --- a/src/libs/clangsupport/CMakeLists.txt +++ b/src/libs/clangsupport/CMakeLists.txt @@ -147,32 +147,18 @@ if (NOT TARGET libclang) return() endif() -add_custom_target(copy_clang_to_builddir ALL - COMMENT Copy Clang files into build directory -) - # For the developer build directory -add_custom_command(TARGET copy_clang_to_builddir POST_BUILD - COMMAND "${CMAKE_COMMAND}" - -E copy_directory - "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include" - "${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include" - VERBATIM +qtc_copy_to_builddir(copy_clang_to_builddir + DIRECTORIES "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include" + DESTINATION "${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include" ) foreach(executable clang clang-cl clangd clang-tidy clazy-standalone) if (EXISTS "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}") - add_custom_command(TARGET copy_clang_to_builddir PRE_BUILD - COMMAND "${CMAKE_COMMAND}" - -E make_directory - "${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/" - COMMAND "${CMAKE_COMMAND}" - -E copy - "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}" - "${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/" - VERBATIM + qtc_copy_to_builddir(copy_clang_${executable}_to_builddir + FILES "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}" + DESTINATION "${IDE_LIBEXEC_PATH}/clang/bin/" ) - # For the install directory install(PROGRAMS "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}" diff --git a/src/share/3rdparty/CMakeLists.txt b/src/share/3rdparty/CMakeLists.txt index ede2157426e..2168701e06f 100644 --- a/src/share/3rdparty/CMakeLists.txt +++ b/src/share/3rdparty/CMakeLists.txt @@ -3,11 +3,7 @@ install( DESTINATION "${IDE_DATA_PATH}" ) -add_custom_target(copy_fonts_to_builddir ALL VERBATIM) -add_custom_command(TARGET copy_fonts_to_builddir POST_BUILD - COMMAND "${CMAKE_COMMAND}" -E copy_directory fonts - "${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/fonts" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT Copy files into build directory - VERBATIM +qtc_copy_to_builddir(copy_fonts_to_builddir + DIRECTORIES fonts + DESTINATION "${IDE_DATA_PATH}/fonts" )