--- /dev/null
+#-----------------------------------------------------------------------------
+# Macro CREATE_FIND_PACKAGE
+# Creates and install the cmake files which allow
+# to find a library by the cmake command FIND_PACKAGE.
+#
+# Inputs :
+# --------
+# LIBRARY_NAME : name of the library to find
+#
+# The following variables **MUST** have been set previously :
+#
+# * ${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS
+# The list of include paths
+# when someone uses a *BUILD TREE* version of ${LIBRARY_NAME}.
+# NB :
+# THE PATHS *MUST BE RELATIVE* TO THE ROOT DIR OF THE PROJECT **SOURCES** !
+# Assume your project architecture is :
+# install/ : directory in which CREATE_FIND_PACKAGE is invoked
+# src/part1/include/ : first include dir
+# src/part2/include/ : second include dir
+# Then you should set the var with :
+# SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS
+# src/part1/include
+# src/part2/include )
+# Which will result in actual include paths :
+# ${PROJECT_SOURCE_DIR}/src/part1/include;
+# ${PROJECT_SOURCE_DIR}/src/part2/include
+# * ${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS
+# Like the previous var but for the library paths.
+# NB :
+# THE PATHS *MUST BE RELATIVE* TO THE ROOT DIR OF THE **BUILD TREE**
+# THAT IS POINT TO THE FOLDERS WHERE THE LIBS WILL BE BUILD
+# Assume that your project architecture is :
+# src/part1/src/ : first source dir, in which the lib 'part1' is built
+# src/part2/src/ : first source dir, in which the lib 'part2' is built
+# Then you should set the var with
+# SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS
+# src/part1/src
+# src/part2/src
+# )
+# Which will result in actual library paths :
+# ${PROJECT_BINARY_DIR}/src/part1/src
+# ${PROJECT_BINARY_DIR}/src/part2/src
+# * ${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS
+# The list of include paths
+# when someone uses an *INSTALLED* version of ${LIBRARY_NAME}
+# The paths *MUST BE RELATIVE* to INSTALL_PREFIX
+# # A typical example is "include/${LIBRARY_NAME}"
+# * ${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS
+# Like the previous var but for library paths.
+# A typical example is ".."
+# * ${LIBRARY_NAME}_LIBRARIES
+# The list of libraries to link against when using ${LIBRARY_NAME}
+#
+# The following variables can be set optionally :
+#
+# * ${LIBRARY_NAME}_REQUIRED_C_FLAGS
+# * ${LIBRARY_NAME}_REQUIRED_CXX_FLAGS
+# * ${LIBRARY_NAME}_REQUIRED_LINK_FLAGS
+# * ${LIBRARY_NAME}_MAJOR_VERSION
+# * ${LIBRARY_NAME}_MINOR_VERSION
+# * ${LIBRARY_NAME}_BUILD_VERSION
+# * ${LIBRARY_NAME}_INSTALL_FOLDER : if set then install the stuff
+# in INSTALL_PREFIX/lib/${LIBRARY_NAME}_INSTALL_FOLDER
+# instead of INSTALL_PREFIX/lib/${LIBRARY_NAME}
+#
+#
+# To provide a user defined
+# couple of Config/Use file (in addition to the standard one) use :
+# SET( ${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE TRUE )
+# and store the *ABSOLUTE* paths to the additional files in the vars :
+# ${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE
+# ${LIBRARY_NAME}_ADDITIONAL_USE_FILE
+# (e.g. ${CMAKE_CURRENT_SOURCE_DIR}/MyConfig.cmake)
+#
+# Outputs :
+# --------
+# At cmake run-time, the macro creates the following files
+# in the current dir of the build tree (where the macro is invoked) :
+# Use${LIBRARY_NAME}.cmake
+# ${LIBRARY_NAME}Config.cmake
+# ${LIBRARY_NAME}BuildSettings.cmake
+# And if the vars ${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE and
+# ${LIBRARY_NAME}_ADDITIONAL_USE_FILE are set, it also creates :
+# Additional${LIBRARY_NAME}Config.cmake
+# AdditionalUse${LIBRARY_NAME}.cmake
+#
+# At install-time, the same files are installed
+# in INSTALL_PREFIX/lib/${LIBRARY_NAME}
+# and the file :
+# Find${LIBRARY_NAME}.cmake
+# is installed in ${CMAKE_ROOT}/Modules/
+#
+#
+#-----------------------------------------------------------------------------
+
+MACRO(CMAKE_CREATE_FIND_PACKAGE LIBRARY_NAME)
+
+ #---------------------------------------------------------------------------
+ # Sets the common values to build tree and install tree configs
+ SET(CFP_LIB_REQUIRED_C_FLAGS ${${LIBRARY_NAME}_REQUIRED_C_FLAGS})
+ SET(CFP_LIB_REQUIRED_CXX_FLAGS ${${LIBRARY_NAME}_REQUIRED_CXX_FLAGS})
+ SET(CFP_LIB_REQUIRED_LINK_FLAGS ${${LIBRARY_NAME}_REQUIRED_LINK_FLAGS})
+ SET(CFP_LIB_MAJOR_VERSION ${${LIBRARY_NAME}_MAJOR_VERSION})
+ SET(CFP_LIB_MINOR_VERSION ${${LIBRARY_NAME}_MINOR_VERSION})
+ SET(CFP_LIB_BUILD_VERSION ${${LIBRARY_NAME}_BUILD_VERSION})
+ SET(CFP_LIB_VERSION
+ ${CFP_LIB_MAJOR_VERSION}.${CFP_LIB_MINOR_VERSION}.${CFP_LIB_BUILD_VERSION})
+ SET(CFP_LIB_LIBRARIES ${${LIBRARY_NAME}_LIBRARIES})
+ IF (${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE)
+ SET(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE TRUE)
+ ELSE (${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE)
+ SET(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE FALSE)
+ ENDIF (${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE)
+ #---------------------------------------------------------------------------
+
+
+ #---------------------------------------------------------------------------
+ #-- BUILD TREE configuration
+ SET(CFP_BUILD_TREE_CONFIGURATION TRUE)
+ # UseLIBRARY_NAME.cmake
+ CONFIGURE_FILE(
+ ${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage_UseLibrary.cmake.in
+ ${PROJECT_BINARY_DIR}/Use${LIBRARY_NAME}.cmake
+ @ONLY IMMEDIATE
+ )
+ # LIBRARY_NAMEConfig.cmake
+ SET(CFP_LIB_RELATIVE_INCLUDE_PATHS
+ ${${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS})
+ SET(CFP_LIB_RELATIVE_LIBRARY_PATHS
+ ${${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS})
+ CONFIGURE_FILE(
+ ${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage_LibraryConfig.cmake.in
+ ${PROJECT_BINARY_DIR}/${LIBRARY_NAME}Config.cmake
+ @ONLY IMMEDIATE
+ )
+ # LIBRARY_NAMEBuildSettings.cmake :
+ # Save the compiler settings so another project can import them.
+ INCLUDE(${CMAKE_ROOT}/Modules/CMakeExportBuildSettings.cmake)
+ CMAKE_EXPORT_BUILD_SETTINGS(${PROJECT_BINARY_DIR}/${LIBRARY_NAME}BuildSettings.cmake)
+ # Additional Config and Use files
+ IF(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE)
+ CONFIGURE_FILE(
+ ${${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE}
+ ${PROJECT_BINARY_DIR}/Additional${LIBRARY_NAME}Config.cmake
+ @ONLY IMMEDIATE
+ )
+ CONFIGURE_FILE(
+ ${${LIBRARY_NAME}_ADDITIONAL_USE_FILE}
+ ${PROJECT_BINARY_DIR}/AdditionalUse${LIBRARY_NAME}.cmake
+ @ONLY IMMEDIATE
+ )
+ ENDIF(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE)
+ #---------------------------------------------------------------------------
+
+
+ #---------------------------------------------------------------------------
+ #-- INSTALL TREE configuration
+ SET(CFP_BUILD_TREE_CONFIGURATION FALSE)
+ # Create work directory to put the configured files because
+ # if the user invoked the macro at the root of the build tree the files
+ # would overwrite those configured for the build tree
+ SET(CFP_WORK_DIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeCreateFindPackage_stuff)
+ IF(NOT IS_DIRECTORY ${CFP_WORK_DIR})
+ FILE(MAKE_DIRECTORY ${CFP_WORK_DIR})
+ ENDIF(NOT IS_DIRECTORY ${CFP_WORK_DIR})
+
+ #----------------------------------------------------------------------------
+ #INSTALLATION PATH
+ IF(WIN32)
+ SET(INSTALL_PATH .)
+ ELSE(WIN32)
+ IF(${LIBRARY_NAME}_INSTALL_FOLDER)
+ SET(INSTALL_PATH lib/${${LIBRARY_NAME}_INSTALL_FOLDER})
+ ELSE(${LIBRARY_NAME}_INSTALL_FOLDER)
+ SET(INSTALL_PATH lib/${LIBRARY_NAME})
+ ENDIF(${LIBRARY_NAME}_INSTALL_FOLDER)
+ ENDIF(WIN32)
+
+
+ # UseLIBRARY_NAME.cmake
+ CONFIGURE_FILE(
+ ${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage_UseLibrary.cmake.in
+ ${CFP_WORK_DIR}/Use${LIBRARY_NAME}.cmake
+ @ONLY IMMEDIATE
+ )
+ INSTALL(
+ FILES
+ ${CFP_WORK_DIR}/Use${LIBRARY_NAME}.cmake
+ DESTINATION ${INSTALL_PATH}
+ )
+ # LIBRARY_NAMEConfig.cmake
+ SET(CFP_LIB_RELATIVE_INCLUDE_PATHS
+ ${${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS})
+ SET(CFP_LIB_RELATIVE_LIBRARY_PATHS
+ ${${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS})
+ CONFIGURE_FILE(
+ ${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage_LibraryConfig.cmake.in
+ ${CFP_WORK_DIR}/${LIBRARY_NAME}Config.cmake
+ @ONLY IMMEDIATE
+ )
+ INSTALL(
+ FILES
+ ${CFP_WORK_DIR}/${LIBRARY_NAME}Config.cmake
+ DESTINATION ${INSTALL_PATH}
+ )
+ # LIBRARY_NAMEBuildSettings.cmake :
+ CMAKE_EXPORT_BUILD_SETTINGS(${CFP_WORK_DIR}/${LIBRARY_NAME}BuildSettings.cmake)
+ INSTALL(
+ FILES
+ ${CFP_WORK_DIR}/${LIBRARY_NAME}BuildSettings.cmake
+ DESTINATION ${INSTALL_PATH}
+ )
+ # Additional Config and Use files
+ IF(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE)
+ CONFIGURE_FILE(
+ ${${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE}
+ ${CFP_WORK_DIR}/Additional${LIBRARY_NAME}Config.cmake
+ @ONLY IMMEDIATE
+ )
+ INSTALL(
+ FILES
+ ${CFP_WORK_DIR}/Additional${LIBRARY_NAME}Config.cmake
+ DESTINATION ${INSTALL_PATH}
+ )
+ CONFIGURE_FILE(
+ ${${LIBRARY_NAME}_ADDITIONAL_USE_FILE}
+ ${CFP_WORK_DIR}/AdditionalUse${LIBRARY_NAME}.cmake
+ @ONLY IMMEDIATE
+ )
+ INSTALL(
+ FILES
+ ${CFP_WORK_DIR}/AdditionalUse${LIBRARY_NAME}.cmake
+ DESTINATION ${INSTALL_PATH}
+ )
+ ENDIF(CFP_LIB_HAS_ADDITIONAL_CONFIG_FILE)
+ # Specific to install tree
+ # FindLIBRARY_NAME.cmake in CMake/Modules dir
+ CONFIGURE_FILE(
+ ${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage_FindLibrary.cmake.in
+ ${CFP_WORK_DIR}/Find${LIBRARY_NAME}.cmake
+ @ONLY IMMEDIATE
+ )
+ INSTALL(
+ FILES ${CFP_WORK_DIR}/Find${LIBRARY_NAME}.cmake
+ DESTINATION ${CMAKE_ROOT}/Modules
+ )
+ #---------------------------------------------------------------------------
+
+
+
+
+ENDMACRO(CMAKE_CREATE_FIND_PACKAGE)
+#-----------------------------------------------------------------------------