summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/FindAndImportCMakeProject.cmake76
1 files changed, 76 insertions, 0 deletions
diff --git a/Modules/FindAndImportCMakeProject.cmake b/Modules/FindAndImportCMakeProject.cmake
new file mode 100644
index 0000000..ac540b0
--- /dev/null
+++ b/Modules/FindAndImportCMakeProject.cmake
@@ -0,0 +1,76 @@
+# 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)