glob.cmake
Go to the documentation of this file.
00001 ############################################################################## 00002 # @file glob.cmake 00003 # @brief Glob source files and optionally compare to previous glob result. 00004 # 00005 # Copyright (c) 2012 University of Pennsylvania. All rights reserved. 00006 # See https://www.cbica.upenn.edu/sbia/software/license.html or COPYING file. 00007 # 00008 # Contact: SBIA Group <sbia-software at uphs.upenn.edu> 00009 ############################################################################## 00010 00011 include ("${CMAKE_CURRENT_LIST_DIR}/CommonTools.cmake") 00012 00013 if (NOT EXPRESSIONS) 00014 message (FATAL_ERROR "Missing EXPRESSIONS argument!") 00015 endif () 00016 if (NOT SOURCES_FILE) 00017 message (FATAL_ERROR "Missing SOURCES_FILE argument!") 00018 endif () 00019 00020 set (SOURCES) 00021 foreach (EXPRESSION IN LISTS EXPRESSIONS) 00022 if (EXPRESSION MATCHES "[*][*]") 00023 string (REPLACE "**" "*" EXPRESSION "${EXPRESSION}") 00024 file (GLOB_RECURSE _SOURCES "${EXPRESSION}") 00025 list (APPEND SOURCES ${_SOURCES}) 00026 elseif (EXPRESSION MATCHES "[*?]|\\[[0-9]+-[0-9]+\\]") 00027 file (GLOB _SOURCES "${EXPRESSION}") 00028 list (APPEND SOURCES ${_SOURCES}) 00029 else () 00030 list (APPEND SOURCES "${EXPRESSION}") 00031 endif () 00032 endforeach () 00033 if (SOURCES) 00034 list (REMOVE_DUPLICATES SOURCES) 00035 endif () 00036 00037 set (_SOURCES) 00038 foreach (SOURCE IN LISTS SOURCES) 00039 get_filename_component (SOURCE_NAME "${SOURCE}" NAME) 00040 if (NOT SOURCE MATCHES "(^|/).(svn|git)/" AND NOT SOURCE_NAME MATCHES "^\\.") 00041 list (APPEND _SOURCES "${SOURCE}") 00042 endif () 00043 endforeach () 00044 set (SOURCES ${_SOURCES}) 00045 unset (_SOURCES) 00046 00047 if (INIT) 00048 basis_write_list ("${SOURCES_FILE}" INITIAL_SOURCES ${SOURCES}) 00049 else () 00050 include ("${SOURCES_FILE}") 00051 if (NOT "${SOURCES}" STREQUAL "${INITIAL_SOURCES}") 00052 # touching this file which is included by basis_add_glob_target() 00053 # re-triggers CMake upon the next build 00054 execute_process (COMMAND "${CMAKE_COMMAND}" -E touch "${SOURCES_FILE}") 00055 message (FATAL_ERROR "${ERRORMSG}") 00056 endif () 00057 endif ()