aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorHoward Butler <howard@hobu.co>2015-02-22 23:06:13 +0000
committerHoward Butler <howard@hobu.co>2015-02-22 23:06:13 +0000
commit4f2ff5857f6f554b7e5c25c139d8064e031c7b73 (patch)
treea94374c80c26ee16a3ce9440a6dcd9f2b5712b98 /cmake
parent41d8647cdff0c7550b77e7d225e2578ea736d777 (diff)
downloadPROJ-4f2ff5857f6f554b7e5c25c139d8064e031c7b73.tar.gz
PROJ-4f2ff5857f6f554b7e5c25c139d8064e031c7b73.zip
More CMake churn #264
git-svn-id: http://svn.osgeo.org/metacrs/proj/trunk@2632 4e78687f-474d-0410-85f9-8d5e500ac6b2
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CMakeLists.txt29
-rw-r--r--cmake/project-config-version.cmake.in48
-rw-r--r--cmake/project-config.cmake.in28
3 files changed, 105 insertions, 0 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
new file mode 100644
index 00000000..dcb0a61a
--- /dev/null
+++ b/cmake/CMakeLists.txt
@@ -0,0 +1,29 @@
+# proj-config.cmake for the install tree. It's installed in
+# ${INSTALL_CMAKE_DIR} and @PROJECT_ROOT_DIR@ is the relative
+# path to the root from there. (Note that the whole install tree can
+# be relocated.)
+if (NOT WIN32)
+ set (INSTALL_CMAKE_DIR "share/cmake/${PROJECT_INTERN_NAME}")
+ set (PROJECT_ROOT_DIR "../../..")
+else ()
+ set (INSTALL_CMAKE_DIR "cmake")
+ set (PROJECT_ROOT_DIR "..")
+endif ()
+
+string(TOLOWER "${PROJECT_INTERN_NAME}" PROJECT_NAME_LOWER)
+configure_file (project-config.cmake.in project-config.cmake @ONLY)
+configure_file (project-config-version.cmake.in
+ project-config-version.cmake @ONLY)
+install (FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/project-config.cmake"
+ DESTINATION "${INSTALL_CMAKE_DIR}"
+ RENAME "${PROJECT_NAME_LOWER}-config.cmake")
+install (FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/project-config-version.cmake"
+ DESTINATION "${INSTALL_CMAKE_DIR}"
+ RENAME "${PROJECT_NAME_LOWER}-config-version.cmake")
+# Make information about the cmake targets (the library and the tools)
+# available.
+install (EXPORT targets
+ FILE ${PROJECT_NAME_LOWER}-targets.cmake
+ DESTINATION "${INSTALL_CMAKE_DIR}")
diff --git a/cmake/project-config-version.cmake.in b/cmake/project-config-version.cmake.in
new file mode 100644
index 00000000..5d57ee15
--- /dev/null
+++ b/cmake/project-config-version.cmake.in
@@ -0,0 +1,48 @@
+# Version checking for @PROJECT_INTERN_NAME@
+
+set (PACKAGE_VERSION "@PROJ_VERSION@")
+set (PACKAGE_VERSION_MAJOR "@PROJ_VERSION_MAJOR@")
+set (PACKAGE_VERSION_MINOR "@PROJ_VERSION_MINOR@")
+set (PACKAGE_VERSION_PATCH "@PROJ_VERSION_PATCH@")
+
+if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_INTERN_NAME@")
+ # Check package name (in particular, because of the way cmake finds
+ # package config files, the capitalization could easily be "wrong").
+ # This is necessary to ensure that the automatically generated
+ # variables, e.g., <package>_FOUND, are consistently spelled.
+ set (REASON "package = @PROJECT_INTERN_NAME@, NOT ${PACKAGE_FIND_NAME}")
+ set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (NOT (APPLE OR (NOT DEFINED CMAKE_SIZEOF_VOID_P) OR
+ CMAKE_SIZEOF_VOID_P EQUAL @CMAKE_SIZEOF_VOID_P@))
+ # Reject if there's a 32-bit/64-bit mismatch (not necessary with Apple
+ # since a multi-architecture library is built for that platform).
+ set (REASON "sizeof(*void) = @CMAKE_SIZEOF_VOID_P@")
+ set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (MSVC AND NOT MSVC_VERSION STREQUAL "@MSVC_VERSION@")
+ # Reject if there's a mismatch in MSVC compiler versions
+ set (REASON "_MSC_VER = @MSVC_VERSION@")
+ set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (NOT CMAKE_CROSSCOMPILING STREQUAL "@CMAKE_CROSSCOMPILING@")
+ # Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING}
+ set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@")
+ set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (CMAKE_CROSSCOMPILING AND
+ NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND
+ CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@"))
+ # Reject if cross-compiling and there's a mismatch in the target system
+ set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@")
+ set (PACKAGE_VERSION_UNSUITABLE TRUE)
+elseif (PACKAGE_FIND_VERSION)
+ if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
+ set (PACKAGE_VERSION_EXACT TRUE)
+ elseif (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION
+ AND PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR)
+ set (PACKAGE_VERSION_COMPATIBLE TRUE)
+ endif ()
+endif ()
+
+# If unsuitable, append the reason to the package version so that it's
+# visible to the user.
+if (PACKAGE_VERSION_UNSUITABLE)
+ set (PACKAGE_VERSION "${PACKAGE_VERSION} (${REASON})")
+endif ()
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
new file mode 100644
index 00000000..6110dc61
--- /dev/null
+++ b/cmake/project-config.cmake.in
@@ -0,0 +1,28 @@
+# Configure @PROJECT_INTERN_NAME@
+#
+# Set
+# @PROJECT_INTERN_NAME@_FOUND = 1
+# @PROJECT_INTERN_NAME@_INCLUDE_DIRS = /usr/local/include
+# @PROJECT_INTERN_NAME@_LIBRARIES = proj
+# @PROJECT_INTERN_NAME@_LIBRARY_DIRS = /usr/local/lib
+# @PROJECT_INTERN_NAME@_BINARY_DIRS = /usr/local/bin
+# @PROJECT_INTERN_NAME@_VERSION = 4.9.1 (for example)
+
+message (STATUS "Reading ${CMAKE_CURRENT_LIST_FILE}")
+# @PROJECT_INTERN_NAME@_VERSION is set by version file
+message (STATUS
+ "@PROJECT_INTERN_NAME@ configuration, version ${@PROJECT_INTERN_NAME@_VERSION}")
+
+# Tell the user project where to find our headers and libraries
+get_filename_component (_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
+get_filename_component (_ROOT "${_DIR}/@PROJECT_ROOT_DIR@" ABSOLUTE)
+set (@PROJECT_INTERN_NAME@_INCLUDE_DIRS "${_ROOT}/@INCLUDEDIR@")
+set (@PROJECT_INTERN_NAME@_LIBRARY_DIRS "${_ROOT}/@LIBDIR@")
+set (@PROJECT_INTERN_NAME@_BINARY_DIRS "${_ROOT}/@BINDIR@")
+
+set (@PROJECT_INTERN_NAME@_LIBRARIES proj)
+# Read in the exported definition of the library
+include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake")
+
+unset (_ROOT)
+unset (_DIR)