# ============================================================================
# Copyright (c) 2011-2012 University of Pennsylvania
# Copyright (c) 2013-2014 Andreas Schuh
# All rights reserved.
#
# See COPYING file for license information or visit
# http://opensource.andreasschuh.com/cmake-basis/download.html#license
# ============================================================================
##############################################################################
# @file FindAFNI.cmake
# @brief Find programs of the AFNI package.
#
# @sa http://afni.nimh.nih.gov/afni/
#
# @par Input variables:
#
#
# @tp @b AFNI_DIR @endtp
# The AFNI package files are searched under the specified root
# directory. If they are not found there, the default search paths
# are considered. This variable can also be set as environment variable. |
#
#
# @tp @b AFNI_FIND_COMPONENTS @endtp
# List of components, i.e., AFNI programs, to look for.
# Specify using COMPONENTS argument of find_package() command. |
#
#
# @tp @b AFNI_FIND_OPTIONAL_COMPONENTS @endtp
# List of optional components, i.e., AFNI programs, to look for.
# Specify using OPTIONAL_COMPONENTS argument of find_package() command. |
#
#
#
# @par Output variables:
#
#
# @tp @b AFNI_FOUND @endtp
# Whether all required programs of the AFNI package were found. If only
# optional programs were searched, this variable is set to @c TRUE if
# all named programs were found. |
#
#
# @tp @b AFNI_<tool>_EXECUTABLE @endtp
# Absolute path of the corresponding found AFNI program, e.g., @c AFNI_3dcalc_EXECUTABLE. |
#
#
#
# @ingroup CMakeFindModules
##############################################################################
# ----------------------------------------------------------------------------
# initialize search
if (NOT AFNI_DIR)
set (AFNI_DIR "$ENV{AFNI_DIR}" CACHE PATH "Installation prefix of AFNI." FORCE)
endif ()
if (NOT AFNI_FIND_COMPONENTS AND NOT AFNI_FIND_OPTIONAL_COMPONENTS)
message (FATAL_ERROR "The FindAFNI.cmake module requires a list of AFNI programs to look for"
" specified using the COMPONENTS and/or OPTIONAL_COMPONENTS argument"
" of the find_package() command, e.g.:"
"\n"
"find_package(AFNI COMPONENTS 3dcalc)")
endif ()
# ----------------------------------------------------------------------------
# private helper macro to look for a particular required or optional AFNI program
macro (_AFNI_find_program NAME REQUIRED)
if (AFNI_DIR)
find_program (AFNI_${NAME}_EXECUTABLE NAMES ${NAME} HINTS ${AFNI_DIR} PATH_SUFFIXES bin NO_DEFAULT_PATH)
else ()
find_program (AFNI_${NAME}_EXECUTABLE NAMES ${NAME})
endif ()
if (NOT AFNI_${NAME}_EXECUTABLE)
if (AFNI_FIND_COMPONENTS)
# looking either only for required components or for both optional and
# and required components; in this case, let AFNI_FOUND reflect only
# whether all required components were found, but ignore the optional ones;
# the caller can still check AFNI__EXECUTABLE explicitly for these
# optional components to see whether or not a particular AFNI programs was found
if (REQUIRED)
set (AFNI_FOUND FALSE)
endif ()
else ()
# looking only for optional components anyway, so let AFNI_FOUND reflect
# if all of these optional components were found instead
set (AFNI_FOUND FALSE)
endif ()
if (REQUIRED)
list (APPEND _AFNI_MISSING_COMPONENTS ${NAME})
else ()
list (APPEND _AFNI_MISSING_OPTIONAL_COMPONENTS ${NAME})
endif ()
endif ()
mark_as_advanced (AFNI_${NAME}_EXECUTABLE)
endmacro ()
# ----------------------------------------------------------------------------
# find AFNI program(s)
set (AFNI_FOUND TRUE)
set (_AFNI_MISSING_COMPONENTS)
foreach (_AFNI_TOOL IN LISTS AFNI_FIND_COMPONENTS)
_AFNI_find_program (${_AFNI_TOOL} TRUE)
endforeach ()
set (_AFNI_MISSING_OPTIONAL_COMPONENTS)
foreach (_AFNI_TOOL IN LISTS AFNI_FIND_OPTIONAL_COMPONENTS)
_AFNI_find_program (${_AFNI_TOOL} FALSE)
endforeach ()
# ----------------------------------------------------------------------------
# handle the QUIETLY and REQUIRED arguments
set (_AFNI_HELP_MESSAGE "Please set AFNI_DIR to the directory containing these executables or specify the location of each not found executable using the advanced AFNI__EXECUTABLE CMake variables.")
if (_AFNI_MISSING_COMPONENTS)
message (FATAL_ERROR "Could NOT find the following required AFNI program(s):\n${_AFNI_MISSING_COMPONENTS}\n${_AFNI_HELP_MESSAGE}")
elseif (_AFNI_MISSING_OPTIONAL_COMPONENTS AND NOT AFNI_FIND_QUIETLY)
message (WARNING "Could NOT find the following optional AFNI program(s):\n${_AFNI_MISSING_OPTIONAL_COMPONENTS}\n${_AFNI_HELP_MESSAGE}")
endif ()
# ----------------------------------------------------------------------------
# set AFNI_DIR
if (NOT AFNI_DIR)
foreach (_AFNI_TOOL IN LISTS AFNI_FIND_COMPONENTS AFNI_FIND_OPTIONAL_COMPONENTS)
if (AFNI_${_AFNI_TOOL}_EXECUTABLE)
get_filename_component (AFNI_DIR "${AFNI_${_AFNI_TOOL}_EXECUTABLE}" PATH)
string (REGEX REPLACE "/bin/?" "" AFNI_DIR "${AFNI_DIR}")
set (AFNI_DIR "${AFNI_DIR}" CACHE PATH "Installation prefix of AFNI." FORCE)
break ()
endif ()
endforeach ()
endif ()
unset (_AFNI_TOOL)
unset (_AFNI_HELP_MESSAGE)
unset (_AFNI_MISSING_COMPONENTS)
unset (_AFNI_MISSING_OPTIONAL_COMPONENTS)