| macro(join_strings OUT_STRING SEPARATOR LIST) |
| foreach(ITEM ${LIST}) |
| if("${${OUT_STRING}}" STREQUAL "") |
| set(${OUT_STRING} "${ITEM}") |
| else("${${OUT_STRING}}" STREQUAL "") |
| set(${OUT_STRING} "${${OUT_STRING}}${SEPARATOR}${ITEM}") |
| endif("${${OUT_STRING}}" STREQUAL "") |
| endforeach(ITEM ${LIST}) |
| endmacro(join_strings) |
| |
| macro(get_dir_name OUT_DIR IN_PATH) |
| if(${IN_PATH} MATCHES "^.+/[^/]*\$") |
| # If the argument for string(REGEX REPLACE does not match the |
| # search string, CMake sets the output to the input string |
| # This is not what we want, hence the if-block. |
| string(REGEX REPLACE "^(.+)/[^/]*\$" "\\1" ${OUT_DIR} "${IN_PATH}") |
| else(${IN_PATH} MATCHES "^.+/[^/]*\$") |
| set(${OUT_DIR} "") |
| endif(${IN_PATH} MATCHES "^.+/[^/]*\$") |
| endmacro(get_dir_name) |
| |
| #marco(map IN_LIST OUT_LIST IN_MAP_FUNCTION) |
| # set(${OUT_LIST} "") |
| # foreach() |
| #endmacro(map) |
| |
| # Given the length of the parameter list, we require named arguments. |
| # IN_COMMAND can contain "\${CURRENT_PATH}" and "\${OUTFILE}" |
| # IN_COMMENT can contain "\${CURRENT_FILE}" which will be substituted by the |
| # current file |
| macro(batch_add_command |
| ARG_NAME_1 IN_TARGET_PREFIX |
| ARG_NAME_2 IN_SOURCE_PREFIX |
| ARG_NAME_3 IN_TARGET_SUFFIX |
| ARG_NAME_4 IN_SOURCE_SUFFIX |
| ARG_NAME_5 IN_COMMAND |
| ARG_NAME_6 IN_COMMENT |
| ARG_NAME_7 OUT_TARGET_FILES |
| ARG_NAME_8) |
| |
| if( (NOT ("${ARG_NAME_1}" STREQUAL TARGET_PREFIX)) OR |
| (NOT ("${ARG_NAME_2}" STREQUAL SOURCE_PREFIX)) OR |
| (NOT ("${ARG_NAME_3}" STREQUAL TARGET_SUFFIX)) OR |
| (NOT ("${ARG_NAME_4}" STREQUAL SOURCE_SUFFIX)) OR |
| (NOT ("${ARG_NAME_5}" STREQUAL RUN)) OR |
| (NOT ("${ARG_NAME_6}" STREQUAL COMMENT)) OR |
| (NOT ("${ARG_NAME_7}" STREQUAL TARGET_FILE_LIST_REF)) OR |
| (NOT ("${ARG_NAME_8}" STREQUAL SOURCE_FILE_LIST)) ) |
| |
| message(FATAL_ERROR "Missing (or misspelled) arguments given to batch_add_command().") |
| endif() |
| set(IN_SOURCE_FILE_LIST ${ARGN}) |
| |
| foreach(CURRENT_FILE ${IN_SOURCE_FILE_LIST}) |
| get_filename_component(CURRENT_PATH "${IN_SOURCE_PREFIX}${CURRENT_FILE}" ABSOLUTE) |
| |
| set(OUTFILE "${IN_TARGET_PREFIX}${CURRENT_FILE}") |
| if(NOT ("${IN_SOURCE_SUFFIX}" STREQUAL "")) |
| string(REGEX REPLACE "${IN_SOURCE_SUFFIX}\$" "${IN_TARGET_SUFFIX}" |
| OUTFILE "${OUTFILE}") |
| endif(NOT ("${IN_SOURCE_SUFFIX}" STREQUAL "")) |
| get_dir_name(OUTDIR ${OUTFILE}) |
| |
| string(REPLACE "\${CURRENT_PATH}" "${CURRENT_FILE}" IN_COMMAND "${IN_COMMAND}") |
| string(REPLACE "\${OUTFILE}" "${OUTFILE}" IN_COMMAND "${IN_COMMAND}") |
| string(REPLACE "\${OUTDIR}" "${OUTDIR}" IN_COMMAND "${IN_COMMAND}") |
| string(REPLACE "\${CURRENT_FILE}" "${CURRENT_FILE}" IN_COMMENT "${IN_COMMENT}") |
| |
| add_custom_command(OUTPUT "${OUTFILE}" |
| ${IN_COMMAND} |
| DEPENDS "${CURRENT_PATH}" |
| COMMENT "${IN_COMMENT}") |
| |
| list(APPEND ${OUT_TARGET_FILES} |
| ${OUTFILE}) |
| endforeach(CURRENT_FILE) |
| endmacro(batch_add_command) |
| |
| macro(add_files OUT_TARGET_FILES IN_SOURCE_DIR IN_TARGET_DIR) |
| set(IN_SOURCE_FILE_LIST ${ARGN}) |
| |
| get_filename_component(SOURCE_DIR_ABS "${IN_SOURCE_DIR}" ABSOLUTE) |
| get_filename_component(TARGET_DIR_ABS "${IN_TARGET_DIR}" ABSOLUTE) |
| set(MADLIB_COPY_COMMAND |
| COMMAND "${CMAKE_COMMAND}" -E copy "\"\${CURRENT_PATH}\"" "\"\${OUTFILE}\"" |
| ) |
| batch_add_command( |
| TARGET_PREFIX "${TARGET_DIR_ABS}/" |
| SOURCE_PREFIX "${SOURCE_DIR_ABS}/" |
| TARGET_SUFFIX "" |
| SOURCE_SUFFIX "" |
| RUN "${MADLIB_COPY_COMMAND}" |
| COMMENT "Copying \${CURRENT_FILE}." |
| TARGET_FILE_LIST_REF ${OUT_TARGET_FILES} |
| SOURCE_FILE_LIST ${IN_SOURCE_FILE_LIST} |
| ) |
| endmacro(add_files) |