77 lines
3.4 KiB
CMake
77 lines
3.4 KiB
CMake
|
# FIND_AND_IMPORT_CMAKE_PROJECT can be used by projects to find other
|
||
|
# CMake projects.
|
||
|
#
|
||
|
# For example, the author of library FOO would include a file called
|
||
|
# FOOConfig.cmake in the project's distribution. Usually such a file
|
||
|
# would be configured and installed by FOO's CMake code into a
|
||
|
# directory such as PREFIX/lib/foo.
|
||
|
#
|
||
|
# The author of application BAR that uses FOO would include the
|
||
|
# following lines in BAR's CMake code:
|
||
|
#
|
||
|
# INCLUDE("${CMAKE_ROOT}/Modules/FindAndImportCMakeProject.cmake")
|
||
|
# FIND_AND_IMPORT_CMAKE_PROJECT(FOO_DIR FOOConfig.cmake lib/foo)
|
||
|
#
|
||
|
# When CMake is run to build BAR, FOO_DIR will be the only
|
||
|
# CMakeCache.txt entry that is needed for FOO. When FOO_DIR has been
|
||
|
# set correctly, FOOConfig.cmake will automatically be included to
|
||
|
# provide whatever settings are needed to use FOO.
|
||
|
#
|
||
|
|
||
|
MACRO(FIND_AND_IMPORT_CMAKE_PROJECT dir_var config_file rel_path)
|
||
|
IF(NOT ${dir_var})
|
||
|
# Get the system search path as a list.
|
||
|
IF(UNIX)
|
||
|
STRING(REGEX MATCHALL "[^:]+" ${dir_var}_SEARCH1 "$ENV{PATH}")
|
||
|
ELSE(UNIX)
|
||
|
STRING(REGEX REPLACE "\\\\" "/" ${dir_var}_SEARCH1 "$ENV{PATH}")
|
||
|
ENDIF(UNIX)
|
||
|
STRING(REGEX REPLACE "/;" ";" ${dir_var}_SEARCH2 "${${dir_var}_SEARCH1}")
|
||
|
|
||
|
# Construct a set of paths relative to the system search path.
|
||
|
SET(${dir_var}_SEARCH ${${dir_var}_SEARCH_PATH})
|
||
|
FOREACH(dir ${${dir_var}_SEARCH2})
|
||
|
SET(${dir_var}_SEARCH ${${dir_var}_SEARCH} "${dir}/../${rel_path}")
|
||
|
ENDFOREACH(dir)
|
||
|
|
||
|
# Look for the configuration file.
|
||
|
FIND_PATH(${dir_var} ${config_file}
|
||
|
# Search user paths and relative to system search path.
|
||
|
${${dir_var}_SEARCH}
|
||
|
|
||
|
# Look in standard UNIX install locations.
|
||
|
"/usr/local/${rel_path}"
|
||
|
"/usr/${rel_path}"
|
||
|
|
||
|
# Read from the CMakeSetup registry entries. It is likely that
|
||
|
# the project will have been recently built.
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9]"
|
||
|
"[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10]"
|
||
|
|
||
|
# Help the user find it if we cannot.
|
||
|
DOC "The directory containing ${config_file}."
|
||
|
)
|
||
|
ENDIF(NOT ${dir_var})
|
||
|
|
||
|
# If the configuration file was found, load it.
|
||
|
IF(${dir_var})
|
||
|
IF(EXISTS "${${dir_var}}/${config_file}")
|
||
|
# We found the configuration file. Load the settings from it.
|
||
|
INCLUDE("${${dir_var}}/${config_file}")
|
||
|
ELSE(EXISTS "${${dir_var}}/${config_file}")
|
||
|
IF(NOT ${dir_var}_NO_COMPLAIN)
|
||
|
MESSAGE(SEND_ERROR "${dir_var} has been set to a directory "
|
||
|
"that does not contain ${config_file}.")
|
||
|
ENDIF(NOT ${dir_var}_NO_COMPLAIN)
|
||
|
ENDIF(EXISTS "${${dir_var}}/${config_file}")
|
||
|
ENDIF(${dir_var})
|
||
|
ENDMACRO(FIND_AND_IMPORT_CMAKE_PROJECT)
|