diff --git a/cmake/modules/DuneSymlinkOrCopy.cmake b/cmake/modules/DuneSymlinkOrCopy.cmake index 5d14ed55fb63cc2faab3e238c824734e04353e4a..86a038c372f84c7c411e932b64b778307020c467 100644 --- a/cmake/modules/DuneSymlinkOrCopy.cmake +++ b/cmake/modules/DuneSymlinkOrCopy.cmake @@ -27,16 +27,16 @@ # in the source tree. This file will be copied # to the build tree. # -# dune_symlink_to_source_tree() +# dune_symlink_to_source_tree([NAME name]) # -# add a symlink called src_dir to all directories in the build tree. +# add a symlink called NAME to all directories in the build tree (defaults to src_dir). # That symlink points to the corresponding directory in the source tree. # Call the macro from the toplevel CMakeLists.txt file of your project. # You can also call it from some other directory, creating only symlinks # in that directory and all directories below. A warning is issued on # Windows systems. # -# dune_symlink_to_source_files(files) +# dune_symlink_to_source_files(FILES files) # # add symlinks to the build tree, which point to files in the source tree. # Foreach file given in "files", a symlink of that name is created in the @@ -63,7 +63,14 @@ macro(dune_add_copy_dependency target file_name) add_dependencies(${target} "${target}_copy_${file_name}") endmacro(dune_add_copy_dependency) -macro(dune_symlink_to_source_tree) +function(dune_symlink_to_source_tree) + # parse arguments + include(CMakeParseArguments) + cmake_parse_arguments(ARG "" "NAME" "" ${ARGN}) + if(NOT ARG_NAME) + set(ARG_NAME "src_dir") + endif() + # check for Windows to issue a warning if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") if(NOT DEFINED DUNE_WINDOWS_SYMLINK_WARNING) @@ -78,15 +85,22 @@ macro(dune_symlink_to_source_tree) foreach(f ${files}) get_filename_component(dir ${f} DIRECTORY) if(NOT "${CMAKE_SOURCE_DIR}/${dir}" MATCHES "${CMAKE_BINARY_DIR}/*") - execute_process(COMMAND ${CMAKE_COMMAND} "-E" "create_symlink" "${CMAKE_SOURCE_DIR}/${dir}" "${CMAKE_BINARY_DIR}/${dir}/src_dir") + execute_process(COMMAND ${CMAKE_COMMAND} "-E" "create_symlink" "${CMAKE_SOURCE_DIR}/${dir}" "${CMAKE_BINARY_DIR}/${dir}/${ARG_NAME}") endif(NOT "${CMAKE_SOURCE_DIR}/${dir}" MATCHES "${CMAKE_BINARY_DIR}/*") endforeach() endif() -endmacro(dune_symlink_to_source_tree) +endfunction(dune_symlink_to_source_tree) + +function(dune_symlink_to_source_files) + # parse arguments + include(CMakeParseArguments) + cmake_parse_arguments(ARG "" "" "FILES" ${ARGN}) + if(ARG_UNPARSED_ARGUMENTS) + message(WARNING "You are using dune_symlink_to_source_files without named arguments (or have typos in your named arguments)!") + endif() -macro(dune_symlink_to_source_files files) # create symlinks for all given files - foreach(f ${files}) + foreach(f ${ARG_FILES}) # check for Windows to issue a warning if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") if(NOT DEFINED DUNE_WINDOWS_SYMLINK_WARNING) @@ -99,4 +113,4 @@ macro(dune_symlink_to_source_files files) execute_process(COMMAND ${CMAKE_COMMAND} "-E" "create_symlink" "${CMAKE_CURRENT_SOURCE_DIR}/${f}" "${CMAKE_CURRENT_BINARY_DIR}/${f}") endif() endforeach() -endmacro(dune_symlink_to_source_files files) +endfunction(dune_symlink_to_source_files)