BASIS  r3148
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 ()