From 4c6240587ff1b9e7e85310a8590aa6688b270c19 Mon Sep 17 00:00:00 2001
From: Markus Blatt <markus@dr-blatt.de>
Date: Tue, 7 Jan 2014 17:12:36 +0100
Subject: [PATCH] [cmake,release] Provide a substitute for
 CMakePackageConfigHelpers.

Apparently it is not available with some older versions of CMake.
Therefore we provide a poor man's alternative for it, if it is
not there.
---
 cmake/modules/CMakeLists.txt                  |  1 +
 .../DuneCMakePackageConfigHelpers.cmake       | 39 +++++++++++++++++++
 cmake/modules/DuneMacros.cmake                |  2 +-
 cmake/modules/Makefile.am                     |  1 +
 4 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 cmake/modules/DuneCMakePackageConfigHelpers.cmake

diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
index 3dcce83eb..bb8ee36e9 100644
--- a/cmake/modules/CMakeLists.txt
+++ b/cmake/modules/CMakeLists.txt
@@ -6,6 +6,7 @@ set(modules
   CheckCXX11Features.cmake
   CheckSharedPtr.cmake
   DuneBoost.cmake
+  DuneCmakePackageConfigHelpers.cmake
   DuneCommonMacros.cmake
   DuneCxaDemangle.cmake
   DuneDoc.cmake
diff --git a/cmake/modules/DuneCMakePackageConfigHelpers.cmake b/cmake/modules/DuneCMakePackageConfigHelpers.cmake
new file mode 100644
index 000000000..330babc6f
--- /dev/null
+++ b/cmake/modules/DuneCMakePackageConfigHelpers.cmake
@@ -0,0 +1,39 @@
+#
+# A poor mans version of CMakePackageConfigHelpers.cmake for as a substitute
+# for old Cmake versions.
+#
+# Provides the function
+#  configure_package_config_file infile outfile INSTALL_DESTINATION relative_install_path
+#  [PATH_VARS relative_path_varname1 ...])
+#
+# all paths are assumed to be relative!
+#
+find_file(CMakePkgConfigHelpersMacroFile CMakePackageConfigHelpers.cmake PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH})
+
+if(CMakePkgConfigHelpersMacroFile)
+  include(CMakePackageConfigHelpers)
+else(CMakePkgConfigHelpersMacroFile)
+  function(configure_package_config_file infile outfile)
+    include(CMakeParseArguments)
+    cmake_parse_arguments(PMPKG "" "INSTALL_DESTINATION" "PATH_VARS" "${ARGN}")
+    if(NOT PMPKG_INSTALL_DESTINATION)
+      message(FATAL_ERROR "configure_package_config_file needs an option INSTALL_DESTINATION with a relative path")
+    endif(NOT PMPKG_INSTALL_DESTINATION)
+    # asume that PMPKG_INSTALL_DESTINATION is relative
+    string(REGEX REPLACE "[^/]+" ".." prefix_path ${PMPKG_INSTALL_DESTINATION})
+    set(PACKAGE_INIT "# Set prefix to source dir
+get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${prefix_path}\" ABSOLUTE)
+macro(set_and_check _var _file)
+  set(\${_var} \"\${_file}\")
+  if(NOT EXISTS \"\${_file}\")
+    message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
+  endif()
+endmacro()")
+    if(PMPKG_PATH_VARS)
+    foreach(varname ${PMPKG_PATH_VARS})
+      set(PACKAGE_${varname} "\${PACKAGE_PREFIX_DIR}/${${varname}}")
+    endforeach(varname "${PMPKG_PATH_VARS}")
+    endif(PMPKG_PATH_VARS)
+    configure_file(${infile} ${outfile} @ONLY)
+  endfunction(configure_package_config_file infile outfile)
+endif(CMakePkgConfigHelpersMacroFile)
diff --git a/cmake/modules/DuneMacros.cmake b/cmake/modules/DuneMacros.cmake
index cb3299e6b..cf4a26ce8 100644
--- a/cmake/modules/DuneMacros.cmake
+++ b/cmake/modules/DuneMacros.cmake
@@ -602,7 +602,7 @@ macro(finalize_dune_project)
   finalize_headercheck()
 
   #create cmake-config files for installation tree
-  include(CMakePackageConfigHelpers)
+  include(DuneCMakePackageConfigHelpers)
   include(GNUInstallDirs)
   set(DOXYSTYLE_DIR ${CMAKE_INSTALL_DATAROOTDIR}/dune-common/doc/doxygen/)
   set(SCRIPT_DIR ${CMAKE_INSTALL_DATAROOTDIR}/dune/cmake/scripts)
diff --git a/cmake/modules/Makefile.am b/cmake/modules/Makefile.am
index d7b5b895f..1753b1018 100644
--- a/cmake/modules/Makefile.am
+++ b/cmake/modules/Makefile.am
@@ -6,6 +6,7 @@ MODULES = \
   CheckCXX11Features.cmake \
   CheckSharedPtr.cmake     \
   DuneBoost.cmake \
+  DuneCmakePackageConfigHelpers.cmake \
   DuneCommonMacros.cmake  \
   DuneCxaDemangle.cmake   \
   DuneDoc.cmake           \
-- 
GitLab