Update all CMake to lowercase function name style.
- Updated to new CMake style where function names are all lowercase,
this will be backwards compatible as CMake function names are
case insensitive.
- Updated using Emacs' M-x unscreamify-cmake-buffer.
Change-Id: If7219816f560270e59212813aeb021353a64a0e2
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b2cb280..20c3499 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,50 +29,50 @@
# Authors: keir@google.com (Keir Mierle)
# alexs.mac@gmail.com (Alex Stewart)
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
-CMAKE_POLICY(VERSION 2.8)
+cmake_minimum_required(VERSION 2.8.0)
+cmake_policy(VERSION 2.8)
-CMAKE_POLICY(SET CMP0003 NEW)
-IF (POLICY CMP0042)
- CMAKE_POLICY(SET CMP0042 NEW)
-ENDIF()
+cmake_policy(SET CMP0003 NEW)
+if (POLICY CMP0042)
+ cmake_policy(SET CMP0042 NEW)
+endif()
-PROJECT(Ceres C CXX)
+project(Ceres C CXX)
# Make CMake aware of the cmake folder for local FindXXX scripts,
# append rather than set in case the user has passed their own
# additional paths via -D.
-LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
-INCLUDE(UpdateCacheVariable)
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+include(UpdateCacheVariable)
# Set up the git hook to make Gerrit Change-Id: lines in commit messages.
-INCLUDE(AddGerritCommitHook)
-ADD_GERRIT_COMMIT_HOOK()
+include(AddGerritCommitHook)
+add_gerrit_commit_hook()
# On OS X, add the Homebrew prefix to the set of prefixes searched by
# CMake in find_path & find_library. This should ensure that we can
# still build Ceres even if Homebrew is installed in a non-standard
# location (not /usr/local).
-IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- FIND_PROGRAM(HOMEBREW_EXECUTABLE brew)
- MARK_AS_ADVANCED(FORCE HOMEBREW_EXECUTABLE)
- IF (HOMEBREW_EXECUTABLE)
+if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ find_program(HOMEBREW_EXECUTABLE brew)
+ mark_as_advanced(FORCE HOMEBREW_EXECUTABLE)
+ if (HOMEBREW_EXECUTABLE)
# Detected a Homebrew install, query for its install prefix.
- EXECUTE_PROCESS(COMMAND ${HOMEBREW_EXECUTABLE} --prefix
+ execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix
OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE)
- MESSAGE(STATUS "Detected Homebrew with install prefix: "
+ message(STATUS "Detected Homebrew with install prefix: "
"${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.")
- LIST(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_INSTALL_PREFIX}")
- ENDIF()
-ENDIF()
+ list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_INSTALL_PREFIX}")
+ endif()
+endif()
-SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
-SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Set postfixes for generated libraries based on buildtype.
-SET(CMAKE_RELEASE_POSTFIX "")
-SET(CMAKE_DEBUG_POSTFIX "-debug")
+set(CMAKE_RELEASE_POSTFIX "")
+set(CMAKE_DEBUG_POSTFIX "-debug")
# Important: Always bump the second number (e.g. 1.3.x to 1.4.0) for any
# release that changes the ABI. The ABI changes for almost any modification to
@@ -81,30 +81,30 @@
#
# For versions without ABI changes, bump the smallest number in CERES_VERSION,
# but leave the CERES_ABI_VERSION unchanged.
-SET(CERES_VERSION_MAJOR 1)
-SET(CERES_VERSION_MINOR 10)
-SET(CERES_VERSION_PATCH 0)
-SET(CERES_VERSION
+set(CERES_VERSION_MAJOR 1)
+set(CERES_VERSION_MINOR 10)
+set(CERES_VERSION_PATCH 0)
+set(CERES_VERSION
${CERES_VERSION_MAJOR}.${CERES_VERSION_MINOR}.${CERES_VERSION_PATCH})
-SET(CERES_ABI_VERSION 1.10.0)
+set(CERES_ABI_VERSION 1.10.0)
-ENABLE_TESTING()
+enable_testing()
-OPTION(MINIGLOG "Use a stripped down version of glog." OFF)
-OPTION(GFLAGS "Enable Google Flags." ON)
-OPTION(SUITESPARSE "Enable SuiteSparse." ON)
-OPTION(CXSPARSE "Enable CXSparse." ON)
-OPTION(LAPACK "Enable use of LAPACK." ON)
+option(MINIGLOG "Use a stripped down version of glog." OFF)
+option(GFLAGS "Enable Google Flags." ON)
+option(SUITESPARSE "Enable SuiteSparse." ON)
+option(CXSPARSE "Enable CXSparse." ON)
+option(LAPACK "Enable use of LAPACK." ON)
# Template specializations for the Schur complement based solvers. If
# compile time, binary size or compiler performance is an issue, you
# may consider disabling this.
-OPTION(SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ON)
-OPTION(CUSTOM_BLAS
+option(SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ON)
+option(CUSTOM_BLAS
"Use handcoded BLAS routines (usually faster) instead of Eigen."
ON)
# Multithreading using OpenMP
-OPTION(OPENMP "Enable threaded solving in Ceres (requires OpenMP)" ON)
-OPTION(EIGENSPARSE
+option(OPENMP "Enable threaded solving in Ceres (requires OpenMP)" ON)
+option(EIGENSPARSE
"Enable the use of Eigen as a sparse linear algebra library for
solving the nonlinear least squares problems. Enabling this
option will result in an LGPL licensed version of Ceres Solver
@@ -113,7 +113,7 @@
depends on the sparse QR factorization algorithm, which is licensed
under the MPL."
OFF)
-IF (NOT WIN32)
+if (NOT WIN32)
# Ceres does not use C++11 internally, however it does use shared_ptr
# (required) and unordered_map (if available), both of which were present in
# previous iterations of what became C++11. GCC & Clang can have both TR1 &
@@ -126,25 +126,25 @@
#
# This option is not available on Windows, as there, any new (C++11 etc)
# features available are on by default and there is no analogue to -std=c++11.
- OPTION(CXX11 "Enable use of C++11 headers if available (requires client code use C++11)." OFF)
-ENDIF(NOT WIN32)
-OPTION(EXPORT_BUILD_DIR
+ option(CXX11 "Enable use of C++11 headers if available (requires client code use C++11)." OFF)
+endif(NOT WIN32)
+option(EXPORT_BUILD_DIR
"Export build directory using CMake (enables external use without install)." OFF)
-OPTION(BUILD_TESTING "Enable tests" ON)
-OPTION(BUILD_DOCUMENTATION "Build User's Guide (html)" OFF)
-OPTION(BUILD_EXAMPLES "Build examples" ON)
-OPTION(BUILD_SHARED_LIBS "Build Ceres as a shared library." OFF)
-IF (MSVC)
- OPTION(MSVC_USE_STATIC_CRT
+option(BUILD_TESTING "Enable tests" ON)
+option(BUILD_DOCUMENTATION "Build User's Guide (html)" OFF)
+option(BUILD_EXAMPLES "Build examples" ON)
+option(BUILD_SHARED_LIBS "Build Ceres as a shared library." OFF)
+if (MSVC)
+ option(MSVC_USE_STATIC_CRT
"MS Visual Studio: Use static C-Run Time Library in place of shared." OFF)
- IF (BUILD_TESTING AND BUILD_SHARED_LIBS)
- MESSAGE(
+ if (BUILD_TESTING AND BUILD_SHARED_LIBS)
+ message(
"-- Disabling tests. The flags BUILD_TESTING and BUILD_SHARED_LIBS"
" are incompatible with MSVC.")
- UPDATE_CACHE_VARIABLE(BUILD_TESTING OFF)
- ENDIF (BUILD_TESTING AND BUILD_SHARED_LIBS)
-ENDIF (MSVC)
+ update_cache_variable(BUILD_TESTING OFF)
+ endif (BUILD_TESTING AND BUILD_SHARED_LIBS)
+endif (MSVC)
# Use ios-cmake to build a static library for iOS
#
@@ -168,38 +168,38 @@
#
# If you use the lapack and blas, then you also need to add Accelerate.framework
# to your Xcode project's linking dependency.
-IF (IOS)
- MESSAGE(STATUS "Building Ceres for iOS platform: ${IOS_PLATFORM}")
+if (IOS)
+ message(STATUS "Building Ceres for iOS platform: ${IOS_PLATFORM}")
- UPDATE_CACHE_VARIABLE(MINIGLOG ON)
- MESSAGE(STATUS "Building for iOS, forcing use of miniglog instead of glog.")
+ update_cache_variable(MINIGLOG ON)
+ message(STATUS "Building for iOS, forcing use of miniglog instead of glog.")
- UPDATE_CACHE_VARIABLE(SUITESPARSE OFF)
- UPDATE_CACHE_VARIABLE(CXSPARSE OFF)
- UPDATE_CACHE_VARIABLE(GFLAGS OFF)
- UPDATE_CACHE_VARIABLE(OPENMP OFF)
+ update_cache_variable(SUITESPARSE OFF)
+ update_cache_variable(CXSPARSE OFF)
+ update_cache_variable(GFLAGS OFF)
+ update_cache_variable(OPENMP OFF)
# Apple claims that the BLAS call dsyrk_ is a private API, and will not allow
# you to submit to the Apple Store if the symbol is present.
- UPDATE_CACHE_VARIABLE(LAPACK OFF)
+ update_cache_variable(LAPACK OFF)
- MESSAGE(STATUS "Building for iOS: SuiteSparse, CXSparse, LAPACK, gflags, "
+ message(STATUS "Building for iOS: SuiteSparse, CXSparse, LAPACK, gflags, "
"and OpenMP are not available.")
- UPDATE_CACHE_VARIABLE(BUILD_EXAMPLES OFF)
- MESSAGE(STATUS "Building for iOS, will not build examples.")
+ update_cache_variable(BUILD_EXAMPLES OFF)
+ message(STATUS "Building for iOS, will not build examples.")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}")
- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fobjc-abi-version=2 -fobjc-arc -isysroot ${CMAKE_OSX_SYSROOT}")
- IF (${IOS_PLATFORM} STREQUAL "SIMULATOR" OR
+ if (${IOS_PLATFORM} STREQUAL "SIMULATOR" OR
${IOS_PLATFORM} STREQUAL "SIMULATOR64")
# By default, the minimum version is < 7.0, which causes problems with
# detection of shared_ptr & unordered_map as pre-7.0 used libstdc++
# but 7.0+ uses libc++ (also LLVM-GCC was removed from Xcode 5).
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=7.0")
- ENDIF()
-ENDIF (IOS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=7.0")
+ endif()
+endif (IOS)
# Prior to October 2013, Ceres used some non-CMake standardised variables to
# hold user-specified (as opposed to FindPackage found) include directory and
@@ -209,139 +209,139 @@
# CMake variables: <DEPENDENCY>_LIBRARIES & <DEPENDENCY>_INCLUDE_DIRS. In order
# to ensure backwards compatibility, convert any legacy variables to
# _directory_ hints for the FindPackage() scripts.
-MACRO(HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT
+macro(HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT
LEGACY_VAR DIRECTORY_HINT_VAR)
- IF (DEFINED ${LEGACY_VAR})
+ if (DEFINED ${LEGACY_VAR})
# Get the dependency name (all caps) from the hint directory variable
# for the warning message.
- STRING(REGEX MATCH "^[^_]*" DEPENDENCY_NAME ${DIRECTORY_HINT_VAR})
- MESSAGE(WARNING "You are defining a legacy variable ${LEGACY_VAR} "
+ string(REGEX MATCH "^[^_]*" DEPENDENCY_NAME ${DIRECTORY_HINT_VAR})
+ message(WARNING "You are defining a legacy variable ${LEGACY_VAR} "
"to specify the include directory for ${DEPENDENCY_NAME}. This is "
"deprecated and support for it will be removed in a future release. "
"Please use either the search directory hints variable: "
"${DIRECTORY_HINT_VAR} or ${DEPENDENCY_NAME}_INCLUDE_DIR to specify "
"exactly the directory used (no search performed), see: "
"http://ceres-solver.org/building.html for more information.")
- LIST(APPEND ${DIRECTORY_HINT_VAR} ${${LEGACY_VAR}})
- ENDIF (DEFINED ${LEGACY_VAR})
-ENDMACRO(HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT)
+ list(APPEND ${DIRECTORY_HINT_VAR} ${${LEGACY_VAR}})
+ endif (DEFINED ${LEGACY_VAR})
+endmacro(HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT)
-MACRO(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT
+macro(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT
LEGACY_VAR DIRECTORY_HINT_VAR)
- IF (DEFINED ${LEGACY_VAR})
+ if (DEFINED ${LEGACY_VAR})
# Get the dependency name (all caps) from the hint directory variable
# for the warning message.
- STRING(REGEX MATCH "^[^_]*" DEPENDENCY_NAME ${DIRECTORY_HINT_VAR})
- MESSAGE(WARNING "You are defining a legacy variable ${LEGACY_VAR} "
+ string(REGEX MATCH "^[^_]*" DEPENDENCY_NAME ${DIRECTORY_HINT_VAR})
+ message(WARNING "You are defining a legacy variable ${LEGACY_VAR} "
"to specify the library for ${DEPENDENCY_NAME}. This is "
"deprecated and support for it will be removed in a future release. "
"Please use either the search directory hints variable: "
"${DIRECTORY_HINT_VAR} or ${DEPENDENCY_NAME}_LIBRARY to specify "
"exactly the library used (no search performed), see: "
"http://ceres-solver.org/building.html for more information.")
- IF (EXISTS ${${LEGACY_VAR}} AND
+ if (EXISTS ${${LEGACY_VAR}} AND
NOT IS_DIRECTORY ${${LEGACY_VAR}})
# User specified an explicit (library) file using the legacy variable
# interface, hints to FindPackage() scripts are directories so add the
# parent directory of the specified file.
- GET_FILENAME_COMPONENT(DIR_HINT ${${LEGACY_VAR}} PATH)
- LIST(APPEND ${DIRECTORY_HINT_VAR} ${DIR_HINT})
- ELSEIF (EXISTS ${${LEGACY_VAR}} AND
+ get_filename_component(DIR_HINT ${${LEGACY_VAR}} PATH)
+ list(APPEND ${DIRECTORY_HINT_VAR} ${DIR_HINT})
+ elseif (EXISTS ${${LEGACY_VAR}} AND
IS_DIRECTORY ${${LEGACY_VAR}})
# User specified a directory hint using the legacy variable, use it.
- LIST(APPEND ${DIRECTORY_HINT_VAR} ${${LEGACY_VAR}})
- ENDIF()
- ENDIF (DEFINED ${LEGACY_VAR})
-ENDMACRO(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT)
+ list(APPEND ${DIRECTORY_HINT_VAR} ${${LEGACY_VAR}})
+ endif()
+ endif (DEFINED ${LEGACY_VAR})
+endmacro(HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT)
-UNSET(CERES_COMPILE_OPTIONS)
+unset(CERES_COMPILE_OPTIONS)
# Eigen.
-HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT(EIGEN_INCLUDE EIGEN_INCLUDE_DIR_HINTS)
-FIND_PACKAGE(Eigen REQUIRED)
-IF (EIGEN_FOUND)
- IF (EIGEN_VERSION VERSION_LESS 3.1.0)
- MESSAGE(FATAL_ERROR "-- Ceres requires Eigen version >= 3.1.0 in order "
+handle_legacy_include_dependency_hint(EIGEN_INCLUDE EIGEN_INCLUDE_DIR_HINTS)
+find_package(Eigen REQUIRED)
+if (EIGEN_FOUND)
+ if (EIGEN_VERSION VERSION_LESS 3.1.0)
+ message(FATAL_ERROR "-- Ceres requires Eigen version >= 3.1.0 in order "
"that Eigen/SparseCore be available, detected version of Eigen is: "
"${EIGEN_VERSION}")
- ENDIF (EIGEN_VERSION VERSION_LESS 3.1.0)
+ endif (EIGEN_VERSION VERSION_LESS 3.1.0)
- MESSAGE("-- Found Eigen version ${EIGEN_VERSION}: ${EIGEN_INCLUDE_DIRS}")
+ message("-- Found Eigen version ${EIGEN_VERSION}: ${EIGEN_INCLUDE_DIRS}")
# Ensure that only MPL2 licensed code is part of the default build.
- MESSAGE("")
- MESSAGE(" ===============================================================")
- IF (EIGENSPARSE)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_USE_EIGEN_SPARSE)
- MESSAGE(" Enabling the use of Eigen as a sparse linear algebra library ")
- MESSAGE(" for solving the nonlinear least squares problems. Enabling ")
- MESSAGE(" this option will result in an LGPL licensed version of ")
- MESSAGE(" Ceres Solver as the Simplicial Cholesky factorization in Eigen")
- MESSAGE(" is licensed under the LGPL. ")
+ message("")
+ message(" ===============================================================")
+ if (EIGENSPARSE)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_USE_EIGEN_SPARSE)
+ message(" Enabling the use of Eigen as a sparse linear algebra library ")
+ message(" for solving the nonlinear least squares problems. Enabling ")
+ message(" this option will result in an LGPL licensed version of ")
+ message(" Ceres Solver as the Simplicial Cholesky factorization in Eigen")
+ message(" is licensed under the LGPL. ")
- IF (EIGEN_VERSION VERSION_LESS 3.2.2)
- MESSAGE(" WARNING:")
- MESSAGE("")
- MESSAGE(" Your version of Eigen is older than version 3.2.2.")
- MESSAGE(" The performance of SPARSE_NORMAL_CHOLESKY and SPARSE_SCHUR")
- MESSAGE(" linear solvers will suffer. ")
- ENDIF (EIGEN_VERSION VERSION_LESS 3.2.2)
+ if (EIGEN_VERSION VERSION_LESS 3.2.2)
+ message(" WARNING:")
+ message("")
+ message(" Your version of Eigen is older than version 3.2.2.")
+ message(" The performance of SPARSE_NORMAL_CHOLESKY and SPARSE_SCHUR")
+ message(" linear solvers will suffer. ")
+ endif (EIGEN_VERSION VERSION_LESS 3.2.2)
- ELSE (EIGENSPARSE)
- MESSAGE(" Disabling the use of Eigen as a sparse linear algebra library.")
- MESSAGE(" This does not affect the covariance estimation algorithm ")
- MESSAGE(" which can still use the EIGEN_SPARSE_QR algorithm.")
- ADD_DEFINITIONS(-DEIGEN_MPL2_ONLY)
- ENDIF (EIGENSPARSE)
- MESSAGE(" ===============================================================")
- MESSAGE("")
-ENDIF (EIGEN_FOUND)
+ else (EIGENSPARSE)
+ message(" Disabling the use of Eigen as a sparse linear algebra library.")
+ message(" This does not affect the covariance estimation algorithm ")
+ message(" which can still use the EIGEN_SPARSE_QR algorithm.")
+ add_definitions(-DEIGEN_MPL2_ONLY)
+ endif (EIGENSPARSE)
+ message(" ===============================================================")
+ message("")
+endif (EIGEN_FOUND)
# LAPACK (& BLAS).
-IF (LAPACK)
- FIND_PACKAGE(LAPACK QUIET)
- IF (LAPACK_FOUND)
- MESSAGE("-- Found LAPACK library: ${LAPACK_LIBRARIES}")
- ELSE (LAPACK_FOUND)
- MESSAGE("-- Did not find LAPACK library, disabling LAPACK support.")
- ENDIF (LAPACK_FOUND)
+if (LAPACK)
+ find_package(LAPACK QUIET)
+ if (LAPACK_FOUND)
+ message("-- Found LAPACK library: ${LAPACK_LIBRARIES}")
+ else (LAPACK_FOUND)
+ message("-- Did not find LAPACK library, disabling LAPACK support.")
+ endif (LAPACK_FOUND)
- FIND_PACKAGE(BLAS QUIET)
- IF (BLAS_FOUND)
- MESSAGE("-- Found BLAS library: ${BLAS_LIBRARIES}")
- ELSE (BLAS_FOUND)
- MESSAGE("-- Did not find BLAS library, disabling LAPACK support.")
- ENDIF (BLAS_FOUND)
+ find_package(BLAS QUIET)
+ if (BLAS_FOUND)
+ message("-- Found BLAS library: ${BLAS_LIBRARIES}")
+ else (BLAS_FOUND)
+ message("-- Did not find BLAS library, disabling LAPACK support.")
+ endif (BLAS_FOUND)
- IF (NOT (LAPACK_FOUND AND BLAS_FOUND))
- UPDATE_CACHE_VARIABLE(LAPACK OFF)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK)
- ENDIF (NOT (LAPACK_FOUND AND BLAS_FOUND))
-ELSE (LAPACK)
- MESSAGE("-- Building without LAPACK.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK)
-ENDIF (LAPACK)
+ if (NOT (LAPACK_FOUND AND BLAS_FOUND))
+ update_cache_variable(LAPACK OFF)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK)
+ endif (NOT (LAPACK_FOUND AND BLAS_FOUND))
+else (LAPACK)
+ message("-- Building without LAPACK.")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_LAPACK)
+endif (LAPACK)
# SuiteSparse.
-IF (SUITESPARSE AND NOT LAPACK)
+if (SUITESPARSE AND NOT LAPACK)
# If user has disabled LAPACK, but left SUITESPARSE ON, turn it OFF,
# LAPACK controls whether Ceres will be linked, directly or indirectly
# via SuiteSparse to LAPACK.
- MESSAGE("-- Disabling SuiteSparse as use of LAPACK has been disabled, "
+ message("-- Disabling SuiteSparse as use of LAPACK has been disabled, "
"turn ON LAPACK to enable (optional) building with SuiteSparse.")
- UPDATE_CACHE_VARIABLE(SUITESPARSE OFF)
-ENDIF (SUITESPARSE AND NOT LAPACK)
-IF (SUITESPARSE)
+ update_cache_variable(SUITESPARSE OFF)
+endif (SUITESPARSE AND NOT LAPACK)
+if (SUITESPARSE)
# By default, if SuiteSparse and all dependencies are found, Ceres is
# built with SuiteSparse support.
# Check for SuiteSparse and dependencies.
- FIND_PACKAGE(SuiteSparse)
- IF (SUITESPARSE_FOUND)
+ find_package(SuiteSparse)
+ if (SUITESPARSE_FOUND)
# On Ubuntu the system install of SuiteSparse (v3.4.0) up to at least
# Ubuntu 13.10 cannot be used to link shared libraries.
- IF (BUILD_SHARED_LIBS AND
+ if (BUILD_SHARED_LIBS AND
SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
- MESSAGE(FATAL_ERROR "You are attempting to build Ceres as a shared "
+ message(FATAL_ERROR "You are attempting to build Ceres as a shared "
"library on Ubuntu using a system package install of SuiteSparse "
"3.4.0. This package is broken and does not support the "
"construction of shared libraries (you can still build Ceres as "
@@ -350,219 +350,219 @@
"(libsuitesparse-dev) and perform a source install of SuiteSparse "
"(we recommend that you use the latest version), "
"see http://ceres-solver.org/building.html for more information.")
- ENDIF (BUILD_SHARED_LIBS AND
+ endif (BUILD_SHARED_LIBS AND
SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION)
# By default, if all of SuiteSparse's dependencies are found, Ceres is
# built with SuiteSparse support.
- MESSAGE("-- Found SuiteSparse ${SUITESPARSE_VERSION}, "
+ message("-- Found SuiteSparse ${SUITESPARSE_VERSION}, "
"building with SuiteSparse.")
- ELSE (SUITESPARSE_FOUND)
+ else (SUITESPARSE_FOUND)
# Disable use of SuiteSparse if it cannot be found and continue.
- MESSAGE("-- Did not find all SuiteSparse dependencies, disabling "
+ message("-- Did not find all SuiteSparse dependencies, disabling "
"SuiteSparse support.")
- UPDATE_CACHE_VARIABLE(SUITESPARSE OFF)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE)
- ENDIF (SUITESPARSE_FOUND)
-ELSE (SUITESPARSE)
- MESSAGE("-- Building without SuiteSparse.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE)
-ENDIF (SUITESPARSE)
+ update_cache_variable(SUITESPARSE OFF)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE)
+ endif (SUITESPARSE_FOUND)
+else (SUITESPARSE)
+ message("-- Building without SuiteSparse.")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_SUITESPARSE)
+endif (SUITESPARSE)
# CXSparse.
-IF (CXSPARSE)
+if (CXSPARSE)
# Don't search with REQUIRED as we can continue without CXSparse.
- FIND_PACKAGE(CXSparse)
- IF (CXSPARSE_FOUND)
+ find_package(CXSparse)
+ if (CXSPARSE_FOUND)
# By default, if CXSparse and all dependencies are found, Ceres is
# built with CXSparse support.
- MESSAGE("-- Found CXSparse version: ${CXSPARSE_VERSION}, "
+ message("-- Found CXSparse version: ${CXSPARSE_VERSION}, "
"building with CXSparse.")
- ELSE (CXSPARSE_FOUND)
+ else (CXSPARSE_FOUND)
# Disable use of CXSparse if it cannot be found and continue.
- MESSAGE("-- Did not find CXSparse, Building without CXSparse.")
- UPDATE_CACHE_VARIABLE(CXSPARSE OFF)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
- ENDIF (CXSPARSE_FOUND)
-ELSE (CXSPARSE)
- MESSAGE("-- Building without CXSparse.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
+ message("-- Did not find CXSparse, Building without CXSparse.")
+ update_cache_variable(CXSPARSE OFF)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
+ endif (CXSPARSE_FOUND)
+else (CXSPARSE)
+ message("-- Building without CXSparse.")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
# Mark as advanced (remove from default GUI view) the CXSparse search
# variables in case user enabled CXSPARSE, FindCXSparse did not find it, so
# made search variables visible in GUI for user to set, but then user disables
# CXSPARSE instead of setting them.
- MARK_AS_ADVANCED(FORCE CXSPARSE_INCLUDE_DIR
+ mark_as_advanced(FORCE CXSPARSE_INCLUDE_DIR
CXSPARSE_LIBRARY)
-ENDIF (CXSPARSE)
+endif (CXSPARSE)
# Ensure that the user understands they have disabled all sparse libraries.
-IF (NOT SUITESPARSE AND NOT CXSPARSE AND NOT EIGENSPARSE)
- MESSAGE(" ===============================================================")
- MESSAGE(" Compiling without any sparse library: SuiteSparse, CXSparse ")
- MESSAGE(" & Eigen (Sparse) are all disabled or unavailable. No sparse ")
- MESSAGE(" linear solvers (SPARSE_NORMAL_CHOLESKY & SPARSE_SCHUR)")
- MESSAGE(" will be available when Ceres is used.")
- MESSAGE(" ===============================================================")
-ENDIF(NOT SUITESPARSE AND NOT CXSPARSE AND NOT EIGENSPARSE)
+if (NOT SUITESPARSE AND NOT CXSPARSE AND NOT EIGENSPARSE)
+ message(" ===============================================================")
+ message(" Compiling without any sparse library: SuiteSparse, CXSparse ")
+ message(" & Eigen (Sparse) are all disabled or unavailable. No sparse ")
+ message(" linear solvers (SPARSE_NORMAL_CHOLESKY & SPARSE_SCHUR)")
+ message(" will be available when Ceres is used.")
+ message(" ===============================================================")
+endif(NOT SUITESPARSE AND NOT CXSPARSE AND NOT EIGENSPARSE)
# GFlags.
-IF (GFLAGS)
- HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT(GFLAGS_INCLUDE GFLAGS_INCLUDE_DIR_HINTS)
- HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT(GFLAGS_LIB GFLAGS_LIBRARY_DIR_HINTS)
+if (GFLAGS)
+ handle_legacy_include_dependency_hint(GFLAGS_INCLUDE GFLAGS_INCLUDE_DIR_HINTS)
+ handle_legacy_library_dependency_hint(GFLAGS_LIB GFLAGS_LIBRARY_DIR_HINTS)
# Don't search with REQUIRED as we can continue without gflags.
- FIND_PACKAGE(Gflags)
- IF (GFLAGS_FOUND)
- MESSAGE("-- Found Google Flags header in: ${GFLAGS_INCLUDE_DIRS}, "
+ find_package(Gflags)
+ if (GFLAGS_FOUND)
+ message("-- Found Google Flags header in: ${GFLAGS_INCLUDE_DIRS}, "
"in namespace: ${GFLAGS_NAMESPACE}")
- ELSE (GFLAGS_FOUND)
- MESSAGE("-- Did not find Google Flags (gflags), Building without gflags "
+ else (GFLAGS_FOUND)
+ message("-- Did not find Google Flags (gflags), Building without gflags "
"- no tests or tools will be built!")
- UPDATE_CACHE_VARIABLE(GFLAGS OFF)
- ENDIF (GFLAGS_FOUND)
-ELSE (GFLAGS)
- MESSAGE("-- Google Flags disabled; no tests or tools will be built!")
+ update_cache_variable(GFLAGS OFF)
+ endif (GFLAGS_FOUND)
+else (GFLAGS)
+ message("-- Google Flags disabled; no tests or tools will be built!")
# Mark as advanced (remove from default GUI view) the gflags search
# variables in case user enabled GFLAGS, FindGflags did not find it, so
# made search variables visible in GUI for user to set, but then user disables
# GFLAGS instead of setting them.
- MARK_AS_ADVANCED(FORCE GFLAGS_INCLUDE_DIR
+ mark_as_advanced(FORCE GFLAGS_INCLUDE_DIR
GFLAGS_LIBRARY
GFLAGS_NAMESPACE)
-ENDIF (GFLAGS)
+endif (GFLAGS)
# MiniGLog.
-IF (MINIGLOG)
- MESSAGE("-- Compiling minimal glog substitute into Ceres.")
- SET(GLOG_INCLUDE_DIRS internal/ceres/miniglog)
- MESSAGE("-- Using minimal glog substitute (include): ${GLOG_INCLUDE_DIRS}")
+if (MINIGLOG)
+ message("-- Compiling minimal glog substitute into Ceres.")
+ set(GLOG_INCLUDE_DIRS internal/ceres/miniglog)
+ message("-- Using minimal glog substitute (include): ${GLOG_INCLUDE_DIRS}")
# Mark as advanced (remove from default GUI view) the glog search
# variables in case user disables MINIGLOG, FindGlog did not find it, so
# made search variables visible in GUI for user to set, but then user enables
# MINIGLOG instead of setting them.
- MARK_AS_ADVANCED(FORCE GLOG_INCLUDE_DIR
+ mark_as_advanced(FORCE GLOG_INCLUDE_DIR
GLOG_LIBRARY)
-ELSE (MINIGLOG)
- HANDLE_LEGACY_INCLUDE_DEPENDENCY_HINT(GLOG_INCLUDE GLOG_INCLUDE_DIR_HINTS)
- HANDLE_LEGACY_LIBRARY_DEPENDENCY_HINT(GLOG_LIB GLOG_LIBRARY_DIR_HINTS)
+else (MINIGLOG)
+ handle_legacy_include_dependency_hint(GLOG_INCLUDE GLOG_INCLUDE_DIR_HINTS)
+ handle_legacy_library_dependency_hint(GLOG_LIB GLOG_LIBRARY_DIR_HINTS)
# Don't search with REQUIRED so that configuration continues if not found and
# we can output an error messages explaining MINIGLOG option.
- FIND_PACKAGE(Glog)
- IF (GLOG_FOUND)
- MESSAGE("-- Found Google Log header in: ${GLOG_INCLUDE_DIRS}")
- ELSE (GLOG_FOUND)
- MESSAGE(FATAL_ERROR "Can't find Google Log. Please set GLOG_INCLUDE_DIR & "
+ find_package(Glog)
+ if (GLOG_FOUND)
+ message("-- Found Google Log header in: ${GLOG_INCLUDE_DIRS}")
+ else (GLOG_FOUND)
+ message(FATAL_ERROR "Can't find Google Log. Please set GLOG_INCLUDE_DIR & "
"GLOG_LIBRARY or enable MINIGLOG option to use minimal glog "
"implementation.")
- ENDIF (GLOG_FOUND)
-ENDIF (MINIGLOG)
+ endif (GLOG_FOUND)
+endif (MINIGLOG)
-IF (NOT SCHUR_SPECIALIZATIONS)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_RESTRICT_SCHUR_SPECIALIZATION)
- MESSAGE("-- Disabling Schur specializations (faster compiles)")
-ENDIF (NOT SCHUR_SPECIALIZATIONS)
+if (NOT SCHUR_SPECIALIZATIONS)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_RESTRICT_SCHUR_SPECIALIZATION)
+ message("-- Disabling Schur specializations (faster compiles)")
+endif (NOT SCHUR_SPECIALIZATIONS)
-IF (NOT CUSTOM_BLAS)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_CUSTOM_BLAS)
- MESSAGE("-- Disabling custom blas")
-ENDIF (NOT CUSTOM_BLAS)
+if (NOT CUSTOM_BLAS)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_CUSTOM_BLAS)
+ message("-- Disabling custom blas")
+endif (NOT CUSTOM_BLAS)
-IF (OPENMP)
+if (OPENMP)
# Clang does not (yet) support OpenMP.
- IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- UPDATE_CACHE_VARIABLE(OPENMP OFF)
- MESSAGE("-- Compiler is Clang, disabling OpenMP.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
- ELSE (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ update_cache_variable(OPENMP OFF)
+ message("-- Compiler is Clang, disabling OpenMP.")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
+ else (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Find quietly s/t as we can continue without OpenMP if it is not found.
- FIND_PACKAGE(OpenMP QUIET)
- IF (OPENMP_FOUND)
- MESSAGE("-- Building with OpenMP.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
- IF (UNIX)
+ find_package(OpenMP QUIET)
+ if (OPENMP_FOUND)
+ message("-- Building with OpenMP.")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_USE_OPENMP)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+ if (UNIX)
# At least on Linux, we need pthreads to be enabled for mutex to
# compile. This may not work on Windows or Android.
- FIND_PACKAGE(Threads REQUIRED)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
- ENDIF (UNIX)
- ELSE (OPENMP_FOUND)
- MESSAGE("-- Failed to find OpenMP, disabling.")
- UPDATE_CACHE_VARIABLE(OPENMP OFF)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
- ENDIF (OPENMP_FOUND)
- ENDIF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-ELSE (OPENMP)
- MESSAGE("-- Building without OpenMP (disabling multithreading).")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
-ENDIF (OPENMP)
+ find_package(Threads REQUIRED)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_PTHREAD)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_HAVE_RWLOCK)
+ endif (UNIX)
+ else (OPENMP_FOUND)
+ message("-- Failed to find OpenMP, disabling.")
+ update_cache_variable(OPENMP OFF)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
+ endif (OPENMP_FOUND)
+ endif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+else (OPENMP)
+ message("-- Building without OpenMP (disabling multithreading).")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_THREADS)
+endif (OPENMP)
-INCLUDE(CheckCXXCompilerFlag)
-CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_HAS_CXX11_FLAG)
-IF (CXX11 AND COMPILER_HAS_CXX11_FLAG)
+include(CheckCXXCompilerFlag)
+check_cxx_compiler_flag("-std=c++11" COMPILER_HAS_CXX11_FLAG)
+if (CXX11 AND COMPILER_HAS_CXX11_FLAG)
# Update CMAKE_REQUIRED_FLAGS used by CheckCXXSourceCompiles to include
# -std=c++11 s/t we will detect the C++11 versions of unordered_map &
# shared_ptr if they exist.
- SET(CMAKE_REQUIRED_FLAGS -std=c++11)
-ENDIF (CXX11 AND COMPILER_HAS_CXX11_FLAG)
+ set(CMAKE_REQUIRED_FLAGS -std=c++11)
+endif (CXX11 AND COMPILER_HAS_CXX11_FLAG)
-INCLUDE(FindUnorderedMap)
-FIND_UNORDERED_MAP()
-IF (UNORDERED_MAP_FOUND)
- IF (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP)
- ENDIF(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- IF (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
- ENDIF(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- IF (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_UNORDERED_MAP)
- ENDIF(HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
-ELSE (UNORDERED_MAP_FOUND)
- MESSAGE("-- Replacing unordered_map/set with map/set (warning: slower!), "
+include(FindUnorderedMap)
+find_unordered_map()
+if (UNORDERED_MAP_FOUND)
+ if (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP)
+ endif(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
+ if (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ endif(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ if (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_TR1_UNORDERED_MAP)
+ endif(HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
+else (UNORDERED_MAP_FOUND)
+ message("-- Replacing unordered_map/set with map/set (warning: slower!), "
"try enabling CXX11 option if you expect C++11 to be available.")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_NO_UNORDERED_MAP)
-ENDIF()
+ list(APPEND CERES_COMPILE_OPTIONS CERES_NO_UNORDERED_MAP)
+endif()
-INCLUDE(FindSharedPtr)
-FIND_SHARED_PTR()
-IF (SHARED_PTR_FOUND)
- IF (SHARED_PTR_TR1_MEMORY_HEADER)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_MEMORY_HEADER)
- ENDIF (SHARED_PTR_TR1_MEMORY_HEADER)
- IF (SHARED_PTR_TR1_NAMESPACE)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_TR1_SHARED_PTR)
- ENDIF (SHARED_PTR_TR1_NAMESPACE)
-ELSE (SHARED_PTR_FOUND)
- MESSAGE(FATAL_ERROR "Unable to find shared_ptr, try enabling CXX11 option "
+include(FindSharedPtr)
+find_shared_ptr()
+if (SHARED_PTR_FOUND)
+ if (SHARED_PTR_TR1_MEMORY_HEADER)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_TR1_MEMORY_HEADER)
+ endif (SHARED_PTR_TR1_MEMORY_HEADER)
+ if (SHARED_PTR_TR1_NAMESPACE)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_TR1_SHARED_PTR)
+ endif (SHARED_PTR_TR1_NAMESPACE)
+else (SHARED_PTR_FOUND)
+ message(FATAL_ERROR "Unable to find shared_ptr, try enabling CXX11 option "
"if you expect C++11 to be available.")
-ENDIF (SHARED_PTR_FOUND)
+endif (SHARED_PTR_FOUND)
# To ensure that CXX11 accurately reflects whether we are using C++11,
# check if it is required given where the potentially C++11 features Ceres
# uses were found, and disable it if C++11 is not being used.
-IF (CXX11)
- IF (NOT HAVE_SHARED_PTR_IN_STD_NAMESPACE AND
+if (CXX11)
+ if (NOT HAVE_SHARED_PTR_IN_STD_NAMESPACE AND
NOT HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- MESSAGE("-- Failed to find C++11 components in C++11 locations & "
+ message("-- Failed to find C++11 components in C++11 locations & "
"namespaces, disabling CXX11.")
- UPDATE_CACHE_VARIABLE(CXX11 OFF)
- ELSE()
- MESSAGE(" ==============================================================")
- MESSAGE(" Compiling Ceres using C++11. This will result in a version ")
- MESSAGE(" of Ceres that will require the use of C++11 in client code.")
- MESSAGE(" ==============================================================")
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_USE_CXX11)
- IF (COMPILER_HAS_CXX11_FLAG)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- ENDIF()
- ENDIF()
-ENDIF(CXX11)
+ update_cache_variable(CXX11 OFF)
+ else()
+ message(" ==============================================================")
+ message(" Compiling Ceres using C++11. This will result in a version ")
+ message(" of Ceres that will require the use of C++11 in client code.")
+ message(" ==============================================================")
+ list(APPEND CERES_COMPILE_OPTIONS CERES_USE_CXX11)
+ if (COMPILER_HAS_CXX11_FLAG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ endif()
+ endif()
+endif(CXX11)
-INCLUDE_DIRECTORIES(
+include_directories(
include
internal
internal/ceres
@@ -577,200 +577,200 @@
# Note that this is *not* propagated to clients, ie CERES_INCLUDE_DIRS
# used by clients after find_package(Ceres) does not identify Eigen as
# as system headers.
-INCLUDE_DIRECTORIES(SYSTEM ${EIGEN_INCLUDE_DIRS})
+include_directories(SYSTEM ${EIGEN_INCLUDE_DIRS})
-IF (SUITESPARSE)
- INCLUDE_DIRECTORIES(${SUITESPARSE_INCLUDE_DIRS})
-ENDIF (SUITESPARSE)
+if (SUITESPARSE)
+ include_directories(${SUITESPARSE_INCLUDE_DIRS})
+endif (SUITESPARSE)
-IF (CXSPARSE)
- INCLUDE_DIRECTORIES(${CXSPARSE_INCLUDE_DIRS})
-ENDIF (CXSPARSE)
+if (CXSPARSE)
+ include_directories(${CXSPARSE_INCLUDE_DIRS})
+endif (CXSPARSE)
-IF (GFLAGS)
- INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE_DIRS})
-ENDIF (GFLAGS)
+if (GFLAGS)
+ include_directories(${GFLAGS_INCLUDE_DIRS})
+endif (GFLAGS)
-IF (BUILD_SHARED_LIBS)
- MESSAGE("-- Building Ceres as a shared library.")
+if (BUILD_SHARED_LIBS)
+ message("-- Building Ceres as a shared library.")
# The CERES_BUILDING_SHARED_LIBRARY compile definition is NOT stored in
# CERES_COMPILE_OPTIONS as it must only be defined when Ceres is compiled
# not when it is used as it controls the CERES_EXPORT macro which provides
# dllimport/export support in MSVC.
- ADD_DEFINITIONS(-DCERES_BUILDING_SHARED_LIBRARY)
- LIST(APPEND CERES_COMPILE_OPTIONS CERES_USING_SHARED_LIBRARY)
-ELSE (BUILD_SHARED_LIBS)
- MESSAGE("-- Building Ceres as a static library.")
-ENDIF (BUILD_SHARED_LIBS)
+ add_definitions(-DCERES_BUILDING_SHARED_LIBRARY)
+ list(APPEND CERES_COMPILE_OPTIONS CERES_USING_SHARED_LIBRARY)
+else (BUILD_SHARED_LIBS)
+ message("-- Building Ceres as a static library.")
+endif (BUILD_SHARED_LIBS)
# Change the default build type from Debug to Release, while still
# supporting overriding the build type.
#
# The CACHE STRING logic here and elsewhere is needed to force CMake
# to pay attention to the value of these variables.
-IF (NOT CMAKE_BUILD_TYPE)
- MESSAGE("-- No build type specified; defaulting to CMAKE_BUILD_TYPE=Release.")
- SET(CMAKE_BUILD_TYPE Release CACHE STRING
+if (NOT CMAKE_BUILD_TYPE)
+ message("-- No build type specified; defaulting to CMAKE_BUILD_TYPE=Release.")
+ set(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
FORCE)
-ELSE (NOT CMAKE_BUILD_TYPE)
- IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
- MESSAGE("\n=================================================================================")
- MESSAGE("\n-- Build type: Debug. Performance will be terrible!")
- MESSAGE("-- Add -DCMAKE_BUILD_TYPE=Release to the CMake command line to get an optimized build.")
- MESSAGE("\n=================================================================================")
- ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug")
-ENDIF (NOT CMAKE_BUILD_TYPE)
+else (NOT CMAKE_BUILD_TYPE)
+ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+ message("\n=================================================================================")
+ message("\n-- Build type: Debug. Performance will be terrible!")
+ message("-- Add -DCMAKE_BUILD_TYPE=Release to the CMake command line to get an optimized build.")
+ message("\n=================================================================================")
+ endif (CMAKE_BUILD_TYPE STREQUAL "Debug")
+endif (NOT CMAKE_BUILD_TYPE)
# Set the default Ceres flags to an empty string.
-SET (CERES_CXX_FLAGS)
+set (CERES_CXX_FLAGS)
-IF (CMAKE_BUILD_TYPE STREQUAL "Release")
- IF (CMAKE_COMPILER_IS_GNUCXX)
+if (CMAKE_BUILD_TYPE STREQUAL "Release")
+ if (CMAKE_COMPILER_IS_GNUCXX)
# Linux
- IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
- IF (NOT GCC_VERSION VERSION_LESS 4.2)
- SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -march=native -mtune=native")
- ENDIF (NOT GCC_VERSION VERSION_LESS 4.2)
- ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ if (NOT GCC_VERSION VERSION_LESS 4.2)
+ set (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -march=native -mtune=native")
+ endif (NOT GCC_VERSION VERSION_LESS 4.2)
+ endif (CMAKE_SYSTEM_NAME MATCHES "Linux")
# Mac OS X
- IF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -msse3")
+ if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ set (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -msse3")
# Use of -fast only applicable for Apple's GCC
# Assume this is being used if GCC version < 4.3 on OSX
- EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER}
+ execute_process(COMMAND ${CMAKE_C_COMPILER}
ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
OUTPUT_VARIABLE GCC_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
- IF (GCC_VERSION VERSION_LESS 4.3)
- SET (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -fast")
- ENDIF (GCC_VERSION VERSION_LESS 4.3)
- ENDIF (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- ENDIF (CMAKE_COMPILER_IS_GNUCXX)
- IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ if (GCC_VERSION VERSION_LESS 4.3)
+ set (CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -fast")
+ endif (GCC_VERSION VERSION_LESS 4.3)
+ endif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ endif (CMAKE_COMPILER_IS_GNUCXX)
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Use of -flto requires use of gold linker & LLVM-gold plugin, which might
# well not be present / in use and without which files will compile, but
# not link ('file not recognized') so explicitly check for support
- INCLUDE(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG("-flto" HAVE_LTO_SUPPORT)
- IF (HAVE_LTO_SUPPORT)
- MESSAGE(STATUS "Enabling link-time optimization (-flto)")
- SET(CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -flto")
- ELSE ()
- MESSAGE(STATUS "Compiler/linker does not support link-time optimization (-flto), disabling.")
- ENDIF (HAVE_LTO_SUPPORT)
- ENDIF ()
-ENDIF (CMAKE_BUILD_TYPE STREQUAL "Release")
+ include(CheckCXXCompilerFlag)
+ check_cxx_compiler_flag("-flto" HAVE_LTO_SUPPORT)
+ if (HAVE_LTO_SUPPORT)
+ message(STATUS "Enabling link-time optimization (-flto)")
+ set(CERES_CXX_FLAGS "${CERES_CXX_FLAGS} -flto")
+ else ()
+ message(STATUS "Compiler/linker does not support link-time optimization (-flto), disabling.")
+ endif (HAVE_LTO_SUPPORT)
+ endif ()
+endif (CMAKE_BUILD_TYPE STREQUAL "Release")
-SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CERES_CXX_FLAGS}")
+set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CERES_CXX_FLAGS}")
-IF (MINGW)
+if (MINGW)
# MinGW produces code that segfaults when performing matrix multiplications
# in Eigen when compiled with -O3 (see [1]), as such force the use of -O2
# which works.
#
# [1] http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556
- MESSAGE("-- MinGW detected, forcing -O2 instead of -O3 in Release for Eigen due "
+ message("-- MinGW detected, forcing -O2 instead of -O3 in Release for Eigen due "
"to a MinGW bug: http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556")
- STRING(REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
- UPDATE_CACHE_VARIABLE(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
-ENDIF (MINGW)
+ string(REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+ update_cache_variable(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+endif (MINGW)
# After the tweaks for the compile settings, disable some warnings on MSVC.
-IF (MSVC)
+if (MSVC)
# Disable signed/unsigned int conversion warnings.
- ADD_DEFINITIONS("/wd4018")
+ add_definitions("/wd4018")
# Disable warning about using struct/class for the same symobl.
- ADD_DEFINITIONS("/wd4099")
+ add_definitions("/wd4099")
# Disable warning about the insecurity of using "std::copy".
- ADD_DEFINITIONS("/wd4996")
+ add_definitions("/wd4996")
# Disable performance warning about int-to-bool conversion.
- ADD_DEFINITIONS("/wd4800")
+ add_definitions("/wd4800")
# Disable performance warning about fopen insecurity.
- ADD_DEFINITIONS("/wd4996")
+ add_definitions("/wd4996")
# Disable warning about int64 to int32 conversion. Disabling
# this warning may not be correct; needs investigation.
# TODO(keir): Investigate these warnings in more detail.
- ADD_DEFINITIONS("/wd4244")
+ add_definitions("/wd4244")
# It's not possible to use STL types in DLL interfaces in a portable and
# reliable way. However, that's what happens with Google Log and Google Flags
# on Windows. MSVC gets upset about this and throws warnings that we can't do
# much about. The real solution is to link static versions of Google Log and
# Google Test, but that seems tricky on Windows. So, disable the warning.
- ADD_DEFINITIONS("/wd4251")
+ add_definitions("/wd4251")
# Google Flags doesn't have their DLL import/export stuff set up correctly,
# which results in linker warnings. This is irrelevant for Ceres, so ignore
# the warnings.
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4049")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4049")
# Update the C/CXX flags for MSVC to use either the static or shared
# C-Run Time (CRT) library based on the user option: MSVC_USE_STATIC_CRT.
- LIST(APPEND C_CXX_FLAGS
+ list(APPEND C_CXX_FLAGS
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELWITHDEBINFO)
- FOREACH(FLAG_VAR ${C_CXX_FLAGS})
- IF (MSVC_USE_STATIC_CRT)
+ foreach(FLAG_VAR ${C_CXX_FLAGS})
+ if (MSVC_USE_STATIC_CRT)
# Use static CRT.
- IF (${FLAG_VAR} MATCHES "/MD")
- STRING(REGEX REPLACE "/MD" "/MT" ${FLAG_VAR} "${${FLAG_VAR}}")
- ENDIF (${FLAG_VAR} MATCHES "/MD")
- ELSE (MSVC_USE_STATIC_CRT)
+ if (${FLAG_VAR} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${FLAG_VAR} "${${FLAG_VAR}}")
+ endif (${FLAG_VAR} MATCHES "/MD")
+ else (MSVC_USE_STATIC_CRT)
# Use shared, not static, CRT.
- IF (${FLAG_VAR} MATCHES "/MT")
- STRING(REGEX REPLACE "/MT" "/MD" ${FLAG_VAR} "${${FLAG_VAR}}")
- ENDIF (${FLAG_VAR} MATCHES "/MT")
- ENDIF (MSVC_USE_STATIC_CRT)
- ENDFOREACH()
+ if (${FLAG_VAR} MATCHES "/MT")
+ string(REGEX REPLACE "/MT" "/MD" ${FLAG_VAR} "${${FLAG_VAR}}")
+ endif (${FLAG_VAR} MATCHES "/MT")
+ endif (MSVC_USE_STATIC_CRT)
+ endforeach()
# Tuple sizes of 10 are used by Gtest.
- ADD_DEFINITIONS("-D_VARIADIC_MAX=10")
-ENDIF (MSVC)
+ add_definitions("-D_VARIADIC_MAX=10")
+endif (MSVC)
-IF (UNIX)
+if (UNIX)
# GCC is not strict enough by default, so enable most of the warnings.
- SET(CMAKE_CXX_FLAGS
+ set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Werror=all -Werror=extra -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-missing-field-initializers")
-ENDIF (UNIX)
+endif (UNIX)
# Use a larger inlining threshold for Clang, since it hobbles Eigen,
# resulting in an unreasonably slow version of the blas routines. The
# -Qunused-arguments is needed because CMake passes the inline
# threshold to the linker and clang complains about it and dies.
-IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- SET(CMAKE_CXX_FLAGS
+if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Qunused-arguments -mllvm -inline-threshold=600")
# Older versions of Clang (<= 2.9) do not support the 'return-type-c-linkage'
# option, so check for its presence before adding it to the default flags set.
- INCLUDE(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG("-Wno-return-type-c-linkage"
+ include(CheckCXXCompilerFlag)
+ check_cxx_compiler_flag("-Wno-return-type-c-linkage"
HAVE_RETURN_TYPE_C_LINKAGE)
- IF (HAVE_RETURN_TYPE_C_LINKAGE)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type-c-linkage")
- ENDIF(HAVE_RETURN_TYPE_C_LINKAGE)
-ENDIF ()
+ if (HAVE_RETURN_TYPE_C_LINKAGE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type-c-linkage")
+ endif(HAVE_RETURN_TYPE_C_LINKAGE)
+endif ()
# Xcode 4.5.x used Clang 4.1 (Apple version), this has a bug that prevents
# compilation of Ceres.
-IF (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER}
+if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ execute_process(COMMAND ${CMAKE_CXX_COMPILER}
ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
OUTPUT_VARIABLE CLANG_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Use version > 4.0 & < 4.2 to catch all 4.1(.x) versions.
- IF (CLANG_VERSION VERSION_GREATER 4.0 AND
+ if (CLANG_VERSION VERSION_GREATER 4.0 AND
CLANG_VERSION VERSION_LESS 4.2)
- MESSAGE(FATAL_ERROR "You are attempting to build Ceres on OS X using Xcode "
+ message(FATAL_ERROR "You are attempting to build Ceres on OS X using Xcode "
"4.5.x (Clang version: ${CLANG_VERSION}). This version of Clang has a "
"bug that prevents compilation of Ceres, please update to "
"Xcode >= 4.6.3.")
- ENDIF (CLANG_VERSION VERSION_GREATER 4.0 AND
+ endif (CLANG_VERSION VERSION_GREATER 4.0 AND
CLANG_VERSION VERSION_LESS 4.2)
-ENDIF (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+endif (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Configure the Ceres config.h compile options header using the current
# compile options and put the configured header into the Ceres build
@@ -778,57 +778,57 @@
# the configured config.h is placed is important, because Ceres will be
# built against this configured header, it needs to have the same relative
# include path as it would if it were in the source tree (or installed).
-LIST(REMOVE_DUPLICATES CERES_COMPILE_OPTIONS)
-INCLUDE(CreateCeresConfig)
-CREATE_CERES_CONFIG("${CERES_COMPILE_OPTIONS}"
+list(REMOVE_DUPLICATES CERES_COMPILE_OPTIONS)
+include(CreateCeresConfig)
+create_ceres_config("${CERES_COMPILE_OPTIONS}"
${CMAKE_BINARY_DIR}/config/ceres/internal)
# Force the location containing the configured config.h to the front of the
# include_directories list (by default it is appended to the back) to ensure
# that if the user has an installed version of Ceres in the same location as one
# of the dependencies (e.g. /usr/local) that we find the config.h we just
# configured, not the (older) installed config.h.
-INCLUDE_DIRECTORIES(BEFORE ${CMAKE_BINARY_DIR}/config)
+include_directories(BEFORE ${CMAKE_BINARY_DIR}/config)
-ADD_SUBDIRECTORY(internal/ceres)
+add_subdirectory(internal/ceres)
-IF (BUILD_DOCUMENTATION)
- FIND_PACKAGE(Sphinx QUIET)
- IF (NOT SPHINX_FOUND)
- MESSAGE("-- Failed to find Sphinx, disabling build of documentation.")
- UPDATE_CACHE_VARIABLE(BUILD_DOCUMENTATION OFF)
- ELSE()
+if (BUILD_DOCUMENTATION)
+ find_package(Sphinx QUIET)
+ if (NOT SPHINX_FOUND)
+ message("-- Failed to find Sphinx, disabling build of documentation.")
+ update_cache_variable(BUILD_DOCUMENTATION OFF)
+ else()
# Generate the User's Guide (html).
# The corresponding target is ceres_docs, but is included in ALL.
- MESSAGE("-- Build the HTML documentation.")
- ADD_SUBDIRECTORY(docs)
- ENDIF()
-ENDIF (BUILD_DOCUMENTATION)
+ message("-- Build the HTML documentation.")
+ add_subdirectory(docs)
+ endif()
+endif (BUILD_DOCUMENTATION)
-IF (BUILD_EXAMPLES)
- MESSAGE("-- Build the examples.")
- ADD_SUBDIRECTORY(examples)
-ELSE (BUILD_EXAMPLES)
- MESSAGE("-- Do not build any example.")
-ENDIF (BUILD_EXAMPLES)
+if (BUILD_EXAMPLES)
+ message("-- Build the examples.")
+ add_subdirectory(examples)
+else (BUILD_EXAMPLES)
+ message("-- Do not build any example.")
+endif (BUILD_EXAMPLES)
# Setup installation of Ceres public headers.
-FILE(GLOB CERES_HDRS ${CMAKE_SOURCE_DIR}/include/ceres/*.h)
-INSTALL(FILES ${CERES_HDRS} DESTINATION include/ceres)
+file(GLOB CERES_HDRS ${CMAKE_SOURCE_DIR}/include/ceres/*.h)
+install(FILES ${CERES_HDRS} DESTINATION include/ceres)
-FILE(GLOB CERES_PUBLIC_INTERNAL_HDRS ${CMAKE_SOURCE_DIR}/include/ceres/internal/*.h)
-INSTALL(FILES ${CERES_PUBLIC_INTERNAL_HDRS} DESTINATION include/ceres/internal)
+file(GLOB CERES_PUBLIC_INTERNAL_HDRS ${CMAKE_SOURCE_DIR}/include/ceres/internal/*.h)
+install(FILES ${CERES_PUBLIC_INTERNAL_HDRS} DESTINATION include/ceres/internal)
# Also setup installation of Ceres config.h configured with the current
# build options into the installed headers directory.
-INSTALL(FILES ${CMAKE_BINARY_DIR}/config/ceres/internal/config.h
+install(FILES ${CMAKE_BINARY_DIR}/config/ceres/internal/config.h
DESTINATION include/ceres/internal)
-IF (MINIGLOG)
+if (MINIGLOG)
# Install miniglog header if being used as logging #includes appear in
# installed public Ceres headers.
- INSTALL(FILES ${CMAKE_SOURCE_DIR}/internal/ceres/miniglog/glog/logging.h
+ install(FILES ${CMAKE_SOURCE_DIR}/internal/ceres/miniglog/glog/logging.h
DESTINATION include/ceres/internal/miniglog/glog)
-ENDIF (MINIGLOG)
+endif (MINIGLOG)
# Ceres supports two mechanisms by which it can be detected & imported into
# client code which uses CMake via find_package(Ceres):
@@ -853,31 +853,31 @@
# Create a CeresConfigVersion.cmake file containing the version information,
# used by both export() & install().
-CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/CeresConfigVersion.cmake.in"
+configure_file("${CMAKE_SOURCE_DIR}/cmake/CeresConfigVersion.cmake.in"
"${CMAKE_BINARY_DIR}/CeresConfigVersion.cmake" @ONLY)
# Install method #1: Put Ceres in CMAKE_INSTALL_PREFIX: /usr/local or equivalent.
# Set the install path for the installed CeresConfig.cmake configuration file
# relative to CMAKE_INSTALL_PREFIX.
-IF (WIN32)
- SET(RELATIVE_CMAKECONFIG_INSTALL_DIR CMake)
-ELSE ()
- SET(RELATIVE_CMAKECONFIG_INSTALL_DIR share/Ceres)
-ENDIF ()
+if (WIN32)
+ set(RELATIVE_CMAKECONFIG_INSTALL_DIR CMake)
+else ()
+ set(RELATIVE_CMAKECONFIG_INSTALL_DIR share/Ceres)
+endif ()
# This "exports" for installation all targets which have been put into the
# export set "CeresExport". This generates a CeresTargets.cmake file which,
# when read in by a client project as part of find_package(Ceres) creates
# imported library targets for Ceres (with dependency relations) which can be
# used in target_link_libraries() calls in the client project to use Ceres.
-INSTALL(EXPORT CeresExport
+install(EXPORT CeresExport
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR} FILE CeresTargets.cmake)
# Save the relative path from the installed CeresConfig.cmake file to the
# install prefix. We do not save an absolute path in case the installed package
# is subsequently relocated after installation (on Windows).
-FILE(RELATIVE_PATH INSTALL_ROOT_REL_CONFIG_INSTALL_DIR
+file(RELATIVE_PATH INSTALL_ROOT_REL_CONFIG_INSTALL_DIR
${CMAKE_INSTALL_PREFIX}/${RELATIVE_CMAKECONFIG_INSTALL_DIR}
${CMAKE_INSTALL_PREFIX})
@@ -888,27 +888,27 @@
# the exported version, which must be named CeresConfig.cmake in
# CMAKE_BINARY_DIR to be detected. The suffix is removed when
# it is installed.
-SET(SETUP_CERES_CONFIG_FOR_INSTALLATION TRUE)
-CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/CeresConfig.cmake.in"
+set(SETUP_CERES_CONFIG_FOR_INSTALLATION TRUE)
+configure_file("${CMAKE_SOURCE_DIR}/cmake/CeresConfig.cmake.in"
"${CMAKE_BINARY_DIR}/CeresConfig-install.cmake" @ONLY)
# Install the configuration files into the same directory as the autogenerated
# CeresTargets.cmake file. We include the find_package() scripts for libraries
# whose headers are included in the public API of Ceres and should thus be
# present in CERES_INCLUDE_DIRS.
-INSTALL(FILES "${CMAKE_BINARY_DIR}/CeresConfig-install.cmake"
+install(FILES "${CMAKE_BINARY_DIR}/CeresConfig-install.cmake"
RENAME CeresConfig.cmake
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
-INSTALL(FILES "${CMAKE_BINARY_DIR}/CeresConfigVersion.cmake"
+install(FILES "${CMAKE_BINARY_DIR}/CeresConfigVersion.cmake"
"${CMAKE_SOURCE_DIR}/cmake/FindEigen.cmake"
"${CMAKE_SOURCE_DIR}/cmake/FindGlog.cmake"
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
# Create an uninstall target to remove all installed files.
-CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in"
+configure_file("${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in"
"${CMAKE_BINARY_DIR}/cmake/uninstall.cmake"
@ONLY)
-ADD_CUSTOM_TARGET(uninstall
+add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake/uninstall.cmake)
# Install method #2: Put Ceres build into local CMake registry.
@@ -916,23 +916,23 @@
# Optionally export the Ceres build directory into the local CMake package
# registry (~/.cmake/packages on *nix & OS X). This allows the detection &
# use of Ceres without requiring that it be installed.
-IF (EXPORT_BUILD_DIR)
- MESSAGE("-- Export Ceres build directory to local CMake package registry.")
+if (EXPORT_BUILD_DIR)
+ message("-- Export Ceres build directory to local CMake package registry.")
# Save the relative path from the build directory to the source directory.
- FILE(RELATIVE_PATH INSTALL_ROOT_REL_CONFIG_INSTALL_DIR
+ file(RELATIVE_PATH INSTALL_ROOT_REL_CONFIG_INSTALL_DIR
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR})
# Analogously to install(EXPORT ...), export the Ceres target from the build
# directory as a package called Ceres into the local CMake package registry.
- EXPORT(TARGETS ceres FILE ${CMAKE_BINARY_DIR}/CeresTargets.cmake)
- EXPORT(PACKAGE ${CMAKE_PROJECT_NAME})
+ export(TARGETS ceres FILE ${CMAKE_BINARY_DIR}/CeresTargets.cmake)
+ export(PACKAGE ${CMAKE_PROJECT_NAME})
# Configure a CeresConfig.cmake file for the export of the Ceres build
# directory from the template, reflecting the current build options.
- SET(SETUP_CERES_CONFIG_FOR_INSTALLATION FALSE)
- CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/cmake/CeresConfig.cmake.in"
+ set(SETUP_CERES_CONFIG_FOR_INSTALLATION FALSE)
+ configure_file("${CMAKE_SOURCE_DIR}/cmake/CeresConfig.cmake.in"
"${CMAKE_BINARY_DIR}/CeresConfig.cmake" @ONLY)
-ENDIF (EXPORT_BUILD_DIR)
+endif (EXPORT_BUILD_DIR)
diff --git a/cmake/AddGerritCommitHook.cmake b/cmake/AddGerritCommitHook.cmake
index 36da67a..071e84a 100644
--- a/cmake/AddGerritCommitHook.cmake
+++ b/cmake/AddGerritCommitHook.cmake
@@ -30,47 +30,47 @@
# alexs.mac@gmail.com (Alex Stewart)
# Set up the git hook to make Gerrit Change-Id: lines in commit messages.
-FUNCTION(ADD_GERRIT_COMMIT_HOOK)
- UNSET (LOCAL_GIT_DIRECTORY)
- IF (EXISTS ${CMAKE_SOURCE_DIR}/.git)
- IF (IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
+function(ADD_GERRIT_COMMIT_HOOK)
+ unset (LOCAL_GIT_DIRECTORY)
+ if (EXISTS ${CMAKE_SOURCE_DIR}/.git)
+ if (IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
# .git directory can be found on Unix based system, or on Windows with
# Git Bash (shipped with msysgit).
- SET (LOCAL_GIT_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
- ELSE(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
+ set (LOCAL_GIT_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
+ else(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
# .git is a file, this means Ceres is a git submodule of another project
# and our .git file contains the path to the git directory which manages
# Ceres, so we should add the gerrit hook there.
- FILE(READ ${CMAKE_SOURCE_DIR}/.git GIT_SUBMODULE_FILE_CONTENTS)
+ file(READ ${CMAKE_SOURCE_DIR}/.git GIT_SUBMODULE_FILE_CONTENTS)
# Strip any trailing newline characters, s/t we get a valid path.
- STRING(REGEX REPLACE "gitdir:[ ]*([^$].*)[\n].*" "${CMAKE_SOURCE_DIR}/\\1"
+ string(REGEX REPLACE "gitdir:[ ]*([^$].*)[\n].*" "${CMAKE_SOURCE_DIR}/\\1"
GIT_SUBMODULE_GIT_DIRECTORY_PATH "${GIT_SUBMODULE_FILE_CONTENTS}")
- GET_FILENAME_COMPONENT(GIT_SUBMODULE_GIT_DIRECTORY_PATH
+ get_filename_component(GIT_SUBMODULE_GIT_DIRECTORY_PATH
"${GIT_SUBMODULE_GIT_DIRECTORY_PATH}" ABSOLUTE)
- IF (EXISTS ${GIT_SUBMODULE_GIT_DIRECTORY_PATH}
+ if (EXISTS ${GIT_SUBMODULE_GIT_DIRECTORY_PATH}
AND IS_DIRECTORY ${GIT_SUBMODULE_GIT_DIRECTORY_PATH})
- SET(LOCAL_GIT_DIRECTORY "${GIT_SUBMODULE_GIT_DIRECTORY_PATH}")
- ENDIF()
- ENDIF()
- ELSE (EXISTS ${CMAKE_SOURCE_DIR}/.git)
+ set(LOCAL_GIT_DIRECTORY "${GIT_SUBMODULE_GIT_DIRECTORY_PATH}")
+ endif()
+ endif()
+ else (EXISTS ${CMAKE_SOURCE_DIR}/.git)
# TODO(keir) Add proper Windows support.
- ENDIF (EXISTS ${CMAKE_SOURCE_DIR}/.git)
+ endif (EXISTS ${CMAKE_SOURCE_DIR}/.git)
- IF (EXISTS ${LOCAL_GIT_DIRECTORY})
- IF (NOT EXISTS ${LOCAL_GIT_DIRECTORY}/hooks/commit-msg)
- MESSAGE(STATUS "Detected Ceres being used as a git submodule, adding "
+ if (EXISTS ${LOCAL_GIT_DIRECTORY})
+ if (NOT EXISTS ${LOCAL_GIT_DIRECTORY}/hooks/commit-msg)
+ message(STATUS "Detected Ceres being used as a git submodule, adding "
"commit hook for Gerrit to: ${LOCAL_GIT_DIRECTORY}")
# Download the hook only if it is not already present.
- FILE(DOWNLOAD https://ceres-solver-review.googlesource.com/tools/hooks/commit-msg
+ file(DOWNLOAD https://ceres-solver-review.googlesource.com/tools/hooks/commit-msg
${CMAKE_BINARY_DIR}/commit-msg)
# Make the downloaded file executable, since it is not by default.
- FILE(COPY ${CMAKE_BINARY_DIR}/commit-msg
+ file(COPY ${CMAKE_BINARY_DIR}/commit-msg
DESTINATION ${LOCAL_GIT_DIRECTORY}/hooks/
FILE_PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_WRITE GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
- ENDIF (NOT EXISTS ${LOCAL_GIT_DIRECTORY}/hooks/commit-msg)
- ENDIF (EXISTS ${LOCAL_GIT_DIRECTORY})
-ENDFUNCTION()
+ endif (NOT EXISTS ${LOCAL_GIT_DIRECTORY}/hooks/commit-msg)
+ endif (EXISTS ${LOCAL_GIT_DIRECTORY})
+endfunction()
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index 6b89e96..bcda9a7 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -69,213 +69,213 @@
# Called if we failed to find Ceres or any of its required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(CERES_REPORT_NOT_FOUND REASON_MSG)
+macro(CERES_REPORT_NOT_FOUND REASON_MSG)
# FindPackage() only references Ceres_FOUND, and requires it to be
# explicitly set FALSE to denote not found (not merely undefined).
- SET(Ceres_FOUND FALSE)
- SET(CERES_FOUND FALSE)
- UNSET(CERES_INCLUDE_DIRS)
- UNSET(CERES_LIBRARIES)
+ set(Ceres_FOUND FALSE)
+ set(CERES_FOUND FALSE)
+ unset(CERES_INCLUDE_DIRS)
+ unset(CERES_LIBRARIES)
# Reset the CMake module path to its state when this script was called.
- SET(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH})
+ set(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH})
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by
# FindPackage() use the camelcase library name, not uppercase.
- IF (Ceres_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
- ELSE (Ceres_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (Ceres_FIND_QUIETLY)
+ message(STATUS "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
+ else (Ceres_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use SEND_ERROR which emits an error
# that prevents generation, but continues configuration.
- MESSAGE(SEND_ERROR "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
- ENDIF ()
- RETURN()
-ENDMACRO(CERES_REPORT_NOT_FOUND)
+ message(SEND_ERROR "Failed to find Ceres - " ${REASON_MSG} ${ARGN})
+ endif ()
+ return()
+endmacro(CERES_REPORT_NOT_FOUND)
# If Ceres was not installed, then by definition it was exported
# from a build directory.
-SET(CERES_WAS_INSTALLED @SETUP_CERES_CONFIG_FOR_INSTALLATION@)
+set(CERES_WAS_INSTALLED @SETUP_CERES_CONFIG_FOR_INSTALLATION@)
# Record the state of the CMake module path when this script was
# called so that we can ensure that we leave it in the same state on
# exit as it was on entry, but modify it locally.
-SET(CALLERS_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
+set(CALLERS_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
# Get the (current, i.e. installed) directory containing this file.
-GET_FILENAME_COMPONENT(CERES_CURRENT_CONFIG_DIR
+get_filename_component(CERES_CURRENT_CONFIG_DIR
"${CMAKE_CURRENT_LIST_FILE}" PATH)
-IF (CERES_WAS_INSTALLED)
+if (CERES_WAS_INSTALLED)
# Reset CMake module path to the installation directory of this
# script, thus we will use the FindPackage() scripts shipped with
# Ceres to find Ceres' dependencies, even if the user has equivalently
# named FindPackage() scripts in their project.
- SET(CMAKE_MODULE_PATH ${CERES_CURRENT_CONFIG_DIR})
+ set(CMAKE_MODULE_PATH ${CERES_CURRENT_CONFIG_DIR})
# Build the absolute root install directory as a relative path
# (determined when Ceres was configured & built) from the current
# install directory for this this file. This allows for the install
# tree to be relocated, after Ceres was built, outside of CMake.
- GET_FILENAME_COMPONENT(CURRENT_ROOT_INSTALL_DIR
+ get_filename_component(CURRENT_ROOT_INSTALL_DIR
${CERES_CURRENT_CONFIG_DIR}/@INSTALL_ROOT_REL_CONFIG_INSTALL_DIR@
ABSOLUTE)
- IF (NOT EXISTS ${CURRENT_ROOT_INSTALL_DIR})
- CERES_REPORT_NOT_FOUND(
+ if (NOT EXISTS ${CURRENT_ROOT_INSTALL_DIR})
+ ceres_report_not_found(
"Ceres install root: ${CURRENT_ROOT_INSTALL_DIR}, "
"determined from relative path from CeresConfig.cmake install location: "
"${CERES_CURRENT_CONFIG_DIR}, does not exist. Either the install "
"directory was deleted, or the install tree was only partially relocated "
"outside of CMake after Ceres was built.")
- ENDIF (NOT EXISTS ${CURRENT_ROOT_INSTALL_DIR})
+ endif (NOT EXISTS ${CURRENT_ROOT_INSTALL_DIR})
# Set the include directories for Ceres (itself).
- SET(CERES_INCLUDE_DIR "${CURRENT_ROOT_INSTALL_DIR}/include")
- IF (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
- CERES_REPORT_NOT_FOUND(
+ set(CERES_INCLUDE_DIR "${CURRENT_ROOT_INSTALL_DIR}/include")
+ if (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
+ ceres_report_not_found(
"Ceres install root: ${CURRENT_ROOT_INSTALL_DIR}, "
"determined from relative path from CeresConfig.cmake install location: "
"${CERES_CURRENT_CONFIG_DIR}, does not contain Ceres headers. "
"Either the install directory was deleted, or the install tree was only "
"partially relocated outside of CMake after Ceres was built.")
- ENDIF (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
- LIST(APPEND CERES_INCLUDE_DIRS ${CERES_INCLUDE_DIR})
+ endif (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
+ list(APPEND CERES_INCLUDE_DIRS ${CERES_INCLUDE_DIR})
-ELSE(CERES_WAS_INSTALLED)
+else(CERES_WAS_INSTALLED)
# Ceres was exported from the build tree.
- SET(CERES_EXPORTED_BUILD_DIR ${CERES_CURRENT_CONFIG_DIR})
- GET_FILENAME_COMPONENT(CERES_EXPORTED_SOURCE_DIR
+ set(CERES_EXPORTED_BUILD_DIR ${CERES_CURRENT_CONFIG_DIR})
+ get_filename_component(CERES_EXPORTED_SOURCE_DIR
${CERES_EXPORTED_BUILD_DIR}/@INSTALL_ROOT_REL_CONFIG_INSTALL_DIR@
ABSOLUTE)
- IF (NOT EXISTS ${CERES_EXPORTED_SOURCE_DIR})
- CERES_REPORT_NOT_FOUND(
+ if (NOT EXISTS ${CERES_EXPORTED_SOURCE_DIR})
+ ceres_report_not_found(
"Ceres exported source directory: ${CERES_EXPORTED_SOURCE_DIR}, "
"determined from relative path from CeresConfig.cmake exported build "
"directory: ${CERES_EXPORTED_BUILD_DIR} does not exist.")
- ENDIF()
+ endif()
# Reset CMake module path to the cmake directory in the Ceres source
# tree which was exported, thus we will use the FindPackage() scripts shipped
# with Ceres to find Ceres' dependencies, even if the user has equivalently
# named FindPackage() scripts in their project.
- SET(CMAKE_MODULE_PATH ${CERES_EXPORTED_SOURCE_DIR}/cmake)
+ set(CMAKE_MODULE_PATH ${CERES_EXPORTED_SOURCE_DIR}/cmake)
# Set the include directories for Ceres (itself).
- SET(CERES_INCLUDE_DIR "${CERES_EXPORTED_SOURCE_DIR}/include")
- IF (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
- CERES_REPORT_NOT_FOUND(
+ set(CERES_INCLUDE_DIR "${CERES_EXPORTED_SOURCE_DIR}/include")
+ if (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
+ ceres_report_not_found(
"Ceres exported source directory: ${CERES_EXPORTED_SOURCE_DIR}, "
"determined from relative path from CeresConfig.cmake exported build "
"directory: ${CERES_EXPORTED_BUILD_DIR}, does not contain Ceres headers.")
- ENDIF (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
- LIST(APPEND CERES_INCLUDE_DIRS ${CERES_INCLUDE_DIR})
+ endif (NOT EXISTS ${CERES_INCLUDE_DIR}/ceres/ceres.h)
+ list(APPEND CERES_INCLUDE_DIRS ${CERES_INCLUDE_DIR})
# Append the path to the configured config.h in the exported build directory
# to the Ceres include directories.
- SET(CERES_CONFIG_FILE
+ set(CERES_CONFIG_FILE
${CERES_EXPORTED_BUILD_DIR}/config/ceres/internal/config.h)
- IF (NOT EXISTS ${CERES_CONFIG_FILE})
- CERES_REPORT_NOT_FOUND(
+ if (NOT EXISTS ${CERES_CONFIG_FILE})
+ ceres_report_not_found(
"Ceres exported build directory: ${CERES_EXPORTED_BUILD_DIR}, "
"does not contain required configured Ceres config.h, it is not here: "
"${CERES_CONFIG_FILE}.")
- ENDIF (NOT EXISTS ${CERES_CONFIG_FILE})
- LIST(APPEND CERES_INCLUDE_DIRS ${CERES_EXPORTED_BUILD_DIR}/config)
-ENDIF(CERES_WAS_INSTALLED)
+ endif (NOT EXISTS ${CERES_CONFIG_FILE})
+ list(APPEND CERES_INCLUDE_DIRS ${CERES_EXPORTED_BUILD_DIR}/config)
+endif(CERES_WAS_INSTALLED)
# Set the version.
-SET(CERES_VERSION @CERES_VERSION@ )
+set(CERES_VERSION @CERES_VERSION@ )
# Eigen.
# Flag set during configuration and build of Ceres.
-SET(CERES_EIGEN_VERSION @EIGEN_VERSION@)
+set(CERES_EIGEN_VERSION @EIGEN_VERSION@)
# Append the locations of Eigen when Ceres was built to the search path hints.
-LIST(APPEND EIGEN_INCLUDE_DIR_HINTS @EIGEN_INCLUDE_DIR@)
+list(APPEND EIGEN_INCLUDE_DIR_HINTS @EIGEN_INCLUDE_DIR@)
# Search quietly to control the timing of the error message if not found. The
# search should be for an exact match, but for usability reasons do a soft
# match and reject with an explanation below.
-FIND_PACKAGE(Eigen ${CERES_EIGEN_VERSION} QUIET)
-IF (EIGEN_FOUND)
- IF (NOT EIGEN_VERSION VERSION_EQUAL CERES_EIGEN_VERSION)
+find_package(Eigen ${CERES_EIGEN_VERSION} QUIET)
+if (EIGEN_FOUND)
+ if (NOT EIGEN_VERSION VERSION_EQUAL CERES_EIGEN_VERSION)
# CMake's VERSION check in FIND_PACKAGE() will accept any version >= the
# specified version. However, only version = is supported. Improve
# usability by explaining why we don't accept non-exact version matching.
- CERES_REPORT_NOT_FOUND("Found Eigen dependency, but the version of Eigen "
+ ceres_report_not_found("Found Eigen dependency, but the version of Eigen "
"found (${EIGEN_VERSION}) does not exactly match the version of Eigen "
"Ceres was compiled with (${CERES_EIGEN_VERSION}). This can cause subtle "
"bugs by triggering violations of the One Definition Rule. See the "
"Wikipedia article http://en.wikipedia.org/wiki/One_Definition_Rule "
"for more details")
- ENDIF ()
- MESSAGE(STATUS "Found required Ceres dependency: "
+ endif ()
+ message(STATUS "Found required Ceres dependency: "
"Eigen version ${CERES_EIGEN_VERSION} in ${EIGEN_INCLUDE_DIRS}")
-ELSE (EIGEN_FOUND)
- CERES_REPORT_NOT_FOUND("Missing required Ceres "
+else (EIGEN_FOUND)
+ ceres_report_not_found("Missing required Ceres "
"dependency: Eigen version ${CERES_EIGEN_VERSION}, please set "
"EIGEN_INCLUDE_DIR.")
-ENDIF (EIGEN_FOUND)
-LIST(APPEND CERES_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS})
+endif (EIGEN_FOUND)
+list(APPEND CERES_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS})
# Glog.
# Flag set during configuration and build of Ceres.
-SET(CERES_USES_MINIGLOG @MINIGLOG@)
-IF (CERES_USES_MINIGLOG)
- SET(MINIGLOG_INCLUDE_DIR ${CERES_INCLUDE_DIR}/ceres/internal/miniglog)
- IF (NOT EXISTS ${MINIGLOG_INCLUDE_DIR})
- CERES_REPORT_NOT_FOUND(
+set(CERES_USES_MINIGLOG @MINIGLOG@)
+if (CERES_USES_MINIGLOG)
+ set(MINIGLOG_INCLUDE_DIR ${CERES_INCLUDE_DIR}/ceres/internal/miniglog)
+ if (NOT EXISTS ${MINIGLOG_INCLUDE_DIR})
+ ceres_report_not_found(
"Ceres include directory: "
"${CERES_INCLUDE_DIR} does not include miniglog, but Ceres was "
"compiled with MINIGLOG enabled (in place of Glog).")
- ENDIF (NOT EXISTS ${MINIGLOG_INCLUDE_DIR})
- LIST(APPEND CERES_INCLUDE_DIRS ${MINIGLOG_INCLUDE_DIR})
+ endif (NOT EXISTS ${MINIGLOG_INCLUDE_DIR})
+ list(APPEND CERES_INCLUDE_DIRS ${MINIGLOG_INCLUDE_DIR})
# Output message at standard log level (not the lower STATUS) so that
# the message is output in GUI during configuration to warn user.
- MESSAGE("-- Found Ceres compiled with miniglog substitute "
+ message("-- Found Ceres compiled with miniglog substitute "
"for glog, beware this will likely cause problems if glog is later linked.")
-ELSE (CERES_USES_MINIGLOG)
+else (CERES_USES_MINIGLOG)
# Append the locations of glog when Ceres was built to the search path hints.
- LIST(APPEND GLOG_INCLUDE_DIR_HINTS @GLOG_INCLUDE_DIR@)
- GET_FILENAME_COMPONENT(CERES_BUILD_GLOG_LIBRARY_DIR @GLOG_LIBRARY@ PATH)
- LIST(APPEND GLOG_LIBRARY_DIR_HINTS ${CERES_BUILD_GLOG_LIBRARY_DIR})
+ list(APPEND GLOG_INCLUDE_DIR_HINTS @GLOG_INCLUDE_DIR@)
+ get_filename_component(CERES_BUILD_GLOG_LIBRARY_DIR @GLOG_LIBRARY@ PATH)
+ list(APPEND GLOG_LIBRARY_DIR_HINTS ${CERES_BUILD_GLOG_LIBRARY_DIR})
# Search quietly s/t we control the timing of the error message if not found.
- FIND_PACKAGE(Glog QUIET)
- IF (GLOG_FOUND)
- MESSAGE(STATUS "Found required Ceres dependency: "
+ find_package(Glog QUIET)
+ if (GLOG_FOUND)
+ message(STATUS "Found required Ceres dependency: "
"Glog in ${GLOG_INCLUDE_DIRS}")
- ELSE (GLOG_FOUND)
- CERES_REPORT_NOT_FOUND("Missing required Ceres "
+ else (GLOG_FOUND)
+ ceres_report_not_found("Missing required Ceres "
"dependency: Glog, please set GLOG_INCLUDE_DIR.")
- ENDIF (GLOG_FOUND)
- LIST(APPEND CERES_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS})
-ENDIF (CERES_USES_MINIGLOG)
+ endif (GLOG_FOUND)
+ list(APPEND CERES_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS})
+endif (CERES_USES_MINIGLOG)
# Import exported Ceres targets, if they have not already been imported.
-IF (NOT TARGET ceres AND NOT Ceres_BINARY_DIR)
- INCLUDE(${CERES_CURRENT_CONFIG_DIR}/CeresTargets.cmake)
-ENDIF (NOT TARGET ceres AND NOT Ceres_BINARY_DIR)
+if (NOT TARGET ceres AND NOT Ceres_BINARY_DIR)
+ include(${CERES_CURRENT_CONFIG_DIR}/CeresTargets.cmake)
+endif (NOT TARGET ceres AND NOT Ceres_BINARY_DIR)
# Set the expected XX_LIBRARIES variable for FindPackage().
-SET(CERES_LIBRARIES ceres)
+set(CERES_LIBRARIES ceres)
# Set legacy include directories variable for backwards compatibility.
-SET(CERES_INCLUDES ${CERES_INCLUDE_DIRS})
+set(CERES_INCLUDES ${CERES_INCLUDE_DIRS})
# Reset CMake module path to its state when this script was called.
-SET(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH})
+set(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH})
# As we use CERES_REPORT_NOT_FOUND() to abort, if we reach this point we have
# found Ceres and all required dependencies.
-IF (CERES_WAS_INSTALLED)
- MESSAGE(STATUS "Found Ceres version: ${CERES_VERSION} "
+if (CERES_WAS_INSTALLED)
+ message(STATUS "Found Ceres version: ${CERES_VERSION} "
"installed in: ${CURRENT_ROOT_INSTALL_DIR}")
-ELSE (CERES_WAS_INSTALLED)
- MESSAGE(STATUS "Found Ceres version: ${CERES_VERSION} "
+else (CERES_WAS_INSTALLED)
+ message(STATUS "Found Ceres version: ${CERES_VERSION} "
"exported from build directory: ${CERES_EXPORTED_BUILD_DIR}")
-ENDIF()
+endif()
# Set CERES_FOUND to be equivalent to Ceres_FOUND, which is set to
# TRUE by FindPackage() if this file is found and run, and after which
# Ceres_FOUND is not (explicitly, i.e. undefined does not count) set
# to FALSE.
-SET(CERES_FOUND TRUE)
+set(CERES_FOUND TRUE)
diff --git a/cmake/CeresConfigVersion.cmake.in b/cmake/CeresConfigVersion.cmake.in
index f577f89..5ff36eb 100644
--- a/cmake/CeresConfigVersion.cmake.in
+++ b/cmake/CeresConfigVersion.cmake.in
@@ -38,13 +38,13 @@
# version string are exactly the same and it sets PACKAGE_VERSION_COMPATIBLE
# if the current version is >= requested version.
-SET(PACKAGE_VERSION @CERES_VERSION@)
+set(PACKAGE_VERSION @CERES_VERSION@)
-IF ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
- SET(PACKAGE_VERSION_COMPATIBLE FALSE)
-ELSE ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
- SET(PACKAGE_VERSION_COMPATIBLE TRUE)
- IF ("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
- SET(PACKAGE_VERSION_EXACT TRUE)
- ENDIF ("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
-ENDIF ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+if ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ if ("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif ("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
+endif ("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
diff --git a/cmake/CreateCeresConfig.cmake b/cmake/CreateCeresConfig.cmake
index ceedbfe..89db68c 100644
--- a/cmake/CreateCeresConfig.cmake
+++ b/cmake/CreateCeresConfig.cmake
@@ -32,7 +32,7 @@
# we can determine where *this* file is, and thus the relative path to
# config.h.in. Inside of CONFIGURE_CERES_CONFIG(), CMAKE_CURRENT_LIST_DIR
# refers to the caller of CONFIGURE_CERES_CONFIG(), not this file.
-SET(CERES_CONFIG_IN_FILE "${CMAKE_CURRENT_LIST_DIR}/config.h.in")
+set(CERES_CONFIG_IN_FILE "${CMAKE_CURRENT_LIST_DIR}/config.h.in")
# CreateCeresConfig.cmake - Create the config.h for Ceres.
#
@@ -55,61 +55,61 @@
# the configured config.h. Typically this
# will be <src>/include/ceres/internal.
-FUNCTION(CREATE_CERES_CONFIG CURRENT_CERES_COMPILE_OPTIONS CERES_CONFIG_OUTPUT_DIRECTORY)
+function(CREATE_CERES_CONFIG CURRENT_CERES_COMPILE_OPTIONS CERES_CONFIG_OUTPUT_DIRECTORY)
# Create the specified output directory if it does not exist.
- IF (NOT EXISTS "${CERES_CONFIG_OUTPUT_DIRECTORY}")
- MESSAGE(STATUS "Creating configured Ceres config.h output directory: "
+ if (NOT EXISTS "${CERES_CONFIG_OUTPUT_DIRECTORY}")
+ message(STATUS "Creating configured Ceres config.h output directory: "
"${CERES_CONFIG_OUTPUT_DIRECTORY}")
- FILE(MAKE_DIRECTORY "${CERES_CONFIG_OUTPUT_DIRECTORY}")
- ENDIF()
- IF (EXISTS "${CERES_CONFIG_OUTPUT_DIRECTORY}" AND
+ file(MAKE_DIRECTORY "${CERES_CONFIG_OUTPUT_DIRECTORY}")
+ endif()
+ if (EXISTS "${CERES_CONFIG_OUTPUT_DIRECTORY}" AND
NOT IS_DIRECTORY "${CERES_CONFIG_OUTPUT_DIRECTORY}")
- MESSAGE(FATAL_ERROR "Ceres Bug: Specified CERES_CONFIG_OUTPUT_DIRECTORY: "
+ message(FATAL_ERROR "Ceres Bug: Specified CERES_CONFIG_OUTPUT_DIRECTORY: "
"${CERES_CONFIG_OUTPUT_DIRECTORY} exists, but is not a directory.")
- ENDIF()
+ endif()
# Read all possible configurable compile options from config.h.in, this avoids
# us having to hard-code in this file what the valid options are.
- FILE(READ ${CERES_CONFIG_IN_FILE} CERES_CONFIG_IN_CONTENTS)
- STRING(REGEX MATCHALL "@[^@ $]+@"
+ file(READ ${CERES_CONFIG_IN_FILE} CERES_CONFIG_IN_CONTENTS)
+ string(REGEX MATCHALL "@[^@ $]+@"
ALL_CONFIGURABLE_CERES_OPTIONS "${CERES_CONFIG_IN_CONTENTS}")
# Removing @ symbols at beginning and end of each option.
- STRING(REPLACE "@" ""
+ string(REPLACE "@" ""
ALL_CONFIGURABLE_CERES_OPTIONS "${ALL_CONFIGURABLE_CERES_OPTIONS}")
# Ensure that there are no repetitions in the current compile options.
- LIST(REMOVE_DUPLICATES CURRENT_CERES_COMPILE_OPTIONS)
+ list(REMOVE_DUPLICATES CURRENT_CERES_COMPILE_OPTIONS)
- FOREACH (CERES_OPTION ${ALL_CONFIGURABLE_CERES_OPTIONS})
+ foreach (CERES_OPTION ${ALL_CONFIGURABLE_CERES_OPTIONS})
# Try and find the option in the list of current compile options, if it
# is present, then the option is enabled, otherwise it is disabled.
- LIST(FIND CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION} OPTION_ENABLED)
+ list(FIND CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION} OPTION_ENABLED)
# list(FIND ..) returns -1 if the element was not in the list, but CMake
# interprets if (VAR) to be true if VAR is any non-zero number, even
# negative ones, hence we have to explicitly check for >= 0.
- IF (OPTION_ENABLED GREATER -1)
- MESSAGE(STATUS "Enabling ${CERES_OPTION} in Ceres config.h")
- SET(${CERES_OPTION} "#define ${CERES_OPTION}")
+ if (OPTION_ENABLED GREATER -1)
+ message(STATUS "Enabling ${CERES_OPTION} in Ceres config.h")
+ set(${CERES_OPTION} "#define ${CERES_OPTION}")
# Remove the item from the list of current options so that we can identify
# any options that were in CURRENT_CERES_COMPILE_OPTIONS, but not in
# ALL_CONFIGURABLE_CERES_OPTIONS (which is an error).
- LIST(REMOVE_ITEM CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION})
- ELSE()
- SET(${CERES_OPTION} "// #define ${CERES_OPTION}")
- ENDIF()
- ENDFOREACH()
+ list(REMOVE_ITEM CURRENT_CERES_COMPILE_OPTIONS ${CERES_OPTION})
+ else()
+ set(${CERES_OPTION} "// #define ${CERES_OPTION}")
+ endif()
+ endforeach()
# CURRENT_CERES_COMPILE_OPTIONS should now be an empty list, any elements
# remaining were not present in ALL_CONFIGURABLE_CERES_OPTIONS read from
# config.h.in.
- IF (CURRENT_CERES_COMPILE_OPTIONS)
- MESSAGE(FATAL_ERROR "Ceres Bug: CURRENT_CERES_COMPILE_OPTIONS contained "
+ if (CURRENT_CERES_COMPILE_OPTIONS)
+ message(FATAL_ERROR "Ceres Bug: CURRENT_CERES_COMPILE_OPTIONS contained "
"the following options which were not present in config.h.in: "
"${CURRENT_CERES_COMPILE_OPTIONS}")
- ENDIF()
+ endif()
- CONFIGURE_FILE(${CERES_CONFIG_IN_FILE}
+ configure_file(${CERES_CONFIG_IN_FILE}
"${CERES_CONFIG_OUTPUT_DIRECTORY}/config.h" @ONLY)
-ENDFUNCTION()
+endfunction()
diff --git a/cmake/FindCXSparse.cmake b/cmake/FindCXSparse.cmake
index 5eef530..623eefb 100644
--- a/cmake/FindCXSparse.cmake
+++ b/cmake/FindCXSparse.cmake
@@ -69,125 +69,125 @@
# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
# FindCXSparse was invoked.
-MACRO(CXSPARSE_RESET_FIND_LIBRARY_PREFIX)
- IF (MSVC)
- SET(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
- ENDIF (MSVC)
-ENDMACRO(CXSPARSE_RESET_FIND_LIBRARY_PREFIX)
+macro(CXSPARSE_RESET_FIND_LIBRARY_PREFIX)
+ if (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
+ endif (MSVC)
+endmacro(CXSPARSE_RESET_FIND_LIBRARY_PREFIX)
# Called if we failed to find CXSparse or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(CXSPARSE_REPORT_NOT_FOUND REASON_MSG)
- UNSET(CXSPARSE_FOUND)
- UNSET(CXSPARSE_INCLUDE_DIRS)
- UNSET(CXSPARSE_LIBRARIES)
+macro(CXSPARSE_REPORT_NOT_FOUND REASON_MSG)
+ unset(CXSPARSE_FOUND)
+ unset(CXSPARSE_INCLUDE_DIRS)
+ unset(CXSPARSE_LIBRARIES)
# Make results of search visible in the CMake GUI if CXSparse has not
# been found so that user does not have to toggle to advanced view.
- MARK_AS_ADVANCED(CLEAR CXSPARSE_INCLUDE_DIR
+ mark_as_advanced(CLEAR CXSPARSE_INCLUDE_DIR
CXSPARSE_LIBRARY)
- CXSPARSE_RESET_FIND_LIBRARY_PREFIX()
+ cxsparse_reset_find_library_prefix()
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
# use the camelcase library name, not uppercase.
- IF (CXSparse_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
- ELSEIF (CXSparse_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (CXSparse_FIND_QUIETLY)
+ message(STATUS "Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
+ elseif (CXSparse_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use no priority which emits a message
# but continues configuration and allows generation.
- MESSAGE("-- Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
- ENDIF ()
-ENDMACRO(CXSPARSE_REPORT_NOT_FOUND)
+ message("-- Failed to find CXSparse - " ${REASON_MSG} ${ARGN})
+ endif ()
+endmacro(CXSPARSE_REPORT_NOT_FOUND)
# Handle possible presence of lib prefix for libraries on MSVC, see
# also CXSPARSE_RESET_FIND_LIBRARY_PREFIX().
-IF (MSVC)
+if (MSVC)
# Preserve the caller's original values for CMAKE_FIND_LIBRARY_PREFIXES
# s/t we can set it back before returning.
- SET(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
+ set(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
# The empty string in this list is important, it represents the case when
# the libraries have no prefix (shared libraries / DLLs).
- SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
-ENDIF (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
+endif (MSVC)
# Search user-installed locations first, so that we prefer user installs
# to system installs where both exist.
#
# TODO: Add standard Windows search locations for CXSparse.
-LIST(APPEND CXSPARSE_CHECK_INCLUDE_DIRS
+list(APPEND CXSPARSE_CHECK_INCLUDE_DIRS
/usr/local/include
/usr/local/homebrew/include # Mac OS X
/opt/local/var/macports/software # Mac OS X.
/opt/local/include
/usr/include)
-LIST(APPEND CXSPARSE_CHECK_LIBRARY_DIRS
+list(APPEND CXSPARSE_CHECK_LIBRARY_DIRS
/usr/local/lib
/usr/local/homebrew/lib # Mac OS X.
/opt/local/lib
/usr/lib)
# Search supplied hint directories first if supplied.
-FIND_PATH(CXSPARSE_INCLUDE_DIR
+find_path(CXSPARSE_INCLUDE_DIR
NAMES cs.h
PATHS ${CXSPARSE_INCLUDE_DIR_HINTS}
${CXSPARSE_CHECK_INCLUDE_DIRS})
-IF (NOT CXSPARSE_INCLUDE_DIR OR
+if (NOT CXSPARSE_INCLUDE_DIR OR
NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
- CXSPARSE_REPORT_NOT_FOUND(
+ cxsparse_report_not_found(
"Could not find CXSparse include directory, set CXSPARSE_INCLUDE_DIR "
"to directory containing cs.h")
-ENDIF (NOT CXSPARSE_INCLUDE_DIR OR
+endif (NOT CXSPARSE_INCLUDE_DIR OR
NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
-FIND_LIBRARY(CXSPARSE_LIBRARY NAMES cxsparse
+find_library(CXSPARSE_LIBRARY NAMES cxsparse
PATHS ${CXSPARSE_LIBRARY_DIR_HINTS}
${CXSPARSE_CHECK_LIBRARY_DIRS})
-IF (NOT CXSPARSE_LIBRARY OR
+if (NOT CXSPARSE_LIBRARY OR
NOT EXISTS ${CXSPARSE_LIBRARY})
- CXSPARSE_REPORT_NOT_FOUND(
+ cxsparse_report_not_found(
"Could not find CXSparse library, set CXSPARSE_LIBRARY "
"to full path to libcxsparse.")
-ENDIF (NOT CXSPARSE_LIBRARY OR
+endif (NOT CXSPARSE_LIBRARY OR
NOT EXISTS ${CXSPARSE_LIBRARY})
# Mark internally as found, then verify. CXSPARSE_REPORT_NOT_FOUND() unsets
# if called.
-SET(CXSPARSE_FOUND TRUE)
+set(CXSPARSE_FOUND TRUE)
# Extract CXSparse version from cs.h
-IF (CXSPARSE_INCLUDE_DIR)
- SET(CXSPARSE_VERSION_FILE ${CXSPARSE_INCLUDE_DIR}/cs.h)
- IF (NOT EXISTS ${CXSPARSE_VERSION_FILE})
- CXSPARSE_REPORT_NOT_FOUND(
+if (CXSPARSE_INCLUDE_DIR)
+ set(CXSPARSE_VERSION_FILE ${CXSPARSE_INCLUDE_DIR}/cs.h)
+ if (NOT EXISTS ${CXSPARSE_VERSION_FILE})
+ cxsparse_report_not_found(
"Could not find file: ${CXSPARSE_VERSION_FILE} "
"containing version information in CXSparse install located at: "
"${CXSPARSE_INCLUDE_DIR}.")
- ELSE (NOT EXISTS ${CXSPARSE_VERSION_FILE})
- FILE(READ ${CXSPARSE_INCLUDE_DIR}/cs.h CXSPARSE_VERSION_FILE_CONTENTS)
+ else (NOT EXISTS ${CXSPARSE_VERSION_FILE})
+ file(READ ${CXSPARSE_INCLUDE_DIR}/cs.h CXSPARSE_VERSION_FILE_CONTENTS)
- STRING(REGEX MATCH "#define CS_VER [0-9]+"
+ string(REGEX MATCH "#define CS_VER [0-9]+"
CXSPARSE_MAIN_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define CS_VER ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define CS_VER ([0-9]+)" "\\1"
CXSPARSE_MAIN_VERSION "${CXSPARSE_MAIN_VERSION}")
- STRING(REGEX MATCH "#define CS_SUBVER [0-9]+"
+ string(REGEX MATCH "#define CS_SUBVER [0-9]+"
CXSPARSE_SUB_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define CS_SUBVER ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define CS_SUBVER ([0-9]+)" "\\1"
CXSPARSE_SUB_VERSION "${CXSPARSE_SUB_VERSION}")
- STRING(REGEX MATCH "#define CS_SUBSUB [0-9]+"
+ string(REGEX MATCH "#define CS_SUBSUB [0-9]+"
CXSPARSE_SUBSUB_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define CS_SUBSUB ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define CS_SUBSUB ([0-9]+)" "\\1"
CXSPARSE_SUBSUB_VERSION "${CXSPARSE_SUBSUB_VERSION}")
# This is on a single line s/t CMake does not interpret it as a list of
# elements and insert ';' separators which would result in 3.;1.;2 nonsense.
- SET(CXSPARSE_VERSION "${CXSPARSE_MAIN_VERSION}.${CXSPARSE_SUB_VERSION}.${CXSPARSE_SUBSUB_VERSION}")
- ENDIF (NOT EXISTS ${CXSPARSE_VERSION_FILE})
-ENDIF (CXSPARSE_INCLUDE_DIR)
+ set(CXSPARSE_VERSION "${CXSPARSE_MAIN_VERSION}.${CXSPARSE_SUB_VERSION}.${CXSPARSE_SUBSUB_VERSION}")
+ endif (NOT EXISTS ${CXSPARSE_VERSION_FILE})
+endif (CXSPARSE_INCLUDE_DIR)
# Catch the case when the caller has set CXSPARSE_LIBRARY in the cache / GUI and
# thus FIND_LIBRARY was not called, but specified library is invalid, otherwise
@@ -195,34 +195,34 @@
# TODO: This regex for CXSparse library is pretty primitive, we use lowercase
# for comparison to handle Windows using CamelCase library names, could
# this check be better?
-STRING(TOLOWER "${CXSPARSE_LIBRARY}" LOWERCASE_CXSPARSE_LIBRARY)
-IF (CXSPARSE_LIBRARY AND
+string(TOLOWER "${CXSPARSE_LIBRARY}" LOWERCASE_CXSPARSE_LIBRARY)
+if (CXSPARSE_LIBRARY AND
EXISTS ${CXSPARSE_LIBRARY} AND
NOT "${LOWERCASE_CXSPARSE_LIBRARY}" MATCHES ".*cxsparse[^/]*")
- CXSPARSE_REPORT_NOT_FOUND(
+ cxsparse_report_not_found(
"Caller defined CXSPARSE_LIBRARY: "
"${CXSPARSE_LIBRARY} does not match CXSparse.")
-ENDIF (CXSPARSE_LIBRARY AND
+endif (CXSPARSE_LIBRARY AND
EXISTS ${CXSPARSE_LIBRARY} AND
NOT "${LOWERCASE_CXSPARSE_LIBRARY}" MATCHES ".*cxsparse[^/]*")
# Set standard CMake FindPackage variables if found.
-IF (CXSPARSE_FOUND)
- SET(CXSPARSE_INCLUDE_DIRS ${CXSPARSE_INCLUDE_DIR})
- SET(CXSPARSE_LIBRARIES ${CXSPARSE_LIBRARY})
-ENDIF (CXSPARSE_FOUND)
+if (CXSPARSE_FOUND)
+ set(CXSPARSE_INCLUDE_DIRS ${CXSPARSE_INCLUDE_DIR})
+ set(CXSPARSE_LIBRARIES ${CXSPARSE_LIBRARY})
+endif (CXSPARSE_FOUND)
-CXSPARSE_RESET_FIND_LIBRARY_PREFIX()
+cxsparse_reset_find_library_prefix()
# Handle REQUIRED / QUIET optional arguments and version.
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(CXSparse
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CXSparse
REQUIRED_VARS CXSPARSE_INCLUDE_DIRS CXSPARSE_LIBRARIES
VERSION_VAR CXSPARSE_VERSION)
# Only mark internal variables as advanced if we found CXSparse, otherwise
# leave them visible in the standard GUI for the user to set manually.
-IF (CXSPARSE_FOUND)
- MARK_AS_ADVANCED(FORCE CXSPARSE_INCLUDE_DIR
+if (CXSPARSE_FOUND)
+ mark_as_advanced(FORCE CXSPARSE_INCLUDE_DIR
CXSPARSE_LIBRARY)
-ENDIF (CXSPARSE_FOUND)
+endif (CXSPARSE_FOUND)
diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake
index 8e7609e..6d86197 100644
--- a/cmake/FindEigen.cmake
+++ b/cmake/FindEigen.cmake
@@ -63,104 +63,104 @@
# Called if we failed to find Eigen or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(EIGEN_REPORT_NOT_FOUND REASON_MSG)
- UNSET(EIGEN_FOUND)
- UNSET(EIGEN_INCLUDE_DIRS)
+macro(EIGEN_REPORT_NOT_FOUND REASON_MSG)
+ unset(EIGEN_FOUND)
+ unset(EIGEN_INCLUDE_DIRS)
# Make results of search visible in the CMake GUI if Eigen has not
# been found so that user does not have to toggle to advanced view.
- MARK_AS_ADVANCED(CLEAR EIGEN_INCLUDE_DIR)
+ mark_as_advanced(CLEAR EIGEN_INCLUDE_DIR)
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
# use the camelcase library name, not uppercase.
- IF (Eigen_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- ELSEIF (Eigen_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (Eigen_FIND_QUIETLY)
+ message(STATUS "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
+ elseif (Eigen_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use no priority which emits a message
# but continues configuration and allows generation.
- MESSAGE("-- Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- ENDIF ()
-ENDMACRO(EIGEN_REPORT_NOT_FOUND)
+ message("-- Failed to find Eigen - " ${REASON_MSG} ${ARGN})
+ endif ()
+endmacro(EIGEN_REPORT_NOT_FOUND)
# Search user-installed locations first, so that we prefer user installs
# to system installs where both exist.
#
# TODO: Add standard Windows search locations for Eigen.
-LIST(APPEND EIGEN_CHECK_INCLUDE_DIRS
+list(APPEND EIGEN_CHECK_INCLUDE_DIRS
/usr/local/include
/usr/local/homebrew/include # Mac OS X
/opt/local/var/macports/software # Mac OS X.
/opt/local/include
/usr/include)
# Additional suffixes to try appending to each search path.
-LIST(APPEND EIGEN_CHECK_PATH_SUFFIXES
+list(APPEND EIGEN_CHECK_PATH_SUFFIXES
eigen3 # Default root directory for Eigen.
Eigen/include/eigen3 ) # Windows (for C:/Program Files prefix).
# Search supplied hint directories first if supplied.
-FIND_PATH(EIGEN_INCLUDE_DIR
+find_path(EIGEN_INCLUDE_DIR
NAMES Eigen/Core
PATHS ${EIGEN_INCLUDE_DIR_HINTS}
${EIGEN_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
-IF (NOT EIGEN_INCLUDE_DIR OR
+if (NOT EIGEN_INCLUDE_DIR OR
NOT EXISTS ${EIGEN_INCLUDE_DIR})
- EIGEN_REPORT_NOT_FOUND(
+ eigen_report_not_found(
"Could not find eigen3 include directory, set EIGEN_INCLUDE_DIR to "
"path to eigen3 include directory, e.g. /usr/local/include/eigen3.")
-ENDIF (NOT EIGEN_INCLUDE_DIR OR
+endif (NOT EIGEN_INCLUDE_DIR OR
NOT EXISTS ${EIGEN_INCLUDE_DIR})
# Mark internally as found, then verify. EIGEN_REPORT_NOT_FOUND() unsets
# if called.
-SET(EIGEN_FOUND TRUE)
+set(EIGEN_FOUND TRUE)
# Extract Eigen version from Eigen/src/Core/util/Macros.h
-IF (EIGEN_INCLUDE_DIR)
- SET(EIGEN_VERSION_FILE ${EIGEN_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h)
- IF (NOT EXISTS ${EIGEN_VERSION_FILE})
- EIGEN_REPORT_NOT_FOUND(
+if (EIGEN_INCLUDE_DIR)
+ set(EIGEN_VERSION_FILE ${EIGEN_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h)
+ if (NOT EXISTS ${EIGEN_VERSION_FILE})
+ eigen_report_not_found(
"Could not find file: ${EIGEN_VERSION_FILE} "
"containing version information in Eigen install located at: "
"${EIGEN_INCLUDE_DIR}.")
- ELSE (NOT EXISTS ${EIGEN_VERSION_FILE})
- FILE(READ ${EIGEN_VERSION_FILE} EIGEN_VERSION_FILE_CONTENTS)
+ else (NOT EXISTS ${EIGEN_VERSION_FILE})
+ file(READ ${EIGEN_VERSION_FILE} EIGEN_VERSION_FILE_CONTENTS)
- STRING(REGEX MATCH "#define EIGEN_WORLD_VERSION [0-9]+"
+ string(REGEX MATCH "#define EIGEN_WORLD_VERSION [0-9]+"
EIGEN_WORLD_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define EIGEN_WORLD_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define EIGEN_WORLD_VERSION ([0-9]+)" "\\1"
EIGEN_WORLD_VERSION "${EIGEN_WORLD_VERSION}")
- STRING(REGEX MATCH "#define EIGEN_MAJOR_VERSION [0-9]+"
+ string(REGEX MATCH "#define EIGEN_MAJOR_VERSION [0-9]+"
EIGEN_MAJOR_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define EIGEN_MAJOR_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define EIGEN_MAJOR_VERSION ([0-9]+)" "\\1"
EIGEN_MAJOR_VERSION "${EIGEN_MAJOR_VERSION}")
- STRING(REGEX MATCH "#define EIGEN_MINOR_VERSION [0-9]+"
+ string(REGEX MATCH "#define EIGEN_MINOR_VERSION [0-9]+"
EIGEN_MINOR_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define EIGEN_MINOR_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define EIGEN_MINOR_VERSION ([0-9]+)" "\\1"
EIGEN_MINOR_VERSION "${EIGEN_MINOR_VERSION}")
# This is on a single line s/t CMake does not interpret it as a list of
# elements and insert ';' separators which would result in 3.;2.;0 nonsense.
- SET(EIGEN_VERSION "${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}")
- ENDIF (NOT EXISTS ${EIGEN_VERSION_FILE})
-ENDIF (EIGEN_INCLUDE_DIR)
+ set(EIGEN_VERSION "${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}")
+ endif (NOT EXISTS ${EIGEN_VERSION_FILE})
+endif (EIGEN_INCLUDE_DIR)
# Set standard CMake FindPackage variables if found.
-IF (EIGEN_FOUND)
- SET(EIGEN_INCLUDE_DIRS ${EIGEN_INCLUDE_DIR})
-ENDIF (EIGEN_FOUND)
+if (EIGEN_FOUND)
+ set(EIGEN_INCLUDE_DIRS ${EIGEN_INCLUDE_DIR})
+endif (EIGEN_FOUND)
# Handle REQUIRED / QUIET optional arguments and version.
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Eigen
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Eigen
REQUIRED_VARS EIGEN_INCLUDE_DIRS
VERSION_VAR EIGEN_VERSION)
# Only mark internal variables as advanced if we found Eigen, otherwise
# leave it visible in the standard GUI for the user to set manually.
-IF (EIGEN_FOUND)
- MARK_AS_ADVANCED(FORCE EIGEN_INCLUDE_DIR)
-ENDIF (EIGEN_FOUND)
+if (EIGEN_FOUND)
+ mark_as_advanced(FORCE EIGEN_INCLUDE_DIR)
+endif (EIGEN_FOUND)
diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake
index 0eefd2f..a700367 100644
--- a/cmake/FindGflags.cmake
+++ b/cmake/FindGflags.cmake
@@ -84,54 +84,54 @@
# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when FindGflags was
# invoked, necessary for MSVC.
-MACRO(GFLAGS_RESET_FIND_LIBRARY_PREFIX)
- IF (MSVC)
- SET(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
- ENDIF (MSVC)
-ENDMACRO(GFLAGS_RESET_FIND_LIBRARY_PREFIX)
+macro(GFLAGS_RESET_FIND_LIBRARY_PREFIX)
+ if (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
+ endif (MSVC)
+endmacro(GFLAGS_RESET_FIND_LIBRARY_PREFIX)
# Called if we failed to find gflags or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(GFLAGS_REPORT_NOT_FOUND REASON_MSG)
- UNSET(GFLAGS_FOUND)
- UNSET(GFLAGS_INCLUDE_DIRS)
- UNSET(GFLAGS_LIBRARIES)
+macro(GFLAGS_REPORT_NOT_FOUND REASON_MSG)
+ unset(GFLAGS_FOUND)
+ unset(GFLAGS_INCLUDE_DIRS)
+ unset(GFLAGS_LIBRARIES)
# Do not use unset, as we want to keep GFLAGS_NAMESPACE in the cache,
# but simply clear its value.
- SET(GFLAGS_NAMESPACE "" CACHE STRING
+ set(GFLAGS_NAMESPACE "" CACHE STRING
"gflags namespace (google or gflags)" FORCE)
# Make results of search visible in the CMake GUI if gflags has not
# been found so that user does not have to toggle to advanced view.
- MARK_AS_ADVANCED(CLEAR GFLAGS_INCLUDE_DIR
+ mark_as_advanced(CLEAR GFLAGS_INCLUDE_DIR
GFLAGS_LIBRARY
GFLAGS_NAMESPACE)
- GFLAGS_RESET_FIND_LIBRARY_PREFIX()
+ gflags_reset_find_library_prefix()
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
# use the camelcase library name, not uppercase.
- IF (Gflags_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find gflags - " ${REASON_MSG} ${ARGN})
- ELSEIF (Gflags_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find gflags - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (Gflags_FIND_QUIETLY)
+ message(STATUS "Failed to find gflags - " ${REASON_MSG} ${ARGN})
+ elseif (Gflags_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find gflags - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use no priority which emits a message
# but continues configuration and allows generation.
- MESSAGE("-- Failed to find gflags - " ${REASON_MSG} ${ARGN})
- ENDIF ()
-ENDMACRO(GFLAGS_REPORT_NOT_FOUND)
+ message("-- Failed to find gflags - " ${REASON_MSG} ${ARGN})
+ endif ()
+endmacro(GFLAGS_REPORT_NOT_FOUND)
# Verify that all variable names passed as arguments are defined (can be empty
# but must be defined) or raise a fatal error.
-MACRO(GFLAGS_CHECK_VARS_DEFINED)
- FOREACH(CHECK_VAR ${ARGN})
- IF (NOT DEFINED ${CHECK_VAR})
- MESSAGE(FATAL_ERROR "Ceres Bug: ${CHECK_VAR} is not defined.")
- ENDIF()
- ENDFOREACH()
-ENDMACRO(GFLAGS_CHECK_VARS_DEFINED)
+macro(GFLAGS_CHECK_VARS_DEFINED)
+ foreach(CHECK_VAR ${ARGN})
+ if (NOT DEFINED ${CHECK_VAR})
+ message(FATAL_ERROR "Ceres Bug: ${CHECK_VAR} is not defined.")
+ endif()
+ endforeach()
+endmacro(GFLAGS_CHECK_VARS_DEFINED)
# Use check_cxx_source_compiles() to compile trivial test programs to determine
# the gflags namespace. This works on all OSs except Windows. If using Visual
@@ -143,50 +143,50 @@
# Defines: GFLAGS_NAMESPACE in the caller's scope with the detected namespace,
# which is blank (empty string, will test FALSE is CMake conditionals)
# if detection failed.
-FUNCTION(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_TRY_COMPILE)
+function(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_TRY_COMPILE)
# Verify that all required variables are defined.
- GFLAGS_CHECK_VARS_DEFINED(
+ gflags_check_vars_defined(
GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
# Ensure that GFLAGS_NAMESPACE is always unset on completion unless
# we explicitly set if after having the correct namespace.
- SET(GFLAGS_NAMESPACE "" PARENT_SCOPE)
+ set(GFLAGS_NAMESPACE "" PARENT_SCOPE)
- INCLUDE(CheckCXXSourceCompiles)
+ include(CheckCXXSourceCompiles)
# Setup include path & link library for gflags for CHECK_CXX_SOURCE_COMPILES.
- SET(CMAKE_REQUIRED_INCLUDES ${GFLAGS_INCLUDE_DIR})
- SET(CMAKE_REQUIRED_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
+ set(CMAKE_REQUIRED_INCLUDES ${GFLAGS_INCLUDE_DIR})
+ set(CMAKE_REQUIRED_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
# First try the (older) google namespace. Note that the output variable
# MUST be unique to the build type as otherwise the test is not repeated as
# it is assumed to have already been performed.
- CHECK_CXX_SOURCE_COMPILES(
+ check_cxx_source_compiles(
"#include <gflags/gflags.h>
int main(int argc, char * argv[]) {
google::ParseCommandLineFlags(&argc, &argv, true);
return 0;
}"
GFLAGS_IN_GOOGLE_NAMESPACE)
- IF (GFLAGS_IN_GOOGLE_NAMESPACE)
- SET(GFLAGS_NAMESPACE google PARENT_SCOPE)
- RETURN()
- ENDIF()
+ if (GFLAGS_IN_GOOGLE_NAMESPACE)
+ set(GFLAGS_NAMESPACE google PARENT_SCOPE)
+ return()
+ endif()
# Try (newer) gflags namespace instead. Note that the output variable
# MUST be unique to the build type as otherwise the test is not repeated as
# it is assumed to have already been performed.
- SET(CMAKE_REQUIRED_INCLUDES ${GFLAGS_INCLUDE_DIR})
- SET(CMAKE_REQUIRED_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
- CHECK_CXX_SOURCE_COMPILES(
+ set(CMAKE_REQUIRED_INCLUDES ${GFLAGS_INCLUDE_DIR})
+ set(CMAKE_REQUIRED_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
+ check_cxx_source_compiles(
"#include <gflags/gflags.h>
int main(int argc, char * argv[]) {
gflags::ParseCommandLineFlags(&argc, &argv, true);
return 0;
}"
GFLAGS_IN_GFLAGS_NAMESPACE)
- IF (GFLAGS_IN_GFLAGS_NAMESPACE)
- SET(GFLAGS_NAMESPACE gflags PARENT_SCOPE)
- RETURN()
- ENDIF (GFLAGS_IN_GFLAGS_NAMESPACE)
-ENDFUNCTION(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_TRY_COMPILE)
+ if (GFLAGS_IN_GFLAGS_NAMESPACE)
+ set(GFLAGS_NAMESPACE gflags PARENT_SCOPE)
+ return()
+ endif (GFLAGS_IN_GFLAGS_NAMESPACE)
+endfunction(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_TRY_COMPILE)
# Use regex on the gflags headers to attempt to determine the gflags namespace.
# Checks both gflags.h (contained namespace on versions < 2.1.2) and
@@ -198,91 +198,91 @@
# Defines: GFLAGS_NAMESPACE in the caller's scope with the detected namespace,
# which is blank (empty string, will test FALSE is CMake conditionals)
# if detection failed.
-FUNCTION(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX)
+function(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX)
# Verify that all required variables are defined.
- GFLAGS_CHECK_VARS_DEFINED(GFLAGS_INCLUDE_DIR)
+ gflags_check_vars_defined(GFLAGS_INCLUDE_DIR)
# Ensure that GFLAGS_NAMESPACE is always undefined on completion unless
# we explicitly set if after having the correct namespace.
- SET(GFLAGS_NAMESPACE "" PARENT_SCOPE)
+ set(GFLAGS_NAMESPACE "" PARENT_SCOPE)
# Scan gflags.h to identify what namespace gflags was built with. On
# versions of gflags < 2.1.2, gflags.h was configured with the namespace
# directly, on >= 2.1.2, gflags.h uses the GFLAGS_NAMESPACE #define which
# is defined in gflags_declare.h, we try each location in turn.
- SET(GFLAGS_HEADER_FILE ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
- IF (NOT EXISTS ${GFLAGS_HEADER_FILE})
- GFLAGS_REPORT_NOT_FOUND(
+ set(GFLAGS_HEADER_FILE ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
+ if (NOT EXISTS ${GFLAGS_HEADER_FILE})
+ gflags_report_not_found(
"Could not find file: ${GFLAGS_HEADER_FILE} "
"containing namespace information in gflags install located at: "
"${GFLAGS_INCLUDE_DIR}.")
- ENDIF()
- FILE(READ ${GFLAGS_HEADER_FILE} GFLAGS_HEADER_FILE_CONTENTS)
+ endif()
+ file(READ ${GFLAGS_HEADER_FILE} GFLAGS_HEADER_FILE_CONTENTS)
- STRING(REGEX MATCH "namespace [A-Za-z]+"
+ string(REGEX MATCH "namespace [A-Za-z]+"
GFLAGS_NAMESPACE "${GFLAGS_HEADER_FILE_CONTENTS}")
- STRING(REGEX REPLACE "namespace ([A-Za-z]+)" "\\1"
+ string(REGEX REPLACE "namespace ([A-Za-z]+)" "\\1"
GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}")
- IF (NOT GFLAGS_NAMESPACE)
- GFLAGS_REPORT_NOT_FOUND(
+ if (NOT GFLAGS_NAMESPACE)
+ gflags_report_not_found(
"Failed to extract gflags namespace from header file: "
"${GFLAGS_HEADER_FILE}.")
- ENDIF (NOT GFLAGS_NAMESPACE)
+ endif (NOT GFLAGS_NAMESPACE)
- IF (GFLAGS_NAMESPACE STREQUAL "google" OR
+ if (GFLAGS_NAMESPACE STREQUAL "google" OR
GFLAGS_NAMESPACE STREQUAL "gflags")
# Found valid gflags namespace from gflags.h.
- SET(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" PARENT_SCOPE)
- RETURN()
- ENDIF()
+ set(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" PARENT_SCOPE)
+ return()
+ endif()
# Failed to find gflags namespace from gflags.h, gflags is likely a new
# version, check gflags_declare.h, which in newer versions (>= 2.1.2) contains
# the GFLAGS_NAMESPACE #define, which is then referenced in gflags.h.
- SET(GFLAGS_DECLARE_FILE ${GFLAGS_INCLUDE_DIR}/gflags/gflags_declare.h)
- IF (NOT EXISTS ${GFLAGS_DECLARE_FILE})
- GFLAGS_REPORT_NOT_FOUND(
+ set(GFLAGS_DECLARE_FILE ${GFLAGS_INCLUDE_DIR}/gflags/gflags_declare.h)
+ if (NOT EXISTS ${GFLAGS_DECLARE_FILE})
+ gflags_report_not_found(
"Could not find file: ${GFLAGS_DECLARE_FILE} "
"containing namespace information in gflags install located at: "
"${GFLAGS_INCLUDE_DIR}.")
- ENDIF()
- FILE(READ ${GFLAGS_DECLARE_FILE} GFLAGS_DECLARE_FILE_CONTENTS)
+ endif()
+ file(READ ${GFLAGS_DECLARE_FILE} GFLAGS_DECLARE_FILE_CONTENTS)
- STRING(REGEX MATCH "#define GFLAGS_NAMESPACE [A-Za-z]+"
+ string(REGEX MATCH "#define GFLAGS_NAMESPACE [A-Za-z]+"
GFLAGS_NAMESPACE "${GFLAGS_DECLARE_FILE_CONTENTS}")
- STRING(REGEX REPLACE "#define GFLAGS_NAMESPACE ([A-Za-z]+)" "\\1"
+ string(REGEX REPLACE "#define GFLAGS_NAMESPACE ([A-Za-z]+)" "\\1"
GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}")
- IF (NOT GFLAGS_NAMESPACE)
- GFLAGS_REPORT_NOT_FOUND(
+ if (NOT GFLAGS_NAMESPACE)
+ gflags_report_not_found(
"Failed to extract gflags namespace from declare file: "
"${GFLAGS_DECLARE_FILE}.")
- ENDIF (NOT GFLAGS_NAMESPACE)
+ endif (NOT GFLAGS_NAMESPACE)
- IF (GFLAGS_NAMESPACE STREQUAL "google" OR
+ if (GFLAGS_NAMESPACE STREQUAL "google" OR
GFLAGS_NAMESPACE STREQUAL "gflags")
# Found valid gflags namespace from gflags.h.
- SET(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" PARENT_SCOPE)
- RETURN()
- ENDIF()
-ENDFUNCTION(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX)
+ set(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" PARENT_SCOPE)
+ return()
+ endif()
+endfunction(GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX)
# -----------------------------------------------------------------
# By default, if the user has expressed no preference for using an exported
# gflags CMake configuration over performing a search for the installed
# components, and has not specified any hints for the search locations, then
# prefer a gflags exported configuration if available.
-IF (NOT DEFINED GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION
+if (NOT DEFINED GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION
AND NOT GFLAGS_INCLUDE_DIR_HINTS
AND NOT GFLAGS_LIBRARY_DIR_HINTS)
- MESSAGE(STATUS "No preference for use of exported gflags CMake configuration "
+ message(STATUS "No preference for use of exported gflags CMake configuration "
"set, and no hints for include/library directories provided. "
"Defaulting to preferring an installed/exported gflags CMake configuration "
"if available.")
- SET(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION TRUE)
-ENDIF()
+ set(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION TRUE)
+endif()
-IF (GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION)
+if (GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION)
# Try to find an exported CMake configuration for gflags, as generated by
# gflags versions >= 2.1.
#
@@ -314,28 +314,28 @@
# version if available.
#
# [1] http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
- FIND_PACKAGE(gflags QUIET
+ find_package(gflags QUIET
NO_MODULE
NO_CMAKE_PACKAGE_REGISTRY
NO_CMAKE_BUILDS_PATH)
- IF (gflags_FOUND)
- MESSAGE(STATUS "Found installed version of gflags: ${gflags_DIR}")
- ELSE(gflags_FOUND)
+ if (gflags_FOUND)
+ message(STATUS "Found installed version of gflags: ${gflags_DIR}")
+ else(gflags_FOUND)
# Failed to find an installed version of gflags, repeat search allowing
# exported build directories.
- MESSAGE(STATUS "Failed to find installed version of gflags, searching for "
+ message(STATUS "Failed to find installed version of gflags, searching for "
"gflags build directories exported with CMake.")
# Again pass NO_CMAKE_BUILDS_PATH, as we know that gflags is exported and
# do not want to treat projects built with the CMake GUI preferentially.
- FIND_PACKAGE(gflags QUIET
+ find_package(gflags QUIET
NO_MODULE
NO_CMAKE_BUILDS_PATH)
- IF (gflags_FOUND)
- MESSAGE(STATUS "Found exported gflags build directory: ${gflags_DIR}")
- ENDIF(gflags_FOUND)
- ENDIF(gflags_FOUND)
+ if (gflags_FOUND)
+ message(STATUS "Found exported gflags build directory: ${gflags_DIR}")
+ endif(gflags_FOUND)
+ endif(gflags_FOUND)
- SET(FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION ${gflags_FOUND})
+ set(FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION ${gflags_FOUND})
# gflags v2.1 - 2.1.2 shipped with a bug in their gflags-config.cmake [1]
# whereby gflags_LIBRARIES = "gflags", but there was no imported target
@@ -345,43 +345,43 @@
# fix it.
#
# [1] https://github.com/gflags/gflags/issues/110
- IF (gflags_FOUND AND
+ if (gflags_FOUND AND
${gflags_VERSION} VERSION_LESS 2.1.3 AND
NOT TARGET ${gflags_LIBRARIES})
- MESSAGE(STATUS "Detected broken gflags install in: ${gflags_DIR}, "
+ message(STATUS "Detected broken gflags install in: ${gflags_DIR}, "
"version: ${gflags_VERSION} <= 2.1.2 which defines gflags_LIBRARIES = "
"${gflags_LIBRARIES} which is not an imported CMake target, see: "
"https://github.com/gflags/gflags/issues/110. Attempting to fix by "
"detecting correct gflags target.")
# Ordering here expresses preference for detection, specifically we do not
# want to use the _nothreads variants if the full library is available.
- LIST(APPEND CHECK_GFLAGS_IMPORTED_TARGET_NAMES
+ list(APPEND CHECK_GFLAGS_IMPORTED_TARGET_NAMES
gflags-shared gflags-static
gflags_nothreads-shared gflags_nothreads-static)
- FOREACH(CHECK_GFLAGS_TARGET ${CHECK_GFLAGS_IMPORTED_TARGET_NAMES})
- IF (TARGET ${CHECK_GFLAGS_TARGET})
- MESSAGE(STATUS "Found valid gflags target: ${CHECK_GFLAGS_TARGET}, "
+ foreach(CHECK_GFLAGS_TARGET ${CHECK_GFLAGS_IMPORTED_TARGET_NAMES})
+ if (TARGET ${CHECK_GFLAGS_TARGET})
+ message(STATUS "Found valid gflags target: ${CHECK_GFLAGS_TARGET}, "
"updating gflags_LIBRARIES.")
- SET(gflags_LIBRARIES ${CHECK_GFLAGS_TARGET})
- BREAK()
- ENDIF()
- ENDFOREACH()
- IF (NOT TARGET ${gflags_LIBRARIES})
- MESSAGE(STATUS "Failed to fix detected broken gflags install in: "
+ set(gflags_LIBRARIES ${CHECK_GFLAGS_TARGET})
+ break()
+ endif()
+ endforeach()
+ if (NOT TARGET ${gflags_LIBRARIES})
+ message(STATUS "Failed to fix detected broken gflags install in: "
"${gflags_DIR}, version: ${gflags_VERSION} <= 2.1.2, none of the "
"imported targets for gflags: ${CHECK_GFLAGS_IMPORTED_TARGET_NAMES} "
"are defined. Will continue with a manual search for gflags "
"components. We recommend you build/install a version of gflags > "
"2.1.2 (or master).")
- SET(FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION FALSE)
- ENDIF()
- ENDIF()
+ set(FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION FALSE)
+ endif()
+ endif()
- IF (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
- MESSAGE(STATUS "Detected gflags version: ${gflags_VERSION}")
- SET(GFLAGS_FOUND ${gflags_FOUND})
- SET(GFLAGS_INCLUDE_DIR ${gflags_INCLUDE_DIR})
- SET(GFLAGS_LIBRARY ${gflags_LIBRARIES})
+ if (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
+ message(STATUS "Detected gflags version: ${gflags_VERSION}")
+ set(GFLAGS_FOUND ${gflags_FOUND})
+ set(GFLAGS_INCLUDE_DIR ${gflags_INCLUDE_DIR})
+ set(GFLAGS_LIBRARY ${gflags_LIBRARIES})
# gflags does not export the namespace in their CMake configuration, so
# use our function to determine what it should be, as it can be either
@@ -390,102 +390,102 @@
# NOTE: We use the regex method to determine the namespace here, as
# check_cxx_source_compiles() will not use imported targets, which
# is what gflags will be in this case.
- GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX()
+ gflags_check_gflags_namespace_using_regex()
- IF (NOT GFLAGS_NAMESPACE)
- GFLAGS_REPORT_NOT_FOUND(
+ if (NOT GFLAGS_NAMESPACE)
+ gflags_report_not_found(
"Failed to determine gflags namespace using regex for gflags "
"version: ${gflags_VERSION} exported here: ${gflags_DIR} using CMake.")
- ENDIF (NOT GFLAGS_NAMESPACE)
- ELSE (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
- MESSAGE(STATUS "Failed to find an installed/exported CMake configuration "
+ endif (NOT GFLAGS_NAMESPACE)
+ else (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
+ message(STATUS "Failed to find an installed/exported CMake configuration "
"for gflags, will perform search for installed gflags components.")
- ENDIF (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
-ENDIF(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION)
+ endif (FOUND_INSTALLED_GFLAGS_CMAKE_CONFIGURATION)
+endif(GFLAGS_PREFER_EXPORTED_GFLAGS_CMAKE_CONFIGURATION)
-IF (NOT GFLAGS_FOUND)
+if (NOT GFLAGS_FOUND)
# Either failed to find an exported gflags CMake configuration, or user
# told us not to use one. Perform a manual search for all gflags components.
# Handle possible presence of lib prefix for libraries on MSVC, see
# also GFLAGS_RESET_FIND_LIBRARY_PREFIX().
- IF (MSVC)
+ if (MSVC)
# Preserve the caller's original values for CMAKE_FIND_LIBRARY_PREFIXES
# s/t we can set it back before returning.
- SET(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
+ set(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
# The empty string in this list is important, it represents the case when
# the libraries have no prefix (shared libraries / DLLs).
- SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
- ENDIF (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
+ endif (MSVC)
# Search user-installed locations first, so that we prefer user installs
# to system installs where both exist.
- LIST(APPEND GFLAGS_CHECK_INCLUDE_DIRS
+ list(APPEND GFLAGS_CHECK_INCLUDE_DIRS
/usr/local/include
/usr/local/homebrew/include # Mac OS X
/opt/local/var/macports/software # Mac OS X.
/opt/local/include
/usr/include)
- LIST(APPEND GFLAGS_CHECK_PATH_SUFFIXES
+ list(APPEND GFLAGS_CHECK_PATH_SUFFIXES
gflags/include # Windows (for C:/Program Files prefix).
gflags/Include ) # Windows (for C:/Program Files prefix).
- LIST(APPEND GFLAGS_CHECK_LIBRARY_DIRS
+ list(APPEND GFLAGS_CHECK_LIBRARY_DIRS
/usr/local/lib
/usr/local/homebrew/lib # Mac OS X.
/opt/local/lib
/usr/lib)
- LIST(APPEND GFLAGS_CHECK_LIBRARY_SUFFIXES
+ list(APPEND GFLAGS_CHECK_LIBRARY_SUFFIXES
gflags/lib # Windows (for C:/Program Files prefix).
gflags/Lib ) # Windows (for C:/Program Files prefix).
# Search supplied hint directories first if supplied.
- FIND_PATH(GFLAGS_INCLUDE_DIR
+ find_path(GFLAGS_INCLUDE_DIR
NAMES gflags/gflags.h
PATHS ${GFLAGS_INCLUDE_DIR_HINTS}
${GFLAGS_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${GFLAGS_CHECK_PATH_SUFFIXES})
- IF (NOT GFLAGS_INCLUDE_DIR OR
+ if (NOT GFLAGS_INCLUDE_DIR OR
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
- GFLAGS_REPORT_NOT_FOUND(
+ gflags_report_not_found(
"Could not find gflags include directory, set GFLAGS_INCLUDE_DIR "
"to directory containing gflags/gflags.h")
- ENDIF (NOT GFLAGS_INCLUDE_DIR OR
+ endif (NOT GFLAGS_INCLUDE_DIR OR
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
- FIND_LIBRARY(GFLAGS_LIBRARY NAMES gflags
+ find_library(GFLAGS_LIBRARY NAMES gflags
PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
${GFLAGS_CHECK_LIBRARY_DIRS}
PATH_SUFFIXES ${GFLAGS_CHECK_LIBRARY_SUFFIXES})
- IF (NOT GFLAGS_LIBRARY OR
+ if (NOT GFLAGS_LIBRARY OR
NOT EXISTS ${GFLAGS_LIBRARY})
- GFLAGS_REPORT_NOT_FOUND(
+ gflags_report_not_found(
"Could not find gflags library, set GFLAGS_LIBRARY "
"to full path to libgflags.")
- ENDIF (NOT GFLAGS_LIBRARY OR
+ endif (NOT GFLAGS_LIBRARY OR
NOT EXISTS ${GFLAGS_LIBRARY})
# gflags typically requires a threading library (which is OS dependent), note
# that this defines the CMAKE_THREAD_LIBS_INIT variable. If we are able to
# detect threads, we assume that gflags requires it.
- FIND_PACKAGE(Threads QUIET)
- SET(GFLAGS_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+ find_package(Threads QUIET)
+ set(GFLAGS_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
# On Windows (including MinGW), the Shlwapi library is used by gflags if
# available.
- IF (WIN32)
- INCLUDE(CheckIncludeFileCXX)
- CHECK_INCLUDE_FILE_CXX("shlwapi.h" HAVE_SHLWAPI)
- IF (HAVE_SHLWAPI)
- LIST(APPEND GFLAGS_LINK_LIBRARIES shlwapi.lib)
- ENDIF(HAVE_SHLWAPI)
- ENDIF (WIN32)
+ if (WIN32)
+ include(CheckIncludeFileCXX)
+ check_include_file_cxx("shlwapi.h" HAVE_SHLWAPI)
+ if (HAVE_SHLWAPI)
+ list(APPEND GFLAGS_LINK_LIBRARIES shlwapi.lib)
+ endif(HAVE_SHLWAPI)
+ endif (WIN32)
# Mark internally as found, then verify. GFLAGS_REPORT_NOT_FOUND() unsets
# if called.
- SET(GFLAGS_FOUND TRUE)
+ set(GFLAGS_FOUND TRUE)
# Identify what namespace gflags was built with.
- IF (GFLAGS_INCLUDE_DIR AND NOT GFLAGS_NAMESPACE)
+ if (GFLAGS_INCLUDE_DIR AND NOT GFLAGS_NAMESPACE)
# To handle Windows peculiarities / CMake bugs on MSVC we try two approaches
# to detect the gflags namespace:
#
@@ -495,27 +495,27 @@
# 2) [In the event 1) fails] Use regex on the gflags headers to try to
# determine the gflags namespace. Whilst this is less robust than 1),
# it does avoid any interaction with msbuild.
- GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_TRY_COMPILE()
+ gflags_check_gflags_namespace_using_try_compile()
- IF (NOT GFLAGS_NAMESPACE)
+ if (NOT GFLAGS_NAMESPACE)
# Failed to determine gflags namespace using check_cxx_source_compiles()
# method, try and obtain it using regex on the gflags headers instead.
- MESSAGE(STATUS "Failed to find gflags namespace using using "
+ message(STATUS "Failed to find gflags namespace using using "
"check_cxx_source_compiles(), trying namespace regex instead, "
"this is expected on Windows.")
- GFLAGS_CHECK_GFLAGS_NAMESPACE_USING_REGEX()
+ gflags_check_gflags_namespace_using_regex()
- IF (NOT GFLAGS_NAMESPACE)
- GFLAGS_REPORT_NOT_FOUND(
+ if (NOT GFLAGS_NAMESPACE)
+ gflags_report_not_found(
"Failed to determine gflags namespace either by "
"check_cxx_source_compiles(), or namespace regex.")
- ENDIF (NOT GFLAGS_NAMESPACE)
- ENDIF (NOT GFLAGS_NAMESPACE)
- ENDIF (GFLAGS_INCLUDE_DIR AND NOT GFLAGS_NAMESPACE)
+ endif (NOT GFLAGS_NAMESPACE)
+ endif (NOT GFLAGS_NAMESPACE)
+ endif (GFLAGS_INCLUDE_DIR AND NOT GFLAGS_NAMESPACE)
# Make the GFLAGS_NAMESPACE a cache variable s/t the user can view it, and could
# overwrite it in the CMake GUI.
- SET(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" CACHE STRING
+ set(GFLAGS_NAMESPACE "${GFLAGS_NAMESPACE}" CACHE STRING
"gflags namespace (google or gflags)" FORCE)
# gflags does not seem to provide any record of the version in its
@@ -523,55 +523,55 @@
# Catch case when caller has set GFLAGS_NAMESPACE in the cache / GUI
# with an invalid value.
- IF (GFLAGS_NAMESPACE AND
+ if (GFLAGS_NAMESPACE AND
NOT GFLAGS_NAMESPACE STREQUAL "google" AND
NOT GFLAGS_NAMESPACE STREQUAL "gflags")
- GFLAGS_REPORT_NOT_FOUND(
+ gflags_report_not_found(
"Caller defined GFLAGS_NAMESPACE:"
" ${GFLAGS_NAMESPACE} is not valid, not google or gflags.")
- ENDIF ()
+ endif ()
# Catch case when caller has set GFLAGS_INCLUDE_DIR in the cache / GUI and
# thus FIND_[PATH/LIBRARY] are not called, but specified locations are
# invalid, otherwise we would report the library as found.
- IF (GFLAGS_INCLUDE_DIR AND
+ if (GFLAGS_INCLUDE_DIR AND
NOT EXISTS ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
- GFLAGS_REPORT_NOT_FOUND(
+ gflags_report_not_found(
"Caller defined GFLAGS_INCLUDE_DIR:"
" ${GFLAGS_INCLUDE_DIR} does not contain gflags/gflags.h header.")
- ENDIF (GFLAGS_INCLUDE_DIR AND
+ endif (GFLAGS_INCLUDE_DIR AND
NOT EXISTS ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
# TODO: This regex for gflags library is pretty primitive, we use lowercase
# for comparison to handle Windows using CamelCase library names, could
# this check be better?
- STRING(TOLOWER "${GFLAGS_LIBRARY}" LOWERCASE_GFLAGS_LIBRARY)
- IF (GFLAGS_LIBRARY AND
+ string(TOLOWER "${GFLAGS_LIBRARY}" LOWERCASE_GFLAGS_LIBRARY)
+ if (GFLAGS_LIBRARY AND
NOT "${LOWERCASE_GFLAGS_LIBRARY}" MATCHES ".*gflags[^/]*")
- GFLAGS_REPORT_NOT_FOUND(
+ gflags_report_not_found(
"Caller defined GFLAGS_LIBRARY: "
"${GFLAGS_LIBRARY} does not match gflags.")
- ENDIF (GFLAGS_LIBRARY AND
+ endif (GFLAGS_LIBRARY AND
NOT "${LOWERCASE_GFLAGS_LIBRARY}" MATCHES ".*gflags[^/]*")
- GFLAGS_RESET_FIND_LIBRARY_PREFIX()
+ gflags_reset_find_library_prefix()
-ENDIF(NOT GFLAGS_FOUND)
+endif(NOT GFLAGS_FOUND)
# Set standard CMake FindPackage variables if found.
-IF (GFLAGS_FOUND)
- SET(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
- SET(GFLAGS_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
-ENDIF (GFLAGS_FOUND)
+if (GFLAGS_FOUND)
+ set(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
+ set(GFLAGS_LIBRARIES ${GFLAGS_LIBRARY} ${GFLAGS_LINK_LIBRARIES})
+endif (GFLAGS_FOUND)
# Handle REQUIRED / QUIET optional arguments.
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Gflags DEFAULT_MSG
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Gflags DEFAULT_MSG
GFLAGS_INCLUDE_DIRS GFLAGS_LIBRARIES GFLAGS_NAMESPACE)
# Only mark internal variables as advanced if we found gflags, otherwise
# leave them visible in the standard GUI for the user to set manually.
-IF (GFLAGS_FOUND)
- MARK_AS_ADVANCED(FORCE GFLAGS_INCLUDE_DIR
+if (GFLAGS_FOUND)
+ mark_as_advanced(FORCE GFLAGS_INCLUDE_DIR
GFLAGS_LIBRARY
GFLAGS_NAMESPACE
gflags_DIR) # Autogenerated by find_package(gflags)
-ENDIF (GFLAGS_FOUND)
+endif (GFLAGS_FOUND)
diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake
index 4f5a6b5..9ec157a 100644
--- a/cmake/FindGlog.cmake
+++ b/cmake/FindGlog.cmake
@@ -62,106 +62,106 @@
# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
# FindGlog was invoked.
-MACRO(GLOG_RESET_FIND_LIBRARY_PREFIX)
- IF (MSVC)
- SET(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
- ENDIF (MSVC)
-ENDMACRO(GLOG_RESET_FIND_LIBRARY_PREFIX)
+macro(GLOG_RESET_FIND_LIBRARY_PREFIX)
+ if (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
+ endif (MSVC)
+endmacro(GLOG_RESET_FIND_LIBRARY_PREFIX)
# Called if we failed to find glog or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(GLOG_REPORT_NOT_FOUND REASON_MSG)
- UNSET(GLOG_FOUND)
- UNSET(GLOG_INCLUDE_DIRS)
- UNSET(GLOG_LIBRARIES)
+macro(GLOG_REPORT_NOT_FOUND REASON_MSG)
+ unset(GLOG_FOUND)
+ unset(GLOG_INCLUDE_DIRS)
+ unset(GLOG_LIBRARIES)
# Make results of search visible in the CMake GUI if glog has not
# been found so that user does not have to toggle to advanced view.
- MARK_AS_ADVANCED(CLEAR GLOG_INCLUDE_DIR
+ mark_as_advanced(CLEAR GLOG_INCLUDE_DIR
GLOG_LIBRARY)
- GLOG_RESET_FIND_LIBRARY_PREFIX()
+ glog_reset_find_library_prefix()
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
# use the camelcase library name, not uppercase.
- IF (Glog_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find glog - " ${REASON_MSG} ${ARGN})
- ELSEIF (Glog_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find glog - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (Glog_FIND_QUIETLY)
+ message(STATUS "Failed to find glog - " ${REASON_MSG} ${ARGN})
+ elseif (Glog_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find glog - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use no priority which emits a message
# but continues configuration and allows generation.
- MESSAGE("-- Failed to find glog - " ${REASON_MSG} ${ARGN})
- ENDIF ()
-ENDMACRO(GLOG_REPORT_NOT_FOUND)
+ message("-- Failed to find glog - " ${REASON_MSG} ${ARGN})
+ endif ()
+endmacro(GLOG_REPORT_NOT_FOUND)
# Handle possible presence of lib prefix for libraries on MSVC, see
# also GLOG_RESET_FIND_LIBRARY_PREFIX().
-IF (MSVC)
+if (MSVC)
# Preserve the caller's original values for CMAKE_FIND_LIBRARY_PREFIXES
# s/t we can set it back before returning.
- SET(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
+ set(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
# The empty string in this list is important, it represents the case when
# the libraries have no prefix (shared libraries / DLLs).
- SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
-ENDIF (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
+endif (MSVC)
# Search user-installed locations first, so that we prefer user installs
# to system installs where both exist.
-LIST(APPEND GLOG_CHECK_INCLUDE_DIRS
+list(APPEND GLOG_CHECK_INCLUDE_DIRS
/usr/local/include
/usr/local/homebrew/include # Mac OS X
/opt/local/var/macports/software # Mac OS X.
/opt/local/include
/usr/include)
# Windows (for C:/Program Files prefix).
-LIST(APPEND GLOG_CHECK_PATH_SUFFIXES
+list(APPEND GLOG_CHECK_PATH_SUFFIXES
glog/include
glog/Include
Glog/include
Glog/Include)
-LIST(APPEND GLOG_CHECK_LIBRARY_DIRS
+list(APPEND GLOG_CHECK_LIBRARY_DIRS
/usr/local/lib
/usr/local/homebrew/lib # Mac OS X.
/opt/local/lib
/usr/lib)
# Windows (for C:/Program Files prefix).
-LIST(APPEND GLOG_CHECK_LIBRARY_SUFFIXES
+list(APPEND GLOG_CHECK_LIBRARY_SUFFIXES
glog/lib
glog/Lib
Glog/lib
Glog/Lib)
# Search supplied hint directories first if supplied.
-FIND_PATH(GLOG_INCLUDE_DIR
+find_path(GLOG_INCLUDE_DIR
NAMES glog/logging.h
PATHS ${GLOG_INCLUDE_DIR_HINTS}
${GLOG_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${GLOG_CHECK_PATH_SUFFIXES})
-IF (NOT GLOG_INCLUDE_DIR OR
+if (NOT GLOG_INCLUDE_DIR OR
NOT EXISTS ${GLOG_INCLUDE_DIR})
- GLOG_REPORT_NOT_FOUND(
+ glog_report_not_found(
"Could not find glog include directory, set GLOG_INCLUDE_DIR "
"to directory containing glog/logging.h")
-ENDIF (NOT GLOG_INCLUDE_DIR OR
+endif (NOT GLOG_INCLUDE_DIR OR
NOT EXISTS ${GLOG_INCLUDE_DIR})
-FIND_LIBRARY(GLOG_LIBRARY NAMES glog
+find_library(GLOG_LIBRARY NAMES glog
PATHS ${GLOG_LIBRARY_DIR_HINTS}
${GLOG_CHECK_LIBRARY_DIRS}
PATH_SUFFIXES ${GLOG_CHECK_LIBRARY_SUFFIXES})
-IF (NOT GLOG_LIBRARY OR
+if (NOT GLOG_LIBRARY OR
NOT EXISTS ${GLOG_LIBRARY})
- GLOG_REPORT_NOT_FOUND(
+ glog_report_not_found(
"Could not find glog library, set GLOG_LIBRARY "
"to full path to libglog.")
-ENDIF (NOT GLOG_LIBRARY OR
+endif (NOT GLOG_LIBRARY OR
NOT EXISTS ${GLOG_LIBRARY})
# Mark internally as found, then verify. GLOG_REPORT_NOT_FOUND() unsets
# if called.
-SET(GLOG_FOUND TRUE)
+set(GLOG_FOUND TRUE)
# Glog does not seem to provide any record of the version in its
# source tree, thus cannot extract version.
@@ -169,41 +169,41 @@
# Catch case when caller has set GLOG_INCLUDE_DIR in the cache / GUI and
# thus FIND_[PATH/LIBRARY] are not called, but specified locations are
# invalid, otherwise we would report the library as found.
-IF (GLOG_INCLUDE_DIR AND
+if (GLOG_INCLUDE_DIR AND
NOT EXISTS ${GLOG_INCLUDE_DIR}/glog/logging.h)
- GLOG_REPORT_NOT_FOUND(
+ glog_report_not_found(
"Caller defined GLOG_INCLUDE_DIR:"
" ${GLOG_INCLUDE_DIR} does not contain glog/logging.h header.")
-ENDIF (GLOG_INCLUDE_DIR AND
+endif (GLOG_INCLUDE_DIR AND
NOT EXISTS ${GLOG_INCLUDE_DIR}/glog/logging.h)
# TODO: This regex for glog library is pretty primitive, we use lowercase
# for comparison to handle Windows using CamelCase library names, could
# this check be better?
-STRING(TOLOWER "${GLOG_LIBRARY}" LOWERCASE_GLOG_LIBRARY)
-IF (GLOG_LIBRARY AND
+string(TOLOWER "${GLOG_LIBRARY}" LOWERCASE_GLOG_LIBRARY)
+if (GLOG_LIBRARY AND
NOT "${LOWERCASE_GLOG_LIBRARY}" MATCHES ".*glog[^/]*")
- GLOG_REPORT_NOT_FOUND(
+ glog_report_not_found(
"Caller defined GLOG_LIBRARY: "
"${GLOG_LIBRARY} does not match glog.")
-ENDIF (GLOG_LIBRARY AND
+endif (GLOG_LIBRARY AND
NOT "${LOWERCASE_GLOG_LIBRARY}" MATCHES ".*glog[^/]*")
# Set standard CMake FindPackage variables if found.
-IF (GLOG_FOUND)
- SET(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
- SET(GLOG_LIBRARIES ${GLOG_LIBRARY})
-ENDIF (GLOG_FOUND)
+if (GLOG_FOUND)
+ set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
+ set(GLOG_LIBRARIES ${GLOG_LIBRARY})
+endif (GLOG_FOUND)
-GLOG_RESET_FIND_LIBRARY_PREFIX()
+glog_reset_find_library_prefix()
# Handle REQUIRED / QUIET optional arguments.
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Glog DEFAULT_MSG
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Glog DEFAULT_MSG
GLOG_INCLUDE_DIRS GLOG_LIBRARIES)
# Only mark internal variables as advanced if we found glog, otherwise
# leave them visible in the standard GUI for the user to set manually.
-IF (GLOG_FOUND)
- MARK_AS_ADVANCED(FORCE GLOG_INCLUDE_DIR
+if (GLOG_FOUND)
+ mark_as_advanced(FORCE GLOG_INCLUDE_DIR
GLOG_LIBRARY)
-ENDIF (GLOG_FOUND)
+endif (GLOG_FOUND)
diff --git a/cmake/FindSharedPtr.cmake b/cmake/FindSharedPtr.cmake
index 3135dd5..e37c969 100644
--- a/cmake/FindSharedPtr.cmake
+++ b/cmake/FindSharedPtr.cmake
@@ -39,70 +39,70 @@
# SHARED_PTR_TR1_NAMESPACE: TRUE if shared_ptr is defined in std::tr1 namespace,
# otherwise it's assumed to be defined in std namespace.
-MACRO(FIND_SHARED_PTR)
+macro(FIND_SHARED_PTR)
# To support CXX11 option, clear the results of all check_xxx() functions
# s/t we always perform the checks each time, otherwise CMake fails to
# detect that the tests should be performed again after CXX11 is toggled.
- UNSET(HAVE_STD_MEMORY_HEADER CACHE)
- UNSET(HAVE_SHARED_PTR_IN_STD_NAMESPACE CACHE)
- UNSET(HAVE_SHARED_PTR_IN_TR1_NAMESPACE CACHE)
- UNSET(HAVE_TR1_MEMORY_HEADER CACHE)
- UNSET(HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER CACHE)
+ unset(HAVE_STD_MEMORY_HEADER CACHE)
+ unset(HAVE_SHARED_PTR_IN_STD_NAMESPACE CACHE)
+ unset(HAVE_SHARED_PTR_IN_TR1_NAMESPACE CACHE)
+ unset(HAVE_TR1_MEMORY_HEADER CACHE)
+ unset(HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER CACHE)
- SET(SHARED_PTR_FOUND FALSE)
- CHECK_INCLUDE_FILE_CXX(memory HAVE_STD_MEMORY_HEADER)
- IF (HAVE_STD_MEMORY_HEADER)
+ set(SHARED_PTR_FOUND FALSE)
+ check_include_file_cxx(memory HAVE_STD_MEMORY_HEADER)
+ if (HAVE_STD_MEMORY_HEADER)
# Finding the memory header doesn't mean that shared_ptr is in std
# namespace.
#
# In particular, MSVC 2008 has shared_ptr declared in std::tr1. In
# order to support this, we do an extra check to see which namespace
# should be used.
- INCLUDE(CheckCXXSourceCompiles)
- CHECK_CXX_SOURCE_COMPILES("#include <memory>
+ include(CheckCXXSourceCompiles)
+ check_cxx_source_compiles("#include <memory>
int main() {
std::shared_ptr<int> int_ptr;
return 0;
}"
HAVE_SHARED_PTR_IN_STD_NAMESPACE)
- IF (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
- MESSAGE("-- Found shared_ptr in std namespace using <memory> header.")
- SET(SHARED_PTR_FOUND TRUE)
- ELSE (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
- CHECK_CXX_SOURCE_COMPILES("#include <memory>
+ if (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
+ message("-- Found shared_ptr in std namespace using <memory> header.")
+ set(SHARED_PTR_FOUND TRUE)
+ else (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
+ check_cxx_source_compiles("#include <memory>
int main() {
std::tr1::shared_ptr<int> int_ptr;
return 0;
}"
HAVE_SHARED_PTR_IN_TR1_NAMESPACE)
- IF (HAVE_SHARED_PTR_IN_TR1_NAMESPACE)
- MESSAGE("-- Found shared_ptr in std::tr1 namespace using <memory> header.")
- SET(SHARED_PTR_TR1_NAMESPACE TRUE)
- SET(SHARED_PTR_FOUND TRUE)
- ENDIF (HAVE_SHARED_PTR_IN_TR1_NAMESPACE)
- ENDIF (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
- ENDIF (HAVE_STD_MEMORY_HEADER)
+ if (HAVE_SHARED_PTR_IN_TR1_NAMESPACE)
+ message("-- Found shared_ptr in std::tr1 namespace using <memory> header.")
+ set(SHARED_PTR_TR1_NAMESPACE TRUE)
+ set(SHARED_PTR_FOUND TRUE)
+ endif (HAVE_SHARED_PTR_IN_TR1_NAMESPACE)
+ endif (HAVE_SHARED_PTR_IN_STD_NAMESPACE)
+ endif (HAVE_STD_MEMORY_HEADER)
- IF (NOT SHARED_PTR_FOUND)
+ if (NOT SHARED_PTR_FOUND)
# Further, gcc defines shared_ptr in std::tr1 namespace and
# <tr1/memory> is to be included for this. And what makes things
# even more tricky is that gcc does have <memory> header, so
# all the checks above wouldn't find shared_ptr.
- CHECK_INCLUDE_FILE_CXX("tr1/memory" HAVE_TR1_MEMORY_HEADER)
- IF (HAVE_TR1_MEMORY_HEADER)
- CHECK_CXX_SOURCE_COMPILES("#include <tr1/memory>
+ check_include_file_cxx("tr1/memory" HAVE_TR1_MEMORY_HEADER)
+ if (HAVE_TR1_MEMORY_HEADER)
+ check_cxx_source_compiles("#include <tr1/memory>
int main() {
std::tr1::shared_ptr<int> int_ptr;
return 0;
}"
HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER)
- IF (HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER)
- MESSAGE("-- Found shared_ptr in std::tr1 namespace using <tr1/memory> header.")
- SET(SHARED_PTR_TR1_MEMORY_HEADER TRUE)
- SET(SHARED_PTR_TR1_NAMESPACE TRUE)
- SET(SHARED_PTR_FOUND TRUE)
- ENDIF (HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER)
- ENDIF (HAVE_TR1_MEMORY_HEADER)
- ENDIF (NOT SHARED_PTR_FOUND)
-ENDMACRO(FIND_SHARED_PTR)
+ if (HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER)
+ message("-- Found shared_ptr in std::tr1 namespace using <tr1/memory> header.")
+ set(SHARED_PTR_TR1_MEMORY_HEADER TRUE)
+ set(SHARED_PTR_TR1_NAMESPACE TRUE)
+ set(SHARED_PTR_FOUND TRUE)
+ endif (HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER)
+ endif (HAVE_TR1_MEMORY_HEADER)
+ endif (NOT SHARED_PTR_FOUND)
+endmacro(FIND_SHARED_PTR)
diff --git a/cmake/FindSphinx.cmake b/cmake/FindSphinx.cmake
index aebf615..220108d 100644
--- a/cmake/FindSphinx.cmake
+++ b/cmake/FindSphinx.cmake
@@ -35,7 +35,7 @@
# SPHINX_EXECUTABLE
# SPHINX_FOUND
-FIND_PROGRAM(SPHINX_EXECUTABLE
+find_program(SPHINX_EXECUTABLE
NAMES sphinx-build
PATHS
/usr/bin
@@ -43,24 +43,24 @@
/opt/local/bin
DOC "Sphinx documentation generator")
-IF (NOT SPHINX_EXECUTABLE)
- SET(_Python_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5)
+if (NOT SPHINX_EXECUTABLE)
+ set(_Python_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5)
- FOREACH (_version ${_Python_VERSIONS})
- SET(_sphinx_NAMES sphinx-build-${_version})
+ foreach (_version ${_Python_VERSIONS})
+ set(_sphinx_NAMES sphinx-build-${_version})
- FIND_PROGRAM(SPHINX_EXECUTABLE
+ find_program(SPHINX_EXECUTABLE
NAMES ${_sphinx_NAMES}
PATHS
/usr/bin
/usr/local/bin
/opt/local/bin
DOC "Sphinx documentation generator")
- ENDFOREACH ()
-ENDIF ()
+ endforeach ()
+endif ()
-INCLUDE(FindPackageHandleStandardArgs)
+include(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE)
+find_package_handle_standard_args(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE)
-MARK_AS_ADVANCED(SPHINX_EXECUTABLE)
+mark_as_advanced(SPHINX_EXECUTABLE)
diff --git a/cmake/FindSuiteSparse.cmake b/cmake/FindSuiteSparse.cmake
index 3b5e814..1086a9c 100644
--- a/cmake/FindSuiteSparse.cmake
+++ b/cmake/FindSuiteSparse.cmake
@@ -112,60 +112,60 @@
# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
# FindSuiteSparse was invoked.
-MACRO(SUITESPARSE_RESET_FIND_LIBRARY_PREFIX)
- IF (MSVC)
- SET(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
- ENDIF (MSVC)
-ENDMACRO(SUITESPARSE_RESET_FIND_LIBRARY_PREFIX)
+macro(SUITESPARSE_RESET_FIND_LIBRARY_PREFIX)
+ if (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
+ endif (MSVC)
+endmacro(SUITESPARSE_RESET_FIND_LIBRARY_PREFIX)
# Called if we failed to find SuiteSparse or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-MACRO(SUITESPARSE_REPORT_NOT_FOUND REASON_MSG)
- UNSET(SUITESPARSE_FOUND)
- UNSET(SUITESPARSE_INCLUDE_DIRS)
- UNSET(SUITESPARSE_LIBRARIES)
- UNSET(SUITESPARSE_VERSION)
- UNSET(SUITESPARSE_MAIN_VERSION)
- UNSET(SUITESPARSE_SUB_VERSION)
- UNSET(SUITESPARSE_SUBSUB_VERSION)
+macro(SUITESPARSE_REPORT_NOT_FOUND REASON_MSG)
+ unset(SUITESPARSE_FOUND)
+ unset(SUITESPARSE_INCLUDE_DIRS)
+ unset(SUITESPARSE_LIBRARIES)
+ unset(SUITESPARSE_VERSION)
+ unset(SUITESPARSE_MAIN_VERSION)
+ unset(SUITESPARSE_SUB_VERSION)
+ unset(SUITESPARSE_SUBSUB_VERSION)
# Do NOT unset SUITESPARSE_FOUND_REQUIRED_VARS here, as it is used by
# FindPackageHandleStandardArgs() to generate the automatic error message on
# failure which highlights which components are missing.
- SUITESPARSE_RESET_FIND_LIBRARY_PREFIX()
+ suitesparse_reset_find_library_prefix()
# Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
# use the camelcase library name, not uppercase.
- IF (SuiteSparse_FIND_QUIETLY)
- MESSAGE(STATUS "Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
- ELSEIF (SuiteSparse_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
- ELSE()
+ if (SuiteSparse_FIND_QUIETLY)
+ message(STATUS "Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
+ elseif (SuiteSparse_FIND_REQUIRED)
+ message(FATAL_ERROR "Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
+ else()
# Neither QUIETLY nor REQUIRED, use no priority which emits a message
# but continues configuration and allows generation.
- MESSAGE("-- Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
- ENDIF (SuiteSparse_FIND_QUIETLY)
+ message("-- Failed to find SuiteSparse - " ${REASON_MSG} ${ARGN})
+ endif (SuiteSparse_FIND_QUIETLY)
# Do not call RETURN(), s/t we keep processing if not called with REQUIRED.
-ENDMACRO(SUITESPARSE_REPORT_NOT_FOUND)
+endmacro(SUITESPARSE_REPORT_NOT_FOUND)
# Handle possible presence of lib prefix for libraries on MSVC, see
# also SUITESPARSE_RESET_FIND_LIBRARY_PREFIX().
-IF (MSVC)
+if (MSVC)
# Preserve the caller's original values for CMAKE_FIND_LIBRARY_PREFIXES
# s/t we can set it back before returning.
- SET(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
+ set(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
# The empty string in this list is important, it represents the case when
# the libraries have no prefix (shared libraries / DLLs).
- SET(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
-ENDIF (MSVC)
+ set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
+endif (MSVC)
# Specify search directories for include files and libraries (this is the union
# of the search directories for all OSs). Search user-specified hint
# directories first if supplied, and search user-installed locations first
# so that we prefer user installs to system installs where both exist.
-LIST(APPEND SUITESPARSE_CHECK_INCLUDE_DIRS
+list(APPEND SUITESPARSE_CHECK_INCLUDE_DIRS
${SUITESPARSE_INCLUDE_DIR_HINTS}
/opt/local/include
/opt/local/include/ufsparse # Mac OS X
@@ -174,7 +174,7 @@
/usr/local/include/suitesparse
/usr/include/suitesparse # Ubuntu
/usr/include)
-LIST(APPEND SUITESPARSE_CHECK_LIBRARY_DIRS
+list(APPEND SUITESPARSE_CHECK_LIBRARY_DIRS
${SUITESPARSE_LIBRARY_DIR_HINTS}
/opt/local/lib
/opt/local/lib/ufsparse # Mac OS X
@@ -188,380 +188,380 @@
# automatic failure message generated by FindPackageHandleStandardArgs()
# when not all required components are found is helpful, we maintain a list
# of all variables that must be defined for SuiteSparse to be considered found.
-UNSET(SUITESPARSE_FOUND_REQUIRED_VARS)
+unset(SUITESPARSE_FOUND_REQUIRED_VARS)
# BLAS.
-FIND_PACKAGE(BLAS QUIET)
-IF (NOT BLAS_FOUND)
- SUITESPARSE_REPORT_NOT_FOUND(
+find_package(BLAS QUIET)
+if (NOT BLAS_FOUND)
+ suitesparse_report_not_found(
"Did not find BLAS library (required for SuiteSparse).")
-ENDIF (NOT BLAS_FOUND)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS BLAS_FOUND)
+endif (NOT BLAS_FOUND)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS BLAS_FOUND)
# LAPACK.
-FIND_PACKAGE(LAPACK QUIET)
-IF (NOT LAPACK_FOUND)
- SUITESPARSE_REPORT_NOT_FOUND(
+find_package(LAPACK QUIET)
+if (NOT LAPACK_FOUND)
+ suitesparse_report_not_found(
"Did not find LAPACK library (required for SuiteSparse).")
-ENDIF (NOT LAPACK_FOUND)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS LAPACK_FOUND)
+endif (NOT LAPACK_FOUND)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS LAPACK_FOUND)
# AMD.
-SET(AMD_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS AMD_FOUND)
-FIND_LIBRARY(AMD_LIBRARY NAMES amd
+set(AMD_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS AMD_FOUND)
+find_library(AMD_LIBRARY NAMES amd
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${AMD_LIBRARY})
- MESSAGE(STATUS "Found AMD library: ${AMD_LIBRARY}")
-ELSE (EXISTS ${AMD_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${AMD_LIBRARY})
+ message(STATUS "Found AMD library: ${AMD_LIBRARY}")
+else (EXISTS ${AMD_LIBRARY})
+ suitesparse_report_not_found(
"Did not find AMD library (required SuiteSparse component).")
- SET(AMD_FOUND FALSE)
-ENDIF (EXISTS ${AMD_LIBRARY})
-MARK_AS_ADVANCED(AMD_LIBRARY)
+ set(AMD_FOUND FALSE)
+endif (EXISTS ${AMD_LIBRARY})
+mark_as_advanced(AMD_LIBRARY)
-FIND_PATH(AMD_INCLUDE_DIR NAMES amd.h
+find_path(AMD_INCLUDE_DIR NAMES amd.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${AMD_INCLUDE_DIR})
- MESSAGE(STATUS "Found AMD header in: ${AMD_INCLUDE_DIR}")
-ELSE (EXISTS ${AMD_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${AMD_INCLUDE_DIR})
+ message(STATUS "Found AMD header in: ${AMD_INCLUDE_DIR}")
+else (EXISTS ${AMD_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find AMD header (required SuiteSparse component).")
- SET(AMD_FOUND FALSE)
-ENDIF (EXISTS ${AMD_INCLUDE_DIR})
-MARK_AS_ADVANCED(AMD_INCLUDE_DIR)
+ set(AMD_FOUND FALSE)
+endif (EXISTS ${AMD_INCLUDE_DIR})
+mark_as_advanced(AMD_INCLUDE_DIR)
# CAMD.
-SET(CAMD_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CAMD_FOUND)
-FIND_LIBRARY(CAMD_LIBRARY NAMES camd
+set(CAMD_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CAMD_FOUND)
+find_library(CAMD_LIBRARY NAMES camd
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${CAMD_LIBRARY})
- MESSAGE(STATUS "Found CAMD library: ${CAMD_LIBRARY}")
-ELSE (EXISTS ${CAMD_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CAMD_LIBRARY})
+ message(STATUS "Found CAMD library: ${CAMD_LIBRARY}")
+else (EXISTS ${CAMD_LIBRARY})
+ suitesparse_report_not_found(
"Did not find CAMD library (required SuiteSparse component).")
- SET(CAMD_FOUND FALSE)
-ENDIF (EXISTS ${CAMD_LIBRARY})
-MARK_AS_ADVANCED(CAMD_LIBRARY)
+ set(CAMD_FOUND FALSE)
+endif (EXISTS ${CAMD_LIBRARY})
+mark_as_advanced(CAMD_LIBRARY)
-FIND_PATH(CAMD_INCLUDE_DIR NAMES camd.h
+find_path(CAMD_INCLUDE_DIR NAMES camd.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${CAMD_INCLUDE_DIR})
- MESSAGE(STATUS "Found CAMD header in: ${CAMD_INCLUDE_DIR}")
-ELSE (EXISTS ${CAMD_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CAMD_INCLUDE_DIR})
+ message(STATUS "Found CAMD header in: ${CAMD_INCLUDE_DIR}")
+else (EXISTS ${CAMD_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find CAMD header (required SuiteSparse component).")
- SET(CAMD_FOUND FALSE)
-ENDIF (EXISTS ${CAMD_INCLUDE_DIR})
-MARK_AS_ADVANCED(CAMD_INCLUDE_DIR)
+ set(CAMD_FOUND FALSE)
+endif (EXISTS ${CAMD_INCLUDE_DIR})
+mark_as_advanced(CAMD_INCLUDE_DIR)
# COLAMD.
-SET(COLAMD_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS COLAMD_FOUND)
-FIND_LIBRARY(COLAMD_LIBRARY NAMES colamd
+set(COLAMD_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS COLAMD_FOUND)
+find_library(COLAMD_LIBRARY NAMES colamd
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${COLAMD_LIBRARY})
- MESSAGE(STATUS "Found COLAMD library: ${COLAMD_LIBRARY}")
-ELSE (EXISTS ${COLAMD_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${COLAMD_LIBRARY})
+ message(STATUS "Found COLAMD library: ${COLAMD_LIBRARY}")
+else (EXISTS ${COLAMD_LIBRARY})
+ suitesparse_report_not_found(
"Did not find COLAMD library (required SuiteSparse component).")
- SET(COLAMD_FOUND FALSE)
-ENDIF (EXISTS ${COLAMD_LIBRARY})
-MARK_AS_ADVANCED(COLAMD_LIBRARY)
+ set(COLAMD_FOUND FALSE)
+endif (EXISTS ${COLAMD_LIBRARY})
+mark_as_advanced(COLAMD_LIBRARY)
-FIND_PATH(COLAMD_INCLUDE_DIR NAMES colamd.h
+find_path(COLAMD_INCLUDE_DIR NAMES colamd.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${COLAMD_INCLUDE_DIR})
- MESSAGE(STATUS "Found COLAMD header in: ${COLAMD_INCLUDE_DIR}")
-ELSE (EXISTS ${COLAMD_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${COLAMD_INCLUDE_DIR})
+ message(STATUS "Found COLAMD header in: ${COLAMD_INCLUDE_DIR}")
+else (EXISTS ${COLAMD_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find COLAMD header (required SuiteSparse component).")
- SET(COLAMD_FOUND FALSE)
-ENDIF (EXISTS ${COLAMD_INCLUDE_DIR})
-MARK_AS_ADVANCED(COLAMD_INCLUDE_DIR)
+ set(COLAMD_FOUND FALSE)
+endif (EXISTS ${COLAMD_INCLUDE_DIR})
+mark_as_advanced(COLAMD_INCLUDE_DIR)
# CCOLAMD.
-SET(CCOLAMD_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CCOLAMD_FOUND)
-FIND_LIBRARY(CCOLAMD_LIBRARY NAMES ccolamd
+set(CCOLAMD_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CCOLAMD_FOUND)
+find_library(CCOLAMD_LIBRARY NAMES ccolamd
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${CCOLAMD_LIBRARY})
- MESSAGE(STATUS "Found CCOLAMD library: ${CCOLAMD_LIBRARY}")
-ELSE (EXISTS ${CCOLAMD_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CCOLAMD_LIBRARY})
+ message(STATUS "Found CCOLAMD library: ${CCOLAMD_LIBRARY}")
+else (EXISTS ${CCOLAMD_LIBRARY})
+ suitesparse_report_not_found(
"Did not find CCOLAMD library (required SuiteSparse component).")
- SET(CCOLAMD_FOUND FALSE)
-ENDIF (EXISTS ${CCOLAMD_LIBRARY})
-MARK_AS_ADVANCED(CCOLAMD_LIBRARY)
+ set(CCOLAMD_FOUND FALSE)
+endif (EXISTS ${CCOLAMD_LIBRARY})
+mark_as_advanced(CCOLAMD_LIBRARY)
-FIND_PATH(CCOLAMD_INCLUDE_DIR NAMES ccolamd.h
+find_path(CCOLAMD_INCLUDE_DIR NAMES ccolamd.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${CCOLAMD_INCLUDE_DIR})
- MESSAGE(STATUS "Found CCOLAMD header in: ${CCOLAMD_INCLUDE_DIR}")
-ELSE (EXISTS ${CCOLAMD_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CCOLAMD_INCLUDE_DIR})
+ message(STATUS "Found CCOLAMD header in: ${CCOLAMD_INCLUDE_DIR}")
+else (EXISTS ${CCOLAMD_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find CCOLAMD header (required SuiteSparse component).")
- SET(CCOLAMD_FOUND FALSE)
-ENDIF (EXISTS ${CCOLAMD_INCLUDE_DIR})
-MARK_AS_ADVANCED(CCOLAMD_INCLUDE_DIR)
+ set(CCOLAMD_FOUND FALSE)
+endif (EXISTS ${CCOLAMD_INCLUDE_DIR})
+mark_as_advanced(CCOLAMD_INCLUDE_DIR)
# CHOLMOD.
-SET(CHOLMOD_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CHOLMOD_FOUND)
-FIND_LIBRARY(CHOLMOD_LIBRARY NAMES cholmod
+set(CHOLMOD_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CHOLMOD_FOUND)
+find_library(CHOLMOD_LIBRARY NAMES cholmod
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${CHOLMOD_LIBRARY})
- MESSAGE(STATUS "Found CHOLMOD library: ${CHOLMOD_LIBRARY}")
-ELSE (EXISTS ${CHOLMOD_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CHOLMOD_LIBRARY})
+ message(STATUS "Found CHOLMOD library: ${CHOLMOD_LIBRARY}")
+else (EXISTS ${CHOLMOD_LIBRARY})
+ suitesparse_report_not_found(
"Did not find CHOLMOD library (required SuiteSparse component).")
- SET(CHOLMOD_FOUND FALSE)
-ENDIF (EXISTS ${CHOLMOD_LIBRARY})
-MARK_AS_ADVANCED(CHOLMOD_LIBRARY)
+ set(CHOLMOD_FOUND FALSE)
+endif (EXISTS ${CHOLMOD_LIBRARY})
+mark_as_advanced(CHOLMOD_LIBRARY)
-FIND_PATH(CHOLMOD_INCLUDE_DIR NAMES cholmod.h
+find_path(CHOLMOD_INCLUDE_DIR NAMES cholmod.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${CHOLMOD_INCLUDE_DIR})
- MESSAGE(STATUS "Found CHOLMOD header in: ${CHOLMOD_INCLUDE_DIR}")
-ELSE (EXISTS ${CHOLMOD_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${CHOLMOD_INCLUDE_DIR})
+ message(STATUS "Found CHOLMOD header in: ${CHOLMOD_INCLUDE_DIR}")
+else (EXISTS ${CHOLMOD_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find CHOLMOD header (required SuiteSparse component).")
- SET(CHOLMOD_FOUND FALSE)
-ENDIF (EXISTS ${CHOLMOD_INCLUDE_DIR})
-MARK_AS_ADVANCED(CHOLMOD_INCLUDE_DIR)
+ set(CHOLMOD_FOUND FALSE)
+endif (EXISTS ${CHOLMOD_INCLUDE_DIR})
+mark_as_advanced(CHOLMOD_INCLUDE_DIR)
# SuiteSparseQR.
-SET(SUITESPARSEQR_FOUND TRUE)
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSEQR_FOUND)
-FIND_LIBRARY(SUITESPARSEQR_LIBRARY NAMES spqr
+set(SUITESPARSEQR_FOUND TRUE)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSEQR_FOUND)
+find_library(SUITESPARSEQR_LIBRARY NAMES spqr
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${SUITESPARSEQR_LIBRARY})
- MESSAGE(STATUS "Found SuiteSparseQR library: ${SUITESPARSEQR_LIBRARY}")
-ELSE (EXISTS ${SUITESPARSEQR_LIBRARY})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${SUITESPARSEQR_LIBRARY})
+ message(STATUS "Found SuiteSparseQR library: ${SUITESPARSEQR_LIBRARY}")
+else (EXISTS ${SUITESPARSEQR_LIBRARY})
+ suitesparse_report_not_found(
"Did not find SuiteSparseQR library (required SuiteSparse component).")
- SET(SUITESPARSEQR_FOUND FALSE)
-ENDIF (EXISTS ${SUITESPARSEQR_LIBRARY})
-MARK_AS_ADVANCED(SUITESPARSEQR_LIBRARY)
+ set(SUITESPARSEQR_FOUND FALSE)
+endif (EXISTS ${SUITESPARSEQR_LIBRARY})
+mark_as_advanced(SUITESPARSEQR_LIBRARY)
-FIND_PATH(SUITESPARSEQR_INCLUDE_DIR NAMES SuiteSparseQR.hpp
+find_path(SUITESPARSEQR_INCLUDE_DIR NAMES SuiteSparseQR.hpp
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
- MESSAGE(STATUS "Found SuiteSparseQR header in: ${SUITESPARSEQR_INCLUDE_DIR}")
-ELSE (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
- SUITESPARSE_REPORT_NOT_FOUND(
+if (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
+ message(STATUS "Found SuiteSparseQR header in: ${SUITESPARSEQR_INCLUDE_DIR}")
+else (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
+ suitesparse_report_not_found(
"Did not find SUITESPARSEQR header (required SuiteSparse component).")
- SET(SUITESPARSEQR_FOUND FALSE)
-ENDIF (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
-MARK_AS_ADVANCED(SUITESPARSEQR_INCLUDE_DIR)
+ set(SUITESPARSEQR_FOUND FALSE)
+endif (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
+mark_as_advanced(SUITESPARSEQR_INCLUDE_DIR)
-IF (SUITESPARSEQR_FOUND)
+if (SUITESPARSEQR_FOUND)
# SuiteSparseQR may be compiled with Intel Threading Building Blocks,
# we assume that if TBB is installed, SuiteSparseQR was compiled with
# support for it, this will do no harm if it wasn't.
- SET(TBB_FOUND TRUE)
- FIND_LIBRARY(TBB_LIBRARIES NAMES tbb
+ set(TBB_FOUND TRUE)
+ find_library(TBB_LIBRARIES NAMES tbb
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- IF (EXISTS ${TBB_LIBRARIES})
- MESSAGE(STATUS "Found Intel Thread Building Blocks (TBB) library: "
+ if (EXISTS ${TBB_LIBRARIES})
+ message(STATUS "Found Intel Thread Building Blocks (TBB) library: "
"${TBB_LIBRARIES}, assuming SuiteSparseQR was compiled with TBB.")
- ELSE (EXISTS ${TBB_LIBRARIES})
- MESSAGE(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
+ else (EXISTS ${TBB_LIBRARIES})
+ message(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
"not compiled with TBB.")
- SET(TBB_FOUND FALSE)
- ENDIF (EXISTS ${TBB_LIBRARIES})
- MARK_AS_ADVANCED(TBB_LIBRARIES)
+ set(TBB_FOUND FALSE)
+ endif (EXISTS ${TBB_LIBRARIES})
+ mark_as_advanced(TBB_LIBRARIES)
- IF (TBB_FOUND)
- FIND_LIBRARY(TBB_MALLOC_LIB NAMES tbbmalloc
+ if (TBB_FOUND)
+ find_library(TBB_MALLOC_LIB NAMES tbbmalloc
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- IF (EXISTS ${TBB_MALLOC_LIB})
- MESSAGE(STATUS "Found Intel Thread Building Blocks (TBB) Malloc library: "
+ if (EXISTS ${TBB_MALLOC_LIB})
+ message(STATUS "Found Intel Thread Building Blocks (TBB) Malloc library: "
"${TBB_MALLOC_LIB}")
# Append TBB malloc library to TBB libraries list whilst retaining
# any CMake generated help string (cache variable).
- LIST(APPEND TBB_LIBRARIES ${TBB_MALLOC_LIB})
- GET_PROPERTY(HELP_STRING CACHE TBB_LIBRARIES PROPERTY HELPSTRING)
- SET(TBB_LIBRARIES "${TBB_LIBRARIES}" CACHE STRING "${HELP_STRING}")
+ list(APPEND TBB_LIBRARIES ${TBB_MALLOC_LIB})
+ get_property(HELP_STRING CACHE TBB_LIBRARIES PROPERTY HELPSTRING)
+ set(TBB_LIBRARIES "${TBB_LIBRARIES}" CACHE STRING "${HELP_STRING}")
# Add the TBB libraries to the SuiteSparseQR libraries (the only
# libraries to optionally depend on TBB).
- LIST(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARIES})
+ list(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARIES})
- ELSE (EXISTS ${TBB_MALLOC_LIB})
+ else (EXISTS ${TBB_MALLOC_LIB})
# If we cannot find all required TBB components do not include it as
# a dependency.
- MESSAGE(STATUS "Did not find Intel Thread Building Blocks (TBB) Malloc "
+ message(STATUS "Did not find Intel Thread Building Blocks (TBB) Malloc "
"Library, discarding TBB as a dependency.")
- SET(TBB_FOUND FALSE)
- ENDIF (EXISTS ${TBB_MALLOC_LIB})
- MARK_AS_ADVANCED(TBB_MALLOC_LIB)
- ENDIF (TBB_FOUND)
-ENDIF(SUITESPARSEQR_FOUND)
+ set(TBB_FOUND FALSE)
+ endif (EXISTS ${TBB_MALLOC_LIB})
+ mark_as_advanced(TBB_MALLOC_LIB)
+ endif (TBB_FOUND)
+endif(SUITESPARSEQR_FOUND)
# UFconfig / SuiteSparse_config.
#
# If SuiteSparse version is >= 4 then SuiteSparse_config is required.
# For SuiteSparse 3, UFconfig.h is required.
-FIND_LIBRARY(SUITESPARSE_CONFIG_LIBRARY NAMES suitesparseconfig
+find_library(SUITESPARSE_CONFIG_LIBRARY NAMES suitesparseconfig
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
- MESSAGE(STATUS "Found SuiteSparse_config library: "
+if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
+ message(STATUS "Found SuiteSparse_config library: "
"${SUITESPARSE_CONFIG_LIBRARY}")
-ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
-MARK_AS_ADVANCED(SUITESPARSE_CONFIG_LIBRARY)
+endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
+mark_as_advanced(SUITESPARSE_CONFIG_LIBRARY)
-FIND_PATH(SUITESPARSE_CONFIG_INCLUDE_DIR NAMES SuiteSparse_config.h
+find_path(SUITESPARSE_CONFIG_INCLUDE_DIR NAMES SuiteSparse_config.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-IF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
- MESSAGE(STATUS "Found SuiteSparse_config header in: "
+if (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+ message(STATUS "Found SuiteSparse_config header in: "
"${SUITESPARSE_CONFIG_INCLUDE_DIR}")
-ENDIF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-MARK_AS_ADVANCED(SUITESPARSE_CONFIG_INCLUDE_DIR)
+endif (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+mark_as_advanced(SUITESPARSE_CONFIG_INCLUDE_DIR)
-SET(SUITESPARSE_CONFIG_FOUND FALSE)
-SET(UFCONFIG_FOUND FALSE)
+set(SUITESPARSE_CONFIG_FOUND FALSE)
+set(UFCONFIG_FOUND FALSE)
-IF (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
+if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
- SET(SUITESPARSE_CONFIG_FOUND TRUE)
+ set(SUITESPARSE_CONFIG_FOUND TRUE)
# SuiteSparse_config (SuiteSparse version >= 4) requires librt library for
# timing by default when compiled on Linux or Unix, but not on OSX (which
# does not have librt).
- IF (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
- FIND_LIBRARY(LIBRT_LIBRARY NAMES rt
+ if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
+ find_library(LIBRT_LIBRARY NAMES rt
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- IF (LIBRT_LIBRARY)
- MESSAGE(STATUS "Adding librt: ${LIBRT_LIBRARY} to "
+ if (LIBRT_LIBRARY)
+ message(STATUS "Adding librt: ${LIBRT_LIBRARY} to "
"SuiteSparse_config libraries (required on Linux & Unix [not OSX] if "
"SuiteSparse is compiled with timing).")
- ELSE (LIBRT_LIBRARY)
- MESSAGE(STATUS "Could not find librt, but found SuiteSparse_config, "
+ else (LIBRT_LIBRARY)
+ message(STATUS "Could not find librt, but found SuiteSparse_config, "
"assuming that SuiteSparse was compiled without timing.")
- ENDIF (LIBRT_LIBRARY)
- MARK_AS_ADVANCED(LIBRT_LIBRARY)
- LIST(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
- ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
+ endif (LIBRT_LIBRARY)
+ mark_as_advanced(LIBRT_LIBRARY)
+ list(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
+ endif (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
-ELSE (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
+else (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
# Failed to find SuiteSparse_config (>= v4 installs), instead look for
# UFconfig header which should be present in < v4 installs.
- SET(SUITESPARSE_CONFIG_FOUND FALSE)
- FIND_PATH(UFCONFIG_INCLUDE_DIR NAMES UFconfig.h
+ set(SUITESPARSE_CONFIG_FOUND FALSE)
+ find_path(UFCONFIG_INCLUDE_DIR NAMES UFconfig.h
PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
- IF (EXISTS ${UFCONFIG_INCLUDE_DIR})
- MESSAGE(STATUS "Found UFconfig header in: ${UFCONFIG_INCLUDE_DIR}")
- SET(UFCONFIG_FOUND TRUE)
- ENDIF (EXISTS ${UFCONFIG_INCLUDE_DIR})
- MARK_AS_ADVANCED(UFCONFIG_INCLUDE_DIR)
-ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
+ if (EXISTS ${UFCONFIG_INCLUDE_DIR})
+ message(STATUS "Found UFconfig header in: ${UFCONFIG_INCLUDE_DIR}")
+ set(UFCONFIG_FOUND TRUE)
+ endif (EXISTS ${UFCONFIG_INCLUDE_DIR})
+ mark_as_advanced(UFCONFIG_INCLUDE_DIR)
+endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-IF (NOT SUITESPARSE_CONFIG_FOUND AND
+if (NOT SUITESPARSE_CONFIG_FOUND AND
NOT UFCONFIG_FOUND)
- SUITESPARSE_REPORT_NOT_FOUND(
+ suitesparse_report_not_found(
"Failed to find either: SuiteSparse_config header & library (should be "
"present in all SuiteSparse >= v4 installs), or UFconfig header (should "
"be present in all SuiteSparse < v4 installs).")
-ENDIF (NOT SUITESPARSE_CONFIG_FOUND AND
+endif (NOT SUITESPARSE_CONFIG_FOUND AND
NOT UFCONFIG_FOUND)
# Extract the SuiteSparse version from the appropriate header (UFconfig.h for
# <= v3, SuiteSparse_config.h for >= v4).
-LIST(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSE_VERSION)
+list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSE_VERSION)
-IF (UFCONFIG_FOUND)
+if (UFCONFIG_FOUND)
# SuiteSparse version <= 3.
- SET(SUITESPARSE_VERSION_FILE ${UFCONFIG_INCLUDE_DIR}/UFconfig.h)
- IF (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
- SUITESPARSE_REPORT_NOT_FOUND(
+ set(SUITESPARSE_VERSION_FILE ${UFCONFIG_INCLUDE_DIR}/UFconfig.h)
+ if (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+ suitesparse_report_not_found(
"Could not find file: ${SUITESPARSE_VERSION_FILE} containing version "
"information for <= v3 SuiteSparse installs, but UFconfig was found "
"(only present in <= v3 installs).")
- ELSE (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
- FILE(READ ${SUITESPARSE_VERSION_FILE} UFCONFIG_CONTENTS)
+ else (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+ file(READ ${SUITESPARSE_VERSION_FILE} UFCONFIG_CONTENTS)
- STRING(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION [0-9]+"
SUITESPARSE_MAIN_VERSION "${UFCONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION ([0-9]+)" "\\1"
SUITESPARSE_MAIN_VERSION "${SUITESPARSE_MAIN_VERSION}")
- STRING(REGEX MATCH "#define SUITESPARSE_SUB_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_SUB_VERSION [0-9]+"
SUITESPARSE_SUB_VERSION "${UFCONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION ([0-9]+)" "\\1"
SUITESPARSE_SUB_VERSION "${SUITESPARSE_SUB_VERSION}")
- STRING(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION [0-9]+"
SUITESPARSE_SUBSUB_VERSION "${UFCONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION ([0-9]+)" "\\1"
SUITESPARSE_SUBSUB_VERSION "${SUITESPARSE_SUBSUB_VERSION}")
# This is on a single line s/t CMake does not interpret it as a list of
# elements and insert ';' separators which would result in 4.;2.;1 nonsense.
- SET(SUITESPARSE_VERSION
+ set(SUITESPARSE_VERSION
"${SUITESPARSE_MAIN_VERSION}.${SUITESPARSE_SUB_VERSION}.${SUITESPARSE_SUBSUB_VERSION}")
- ENDIF (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
-ENDIF (UFCONFIG_FOUND)
+ endif (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+endif (UFCONFIG_FOUND)
-IF (SUITESPARSE_CONFIG_FOUND)
+if (SUITESPARSE_CONFIG_FOUND)
# SuiteSparse version >= 4.
- SET(SUITESPARSE_VERSION_FILE
+ set(SUITESPARSE_VERSION_FILE
${SUITESPARSE_CONFIG_INCLUDE_DIR}/SuiteSparse_config.h)
- IF (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
- SUITESPARSE_REPORT_NOT_FOUND(
+ if (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+ suitesparse_report_not_found(
"Could not find file: ${SUITESPARSE_VERSION_FILE} containing version "
"information for >= v4 SuiteSparse installs, but SuiteSparse_config was "
"found (only present in >= v4 installs).")
- ELSE (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
- FILE(READ ${SUITESPARSE_VERSION_FILE} SUITESPARSE_CONFIG_CONTENTS)
+ else (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+ file(READ ${SUITESPARSE_VERSION_FILE} SUITESPARSE_CONFIG_CONTENTS)
- STRING(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION [0-9]+"
SUITESPARSE_MAIN_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION ([0-9]+)" "\\1"
SUITESPARSE_MAIN_VERSION "${SUITESPARSE_MAIN_VERSION}")
- STRING(REGEX MATCH "#define SUITESPARSE_SUB_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_SUB_VERSION [0-9]+"
SUITESPARSE_SUB_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION ([0-9]+)" "\\1"
SUITESPARSE_SUB_VERSION "${SUITESPARSE_SUB_VERSION}")
- STRING(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION [0-9]+"
+ string(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION [0-9]+"
SUITESPARSE_SUBSUB_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
- STRING(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION ([0-9]+)" "\\1"
+ string(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION ([0-9]+)" "\\1"
SUITESPARSE_SUBSUB_VERSION "${SUITESPARSE_SUBSUB_VERSION}")
# This is on a single line s/t CMake does not interpret it as a list of
# elements and insert ';' separators which would result in 4.;2.;1 nonsense.
- SET(SUITESPARSE_VERSION
+ set(SUITESPARSE_VERSION
"${SUITESPARSE_MAIN_VERSION}.${SUITESPARSE_SUB_VERSION}.${SUITESPARSE_SUBSUB_VERSION}")
- ENDIF (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
-ENDIF (SUITESPARSE_CONFIG_FOUND)
+ endif (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
+endif (SUITESPARSE_CONFIG_FOUND)
# METIS (Optional dependency).
-FIND_LIBRARY(METIS_LIBRARY NAMES metis
+find_library(METIS_LIBRARY NAMES metis
PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-IF (EXISTS ${METIS_LIBRARY})
- MESSAGE(STATUS "Found METIS library: ${METIS_LIBRARY}.")
+if (EXISTS ${METIS_LIBRARY})
+ message(STATUS "Found METIS library: ${METIS_LIBRARY}.")
set(METIS_FOUND TRUE)
-ELSE (EXISTS ${METIS_LIBRARY})
- MESSAGE(STATUS "Did not find METIS library (optional SuiteSparse dependency)")
+else (EXISTS ${METIS_LIBRARY})
+ message(STATUS "Did not find METIS library (optional SuiteSparse dependency)")
set(METIS_FOUND FALSE)
-ENDIF (EXISTS ${METIS_LIBRARY})
-MARK_AS_ADVANCED(METIS_LIBRARY)
+endif (EXISTS ${METIS_LIBRARY})
+mark_as_advanced(METIS_LIBRARY)
# Only mark SuiteSparse as found if all required components and dependencies
# have been found.
-SET(SUITESPARSE_FOUND TRUE)
-FOREACH(REQUIRED_VAR ${SUITESPARSE_FOUND_REQUIRED_VARS})
- IF (NOT ${REQUIRED_VAR})
- SET(SUITESPARSE_FOUND FALSE)
- ENDIF (NOT ${REQUIRED_VAR})
-ENDFOREACH(REQUIRED_VAR ${SUITESPARSE_FOUND_REQUIRED_VARS})
+set(SUITESPARSE_FOUND TRUE)
+foreach(REQUIRED_VAR ${SUITESPARSE_FOUND_REQUIRED_VARS})
+ if (NOT ${REQUIRED_VAR})
+ set(SUITESPARSE_FOUND FALSE)
+ endif (NOT ${REQUIRED_VAR})
+endforeach(REQUIRED_VAR ${SUITESPARSE_FOUND_REQUIRED_VARS})
-IF (SUITESPARSE_FOUND)
- LIST(APPEND SUITESPARSE_INCLUDE_DIRS
+if (SUITESPARSE_FOUND)
+ list(APPEND SUITESPARSE_INCLUDE_DIRS
${AMD_INCLUDE_DIR}
${CAMD_INCLUDE_DIR}
${COLAMD_INCLUDE_DIR}
@@ -570,21 +570,21 @@
${SUITESPARSEQR_INCLUDE_DIR})
# Handle config separately, as otherwise at least one of them will be set
# to NOTFOUND which would cause any check on SUITESPARSE_INCLUDE_DIRS to fail.
- IF (SUITESPARSE_CONFIG_FOUND)
- LIST(APPEND SUITESPARSE_INCLUDE_DIRS
+ if (SUITESPARSE_CONFIG_FOUND)
+ list(APPEND SUITESPARSE_INCLUDE_DIRS
${SUITESPARSE_CONFIG_INCLUDE_DIR})
- ENDIF (SUITESPARSE_CONFIG_FOUND)
- IF (UFCONFIG_FOUND)
- LIST(APPEND SUITESPARSE_INCLUDE_DIRS
+ endif (SUITESPARSE_CONFIG_FOUND)
+ if (UFCONFIG_FOUND)
+ list(APPEND SUITESPARSE_INCLUDE_DIRS
${UFCONFIG_INCLUDE_DIR})
- ENDIF (UFCONFIG_FOUND)
+ endif (UFCONFIG_FOUND)
# As SuiteSparse includes are often all in the same directory, remove any
# repetitions.
- LIST(REMOVE_DUPLICATES SUITESPARSE_INCLUDE_DIRS)
+ list(REMOVE_DUPLICATES SUITESPARSE_INCLUDE_DIRS)
# Important: The ordering of these libraries is *NOT* arbitrary, as these
# could potentially be static libraries their link ordering is important.
- LIST(APPEND SUITESPARSE_LIBRARIES
+ list(APPEND SUITESPARSE_LIBRARIES
${SUITESPARSEQR_LIBRARY}
${CHOLMOD_LIBRARY}
${CCOLAMD_LIBRARY}
@@ -593,59 +593,59 @@
${AMD_LIBRARY}
${LAPACK_LIBRARIES}
${BLAS_LIBRARIES})
- IF (SUITESPARSE_CONFIG_FOUND)
- LIST(APPEND SUITESPARSE_LIBRARIES
+ if (SUITESPARSE_CONFIG_FOUND)
+ list(APPEND SUITESPARSE_LIBRARIES
${SUITESPARSE_CONFIG_LIBRARY})
- ENDIF (SUITESPARSE_CONFIG_FOUND)
- IF (METIS_FOUND)
- LIST(APPEND SUITESPARSE_LIBRARIES
+ endif (SUITESPARSE_CONFIG_FOUND)
+ if (METIS_FOUND)
+ list(APPEND SUITESPARSE_LIBRARIES
${METIS_LIBRARY})
- ENDIF (METIS_FOUND)
-ENDIF()
+ endif (METIS_FOUND)
+endif()
# Determine if we are running on Ubuntu with the package install of SuiteSparse
# which is broken and does not support linking a shared library.
-SET(SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION FALSE)
-IF (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
+set(SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION FALSE)
+if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
SUITESPARSE_VERSION VERSION_EQUAL 3.4.0)
- FIND_PROGRAM(LSB_RELEASE_EXECUTABLE lsb_release)
- IF (LSB_RELEASE_EXECUTABLE)
+ find_program(LSB_RELEASE_EXECUTABLE lsb_release)
+ if (LSB_RELEASE_EXECUTABLE)
# Any even moderately recent Ubuntu release (likely to be affected by
# this bug) should have lsb_release, if it isn't present we are likely
# on a different Linux distribution (should be fine).
- EXECUTE_PROCESS(COMMAND ${LSB_RELEASE_EXECUTABLE} -si
+ execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -si
OUTPUT_VARIABLE LSB_DISTRIBUTOR_ID
OUTPUT_STRIP_TRAILING_WHITESPACE)
- IF (LSB_DISTRIBUTOR_ID MATCHES "Ubuntu" AND
+ if (LSB_DISTRIBUTOR_ID MATCHES "Ubuntu" AND
SUITESPARSE_LIBRARIES MATCHES "/usr/lib/libamd")
# We are on Ubuntu, and the SuiteSparse version matches the broken
# system install version and is a system install.
- SET(SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION TRUE)
- MESSAGE(STATUS "Found system install of SuiteSparse "
+ set(SUITESPARSE_IS_BROKEN_SHARED_LINKING_UBUNTU_SYSTEM_VERSION TRUE)
+ message(STATUS "Found system install of SuiteSparse "
"${SUITESPARSE_VERSION} running on Ubuntu, which has a known bug "
"preventing linking of shared libraries (static linking unaffected).")
- ENDIF (LSB_DISTRIBUTOR_ID MATCHES "Ubuntu" AND
+ endif (LSB_DISTRIBUTOR_ID MATCHES "Ubuntu" AND
SUITESPARSE_LIBRARIES MATCHES "/usr/lib/libamd")
- ENDIF (LSB_RELEASE_EXECUTABLE)
-ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
+ endif (LSB_RELEASE_EXECUTABLE)
+endif (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
SUITESPARSE_VERSION VERSION_EQUAL 3.4.0)
-SUITESPARSE_RESET_FIND_LIBRARY_PREFIX()
+suitesparse_reset_find_library_prefix()
# Handle REQUIRED and QUIET arguments to FIND_PACKAGE
-INCLUDE(FindPackageHandleStandardArgs)
-IF (SUITESPARSE_FOUND)
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(SuiteSparse
+include(FindPackageHandleStandardArgs)
+if (SUITESPARSE_FOUND)
+ find_package_handle_standard_args(SuiteSparse
REQUIRED_VARS ${SUITESPARSE_FOUND_REQUIRED_VARS}
VERSION_VAR SUITESPARSE_VERSION
FAIL_MESSAGE "Failed to find some/all required components of SuiteSparse.")
-ELSE (SUITESPARSE_FOUND)
+else (SUITESPARSE_FOUND)
# Do not pass VERSION_VAR to FindPackageHandleStandardArgs() if we failed to
# find SuiteSparse to avoid a confusing autogenerated failure message
# that states 'not found (missing: FOO) (found version: x.y.z)'.
- FIND_PACKAGE_HANDLE_STANDARD_ARGS(SuiteSparse
+ find_package_handle_standard_args(SuiteSparse
REQUIRED_VARS ${SUITESPARSE_FOUND_REQUIRED_VARS}
FAIL_MESSAGE "Failed to find some/all required components of SuiteSparse.")
-ENDIF (SUITESPARSE_FOUND)
+endif (SUITESPARSE_FOUND)
diff --git a/cmake/FindUnorderedMap.cmake b/cmake/FindUnorderedMap.cmake
index 6aec18a..6ba07fd 100644
--- a/cmake/FindUnorderedMap.cmake
+++ b/cmake/FindUnorderedMap.cmake
@@ -37,58 +37,58 @@
# HAVE_UNORDERED_MAP_IN_STD_NAMESPACE: Use <unordered_map> & std.
# HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE: Use <unordered_map> & std::tr1.
# HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE: <tr1/unordered_map> & std::tr1.
-MACRO(FIND_UNORDERED_MAP)
+macro(FIND_UNORDERED_MAP)
# To support CXX11 option, clear the results of all check_xxx() functions
# s/t we always perform the checks each time, otherwise CMake fails to
# detect that the tests should be performed again after CXX11 is toggled.
- UNSET(HAVE_STD_UNORDERED_MAP_HEADER CACHE)
- UNSET(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE CACHE)
- UNSET(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE CACHE)
- UNSET(HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE CACHE)
+ unset(HAVE_STD_UNORDERED_MAP_HEADER CACHE)
+ unset(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE CACHE)
+ unset(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE CACHE)
+ unset(HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE CACHE)
- SET(UNORDERED_MAP_FOUND FALSE)
- INCLUDE(CheckIncludeFileCXX)
- CHECK_INCLUDE_FILE_CXX(unordered_map HAVE_STD_UNORDERED_MAP_HEADER)
- IF (HAVE_STD_UNORDERED_MAP_HEADER)
+ set(UNORDERED_MAP_FOUND FALSE)
+ include(CheckIncludeFileCXX)
+ check_include_file_cxx(unordered_map HAVE_STD_UNORDERED_MAP_HEADER)
+ if (HAVE_STD_UNORDERED_MAP_HEADER)
# Finding the unordered_map header doesn't mean that unordered_map
# is in std namespace.
#
# In particular, MSVC 2008 has unordered_map declared in std::tr1.
# In order to support this, we do an extra check to see which
# namespace should be used.
- INCLUDE(CheckCXXSourceCompiles)
- CHECK_CXX_SOURCE_COMPILES("#include <unordered_map>
+ include(CheckCXXSourceCompiles)
+ check_cxx_source_compiles("#include <unordered_map>
int main() {
std::unordered_map<int, int> map;
return 0;
}"
HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- IF (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- SET(UNORDERED_MAP_FOUND TRUE)
- MESSAGE("-- Found unordered_map/set in std namespace.")
- ELSE (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- CHECK_CXX_SOURCE_COMPILES("#include <unordered_map>
+ if (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
+ set(UNORDERED_MAP_FOUND TRUE)
+ message("-- Found unordered_map/set in std namespace.")
+ else (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
+ check_cxx_source_compiles("#include <unordered_map>
int main() {
std::tr1::unordered_map<int, int> map;
return 0;
}"
HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- IF (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- SET(UNORDERED_MAP_FOUND TRUE)
- MESSAGE("-- Found unordered_map/set in std::tr1 namespace.")
- ELSE (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- MESSAGE("-- Found <unordered_map> but cannot find either "
+ if (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ set(UNORDERED_MAP_FOUND TRUE)
+ message("-- Found unordered_map/set in std::tr1 namespace.")
+ else (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ message("-- Found <unordered_map> but cannot find either "
"std::unordered_map or std::tr1::unordered_map.")
- ENDIF (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
- ENDIF (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
- ELSE (HAVE_STD_UNORDERED_MAP_HEADER)
- CHECK_INCLUDE_FILE_CXX("tr1/unordered_map"
+ endif (HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ endif (HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
+ else (HAVE_STD_UNORDERED_MAP_HEADER)
+ check_include_file_cxx("tr1/unordered_map"
HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
- IF (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
- SET(UNORDERED_MAP_FOUND TRUE)
- MESSAGE("-- Found tr1/unordered_map/set in std::tr1 namespace.")
- ELSE (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
- MESSAGE("-- Unable to find <unordered_map> or <tr1/unordered_map>.")
- ENDIF (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
- ENDIF (HAVE_STD_UNORDERED_MAP_HEADER)
-ENDMACRO(FIND_UNORDERED_MAP)
+ if (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ set(UNORDERED_MAP_FOUND TRUE)
+ message("-- Found tr1/unordered_map/set in std::tr1 namespace.")
+ else (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ message("-- Unable to find <unordered_map> or <tr1/unordered_map>.")
+ endif (HAVE_TR1_UNORDERED_MAP_IN_TR1_NAMESPACE)
+ endif (HAVE_STD_UNORDERED_MAP_HEADER)
+endmacro(FIND_UNORDERED_MAP)
diff --git a/cmake/UpdateCacheVariable.cmake b/cmake/UpdateCacheVariable.cmake
index 350aba6..5995a87 100644
--- a/cmake/UpdateCacheVariable.cmake
+++ b/cmake/UpdateCacheVariable.cmake
@@ -36,8 +36,8 @@
# This function automates this process by getting the current help string
# for the cache variable to update, then reinitialising it with the new
# value, but with the original help string.
-FUNCTION(UPDATE_CACHE_VARIABLE VAR_NAME VALUE)
- GET_PROPERTY(HELP_STRING CACHE ${VAR_NAME} PROPERTY HELPSTRING)
- GET_PROPERTY(VAR_TYPE CACHE ${VAR_NAME} PROPERTY TYPE)
- SET(${VAR_NAME} ${VALUE} CACHE ${VAR_TYPE} "${HELP_STRING}" FORCE)
-ENDFUNCTION()
+function(UPDATE_CACHE_VARIABLE VAR_NAME VALUE)
+ get_property(HELP_STRING CACHE ${VAR_NAME} PROPERTY HELPSTRING)
+ get_property(VAR_TYPE CACHE ${VAR_NAME} PROPERTY TYPE)
+ set(${VAR_NAME} ${VALUE} CACHE ${VAR_TYPE} "${HELP_STRING}" FORCE)
+endfunction()
diff --git a/cmake/uninstall.cmake.in b/cmake/uninstall.cmake.in
index 6ccb672..06cac80 100644
--- a/cmake/uninstall.cmake.in
+++ b/cmake/uninstall.cmake.in
@@ -29,69 +29,69 @@
# Author: arnaudgelas@gmail.com (Arnaud Gelas)
# alexs.mac@gmail.com (Alex Stewart)
-IF (COMMAND cmake_policy)
+if (COMMAND cmake_policy)
# Ignore empty elements in LIST() commands.
- CMAKE_POLICY(SET CMP0007 OLD)
-ENDIF (COMMAND cmake_policy)
+ cmake_policy(SET CMP0007 OLD)
+endif (COMMAND cmake_policy)
-IF (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
- MESSAGE(FATAL_ERROR "Cannot find install manifest: "
+if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: "
"\"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
-ENDIF (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" INSTALL_MANIFEST)
-STRING(REGEX REPLACE "\n" ";" INSTALL_MANIFEST "${INSTALL_MANIFEST}")
-LIST(REVERSE INSTALL_MANIFEST)
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" INSTALL_MANIFEST)
+string(REGEX REPLACE "\n" ";" INSTALL_MANIFEST "${INSTALL_MANIFEST}")
+list(REVERSE INSTALL_MANIFEST)
-FOREACH (INSTALLED_FILE ${INSTALL_MANIFEST})
+foreach (INSTALLED_FILE ${INSTALL_MANIFEST})
# Save the root ceres include install directory, e.g. /usr/local/include/ceres
# so that we can remove it at the end.
- IF (NOT CERES_INCLUDE_INSTALL_ROOT)
- GET_FILENAME_COMPONENT(FILE_NAME ${INSTALLED_FILE} NAME)
- IF (FILE_NAME STREQUAL ceres.h)
+ if (NOT CERES_INCLUDE_INSTALL_ROOT)
+ get_filename_component(FILE_NAME ${INSTALLED_FILE} NAME)
+ if (FILE_NAME STREQUAL ceres.h)
# Ensure that the directory is nested as we expect, as we are going to
# remove it, and we do not want to remove files pertaining to anyone else.
- GET_FILENAME_COMPONENT(PARENT_DIR ${INSTALLED_FILE} PATH)
- GET_FILENAME_COMPONENT(PARENT_DIR_NAME ${PARENT_DIR} NAME)
- IF (PARENT_DIR_NAME STREQUAL ceres AND IS_DIRECTORY ${PARENT_DIR})
- SET(CERES_INCLUDE_INSTALL_ROOT ${PARENT_DIR})
- ENDIF (PARENT_DIR_NAME STREQUAL ceres AND IS_DIRECTORY ${PARENT_DIR})
- ENDIF (FILE_NAME STREQUAL ceres.h)
- ENDIF (NOT CERES_INCLUDE_INSTALL_ROOT)
+ get_filename_component(PARENT_DIR ${INSTALLED_FILE} PATH)
+ get_filename_component(PARENT_DIR_NAME ${PARENT_DIR} NAME)
+ if (PARENT_DIR_NAME STREQUAL ceres AND IS_DIRECTORY ${PARENT_DIR})
+ set(CERES_INCLUDE_INSTALL_ROOT ${PARENT_DIR})
+ endif (PARENT_DIR_NAME STREQUAL ceres AND IS_DIRECTORY ${PARENT_DIR})
+ endif (FILE_NAME STREQUAL ceres.h)
+ endif (NOT CERES_INCLUDE_INSTALL_ROOT)
- MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${INSTALLED_FILE}\"")
- IF (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
- EXECUTE_PROCESS(COMMAND @CMAKE_COMMAND@
+ message(STATUS "Uninstalling \"$ENV{DESTDIR}${INSTALLED_FILE}\"")
+ if (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
+ execute_process(COMMAND @CMAKE_COMMAND@
-E remove "$ENV{DESTDIR}${INSTALLED_FILE}"
OUTPUT_VARIABLE RM_OUT
RESULT_VARIABLE RM_RETVAL)
- IF (NOT ${RM_RETVAL} EQUAL 0)
- MESSAGE(FATAL_ERROR
+ if (NOT ${RM_RETVAL} EQUAL 0)
+ message(FATAL_ERROR
"Problem when removing \"$ENV{DESTDIR}${INSTALLED_FILE}\"")
- ENDIF (NOT ${RM_RETVAL} EQUAL 0)
- ELSE (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
- MESSAGE(STATUS "File \"$ENV{DESTDIR}${INSTALLED_FILE}\" does not exist.")
- ENDIF (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
-ENDFOREACH(INSTALLED_FILE)
+ endif (NOT ${RM_RETVAL} EQUAL 0)
+ else (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
+ message(STATUS "File \"$ENV{DESTDIR}${INSTALLED_FILE}\" does not exist.")
+ endif (EXISTS "$ENV{DESTDIR}${INSTALLED_FILE}")
+endforeach(INSTALLED_FILE)
# Removing Ceres include install directory.
-IF (CERES_INCLUDE_INSTALL_ROOT AND
+if (CERES_INCLUDE_INSTALL_ROOT AND
EXISTS ${CERES_INCLUDE_INSTALL_ROOT})
- MESSAGE(STATUS "Removing Ceres include install directory: "
+ message(STATUS "Removing Ceres include install directory: "
"\"$ENV{DESTDIR}${CERES_INCLUDE_INSTALL_ROOT}\"")
- EXECUTE_PROCESS(COMMAND @CMAKE_COMMAND@
+ execute_process(COMMAND @CMAKE_COMMAND@
-E remove_directory
"$ENV{DESTDIR}${CERES_INCLUDE_INSTALL_ROOT}"
OUTPUT_VARIABLE RM_OUT
RESULT_VARIABLE RM_RETVAL)
- IF (NOT ${RM_RETVAL} EQUAL 0)
- MESSAGE(FATAL_ERROR
+ if (NOT ${RM_RETVAL} EQUAL 0)
+ message(FATAL_ERROR
"Failed to remove: \"$ENV{DESTDIR}${CERES_INCLUDE_INSTALL_ROOT\"")
- ENDIF (NOT ${RM_RETVAL} EQUAL 0)
-ELSE (CERES_INCLUDE_INSTALL_ROOT AND
+ endif (NOT ${RM_RETVAL} EQUAL 0)
+else (CERES_INCLUDE_INSTALL_ROOT AND
EXISTS ${CERES_INCLUDE_INSTALL_ROOT})
- MESSAGE(FATAL_ERROR "Failed to find Ceres installed include directory "
+ message(FATAL_ERROR "Failed to find Ceres installed include directory "
"(e.g. /usr/local/include/ceres), candidate: "
"\"$ENV{DESTDIR}${CERES_INCLUDE_INSTALL_ROOT}\"")
-ENDIF (CERES_INCLUDE_INSTALL_ROOT AND
+endif (CERES_INCLUDE_INSTALL_ROOT AND
EXISTS ${CERES_INCLUDE_INSTALL_ROOT})
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index 7bcc758..cfdd910 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -26,4 +26,4 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-ADD_SUBDIRECTORY(source)
+add_subdirectory(source)
diff --git a/docs/source/CMakeLists.txt b/docs/source/CMakeLists.txt
index 91b76df..dd3ddcb 100644
--- a/docs/source/CMakeLists.txt
+++ b/docs/source/CMakeLists.txt
@@ -1,16 +1,16 @@
-FIND_PACKAGE(Sphinx REQUIRED)
+find_package(Sphinx REQUIRED)
# HTML output directory
-SET(SPHINX_HTML_DIR "${CMAKE_BINARY_DIR}/docs/html")
+set(SPHINX_HTML_DIR "${CMAKE_BINARY_DIR}/docs/html")
# Install documentation
-INSTALL(DIRECTORY ${SPHINX_HTML_DIR}
+install(DIRECTORY ${SPHINX_HTML_DIR}
DESTINATION share/doc/ceres
COMPONENT Doc
PATTERN "${SPHINX_HTML_DIR}/*")
# Building using 'make_docs.py' python script
-ADD_CUSTOM_TARGET(ceres_docs ALL
+add_custom_target(ceres_docs ALL
python
"${CMAKE_SOURCE_DIR}/scripts/make_docs.py"
"${CMAKE_SOURCE_DIR}"
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index fc1a70b..40040f9 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -31,88 +31,88 @@
# Only Ceres itself should be compiled with CERES_BUILDING_SHARED_LIBRARY
# defined, any users of Ceres will have CERES_USING_SHARED_LIBRARY defined
# for them in Ceres' config.h if appropriate.
-IF (BUILD_SHARED_LIBS)
- REMOVE_DEFINITIONS(-DCERES_BUILDING_SHARED_LIBRARY)
-ENDIF()
+if (BUILD_SHARED_LIBS)
+ remove_definitions(-DCERES_BUILDING_SHARED_LIBRARY)
+endif()
-ADD_EXECUTABLE(helloworld helloworld.cc)
-TARGET_LINK_LIBRARIES(helloworld ceres)
+add_executable(helloworld helloworld.cc)
+target_link_libraries(helloworld ceres)
-ADD_EXECUTABLE(helloworld_numeric_diff helloworld_numeric_diff.cc)
-TARGET_LINK_LIBRARIES(helloworld_numeric_diff ceres)
+add_executable(helloworld_numeric_diff helloworld_numeric_diff.cc)
+target_link_libraries(helloworld_numeric_diff ceres)
-ADD_EXECUTABLE(helloworld_analytic_diff helloworld_analytic_diff.cc)
-TARGET_LINK_LIBRARIES(helloworld_analytic_diff ceres)
+add_executable(helloworld_analytic_diff helloworld_analytic_diff.cc)
+target_link_libraries(helloworld_analytic_diff ceres)
-ADD_EXECUTABLE(curve_fitting curve_fitting.cc)
-TARGET_LINK_LIBRARIES(curve_fitting ceres)
+add_executable(curve_fitting curve_fitting.cc)
+target_link_libraries(curve_fitting ceres)
-ADD_EXECUTABLE(rosenbrock rosenbrock.cc)
-TARGET_LINK_LIBRARIES(rosenbrock ceres)
+add_executable(rosenbrock rosenbrock.cc)
+target_link_libraries(rosenbrock ceres)
-ADD_EXECUTABLE(curve_fitting_c curve_fitting.c)
-TARGET_LINK_LIBRARIES(curve_fitting_c ceres)
+add_executable(curve_fitting_c curve_fitting.c)
+target_link_libraries(curve_fitting_c ceres)
# Force CMake to link curve_fitting_c using the C linker, this is important
# when Ceres was compiled using C++11 to ensure that -std=c++11 is not passed
# through.
-SET_TARGET_PROPERTIES(curve_fitting_c PROPERTIES LINKER_LANGUAGE C)
+set_target_properties(curve_fitting_c PROPERTIES LINKER_LANGUAGE C)
# As this is a C file #including <math.h> we have to explicitly add the math
# library (libm). Although some compilers (dependent upon options) will accept
# the indirect link to libm via Ceres, at least GCC 4.8 on pure Debian won't.
-IF (NOT MSVC)
- TARGET_LINK_LIBRARIES(curve_fitting_c m)
-ENDIF (NOT MSVC)
+if (NOT MSVC)
+ target_link_libraries(curve_fitting_c m)
+endif (NOT MSVC)
-ADD_EXECUTABLE(ellipse_approximation ellipse_approximation.cc)
-TARGET_LINK_LIBRARIES(ellipse_approximation ceres)
+add_executable(ellipse_approximation ellipse_approximation.cc)
+target_link_libraries(ellipse_approximation ceres)
-ADD_EXECUTABLE(robust_curve_fitting robust_curve_fitting.cc)
-TARGET_LINK_LIBRARIES(robust_curve_fitting ceres)
+add_executable(robust_curve_fitting robust_curve_fitting.cc)
+target_link_libraries(robust_curve_fitting ceres)
-ADD_EXECUTABLE(simple_bundle_adjuster simple_bundle_adjuster.cc)
-TARGET_LINK_LIBRARIES(simple_bundle_adjuster ceres)
+add_executable(simple_bundle_adjuster simple_bundle_adjuster.cc)
+target_link_libraries(simple_bundle_adjuster ceres)
-ADD_EXECUTABLE(sampled_function sampled_function.cc)
-TARGET_LINK_LIBRARIES(sampled_function ceres)
+add_executable(sampled_function sampled_function.cc)
+target_link_libraries(sampled_function ceres)
-IF (GFLAGS)
+if (GFLAGS)
# The CERES_GFLAGS_NAMESPACE compile definition is NOT stored in
# CERES_COMPILE_OPTIONS (and thus config.h) as Ceres itself does not
# require gflags, only the tests and examples do.
- ADD_DEFINITIONS(-DCERES_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
+ add_definitions(-DCERES_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
- ADD_EXECUTABLE(powell powell.cc)
- TARGET_LINK_LIBRARIES(powell ceres ${GFLAGS_LIBRARIES})
+ add_executable(powell powell.cc)
+ target_link_libraries(powell ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(nist nist.cc)
- TARGET_LINK_LIBRARIES(nist ceres ${GFLAGS_LIBRARIES})
+ add_executable(nist nist.cc)
+ target_link_libraries(nist ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(more_garbow_hillstrom more_garbow_hillstrom.cc)
- TARGET_LINK_LIBRARIES(more_garbow_hillstrom ceres ${GFLAGS_LIBRARIES})
+ add_executable(more_garbow_hillstrom more_garbow_hillstrom.cc)
+ target_link_libraries(more_garbow_hillstrom ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(circle_fit circle_fit.cc)
- TARGET_LINK_LIBRARIES(circle_fit ceres ${GFLAGS_LIBRARIES})
+ add_executable(circle_fit circle_fit.cc)
+ target_link_libraries(circle_fit ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(bundle_adjuster
+ add_executable(bundle_adjuster
bundle_adjuster.cc
bal_problem.cc)
- TARGET_LINK_LIBRARIES(bundle_adjuster ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(bundle_adjuster ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(libmv_bundle_adjuster
+ add_executable(libmv_bundle_adjuster
libmv_bundle_adjuster.cc)
- TARGET_LINK_LIBRARIES(libmv_bundle_adjuster ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(libmv_bundle_adjuster ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(libmv_homography
+ add_executable(libmv_homography
libmv_homography.cc)
- TARGET_LINK_LIBRARIES(libmv_homography ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(libmv_homography ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(denoising
+ add_executable(denoising
denoising.cc
fields_of_experts.cc)
- TARGET_LINK_LIBRARIES(denoising ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(denoising ceres ${GFLAGS_LIBRARIES})
- ADD_EXECUTABLE(robot_pose_mle
+ add_executable(robot_pose_mle
robot_pose_mle.cc)
- TARGET_LINK_LIBRARIES(robot_pose_mle ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(robot_pose_mle ceres ${GFLAGS_LIBRARIES})
-ENDIF (GFLAGS)
+endif (GFLAGS)
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 2d217c2..118f2e0 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -28,7 +28,7 @@
#
# Author: keir@google.com (Keir Mierle)
-SET(CERES_INTERNAL_SRC
+set(CERES_INTERNAL_SRC
array_utils.cc
blas.cc
block_evaluate_preparer.cc
@@ -119,216 +119,216 @@
# install native libraries to lib64 rather than lib. Most distros seem to
# follow this convention with a couple notable exceptions (Debian-based and
# Arch-based distros) which we try to detect here.
-IF (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
+if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND
NOT DEFINED LIB_SUFFIX AND
NOT CMAKE_CROSSCOMPILING AND
CMAKE_SIZEOF_VOID_P EQUAL "8" AND
NOT EXISTS "/etc/debian_version" AND
NOT EXISTS "/etc/arch-release")
- SET(LIB_SUFFIX "64")
-ENDIF ()
+ set(LIB_SUFFIX "64")
+endif ()
# Also depend on the header files so that they appear in IDEs.
-FILE(GLOB CERES_INTERNAL_HDRS *.h)
+file(GLOB CERES_INTERNAL_HDRS *.h)
# Include the specialized schur solvers.
-IF (SCHUR_SPECIALIZATIONS)
- FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*.cc)
-ELSE (SCHUR_SPECIALIZATIONS)
+if (SCHUR_SPECIALIZATIONS)
+ file(GLOB CERES_INTERNAL_SCHUR_FILES generated/*.cc)
+else (SCHUR_SPECIALIZATIONS)
# Only the fully dynamic solver. The build is much faster this way.
- FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*_d_d_d.cc)
-ENDIF (SCHUR_SPECIALIZATIONS)
+ file(GLOB CERES_INTERNAL_SCHUR_FILES generated/*_d_d_d.cc)
+endif (SCHUR_SPECIALIZATIONS)
# Build the list of dependencies for Ceres based on the current configuration.
-IF (NOT MINIGLOG AND GLOG_FOUND)
- LIST(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES ${GLOG_LIBRARIES})
-ENDIF (NOT MINIGLOG AND GLOG_FOUND)
+if (NOT MINIGLOG AND GLOG_FOUND)
+ list(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES ${GLOG_LIBRARIES})
+endif (NOT MINIGLOG AND GLOG_FOUND)
-IF (SUITESPARSE AND SUITESPARSE_FOUND)
+if (SUITESPARSE AND SUITESPARSE_FOUND)
# Define version information for use in Solver::FullReport.
- ADD_DEFINITIONS(-DCERES_SUITESPARSE_VERSION="${SUITESPARSE_VERSION}")
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${SUITESPARSE_LIBRARIES})
-ENDIF (SUITESPARSE AND SUITESPARSE_FOUND)
+ add_definitions(-DCERES_SUITESPARSE_VERSION="${SUITESPARSE_VERSION}")
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${SUITESPARSE_LIBRARIES})
+endif (SUITESPARSE AND SUITESPARSE_FOUND)
-IF (CXSPARSE AND CXSPARSE_FOUND)
+if (CXSPARSE AND CXSPARSE_FOUND)
# Define version information for use in Solver::FullReport.
- ADD_DEFINITIONS(-DCERES_CXSPARSE_VERSION="${CXSPARSE_VERSION}")
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CXSPARSE_LIBRARIES})
-ENDIF (CXSPARSE AND CXSPARSE_FOUND)
+ add_definitions(-DCERES_CXSPARSE_VERSION="${CXSPARSE_VERSION}")
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CXSPARSE_LIBRARIES})
+endif (CXSPARSE AND CXSPARSE_FOUND)
-IF (BLAS_FOUND AND LAPACK_FOUND)
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${LAPACK_LIBRARIES})
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${BLAS_LIBRARIES})
-ENDIF (BLAS_FOUND AND LAPACK_FOUND)
+if (BLAS_FOUND AND LAPACK_FOUND)
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${LAPACK_LIBRARIES})
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${BLAS_LIBRARIES})
+endif (BLAS_FOUND AND LAPACK_FOUND)
-IF (OPENMP_FOUND)
- IF (NOT MSVC)
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp)
- LIST(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT})
- ENDIF (NOT MSVC)
-ENDIF (OPENMP_FOUND)
+if (OPENMP_FOUND)
+ if (NOT MSVC)
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp)
+ list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT})
+ endif (NOT MSVC)
+endif (OPENMP_FOUND)
-SET(CERES_LIBRARY_SOURCE
+set(CERES_LIBRARY_SOURCE
${CERES_INTERNAL_SRC}
${CERES_INTERNAL_HDRS}
${CERES_INTERNAL_SCHUR_FILES})
# Primarily for Android, but optionally for others, compile the minimal
# glog implementation into Ceres.
-IF (MINIGLOG)
- LIST(APPEND CERES_LIBRARY_SOURCE miniglog/glog/logging.cc)
-ENDIF (MINIGLOG)
+if (MINIGLOG)
+ list(APPEND CERES_LIBRARY_SOURCE miniglog/glog/logging.cc)
+endif (MINIGLOG)
-ADD_LIBRARY(ceres ${CERES_LIBRARY_SOURCE})
-SET_TARGET_PROPERTIES(ceres PROPERTIES
+add_library(ceres ${CERES_LIBRARY_SOURCE})
+set_target_properties(ceres PROPERTIES
VERSION ${CERES_VERSION}
SOVERSION ${CERES_VERSION_MAJOR}
)
-IF (CXX11 AND COMPILER_HAS_CXX11_FLAG)
- IF (CMAKE_VERSION VERSION_LESS "2.8.12")
- MESSAGE("-- Warning: detected CMake version: ${CMAKE_VERSION} < 2.8.12, "
+if (CXX11 AND COMPILER_HAS_CXX11_FLAG)
+ if (CMAKE_VERSION VERSION_LESS "2.8.12")
+ message("-- Warning: detected CMake version: ${CMAKE_VERSION} < 2.8.12, "
"which is the minimum required for compile options to be included in an "
"exported CMake target, but CERES_USE_CXX11 is enabled and the detected. "
"compiler requires -std=c++11. The client is responsible for adding "
"-std=c++11 when using Ceres.")
- ELSE ()
+ else ()
# If Ceres is compiled using C++11, and the compiler requires -std=c++11
# to be set, then ensure that this requirement is rolled into the exported
# CMake target, s/t client code which uses Ceres will inherit it (if the
# CMake version supports it), iff they are NOT compiling for C. We check
# for not C, rather than C++ as LINKER_LANGUAGE is often NOTFOUND and then
# uses the default (C++).
- TARGET_COMPILE_OPTIONS(ceres PUBLIC
+ target_compile_options(ceres PUBLIC
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,C>>:-std=c++11>)
- ENDIF()
-ENDIF()
+ endif()
+endif()
-IF (BUILD_SHARED_LIBS)
+if (BUILD_SHARED_LIBS)
# When building a shared library, mark all external libraries as
# PRIVATE so they don't show up as a dependency.
- TARGET_LINK_LIBRARIES(ceres
+ target_link_libraries(ceres
LINK_PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES}
LINK_PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
-ELSE (BUILD_SHARED_LIBS)
+else (BUILD_SHARED_LIBS)
# When building a static library, all external libraries are
# PUBLIC(default) since the user needs to link to them.
# They will be listed in CeresTargets.cmake.
- SET(CERES_LIBRARY_DEPENDENCIES
+ set(CERES_LIBRARY_DEPENDENCIES
${CERES_LIBRARY_PUBLIC_DEPENDENCIES}
${CERES_LIBRARY_PRIVATE_DEPENDENCIES})
- TARGET_LINK_LIBRARIES(ceres ${CERES_LIBRARY_DEPENDENCIES})
-ENDIF (BUILD_SHARED_LIBS)
+ target_link_libraries(ceres ${CERES_LIBRARY_DEPENDENCIES})
+endif (BUILD_SHARED_LIBS)
-INSTALL(TARGETS ceres
+install(TARGETS ceres
EXPORT CeresExport
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX})
-IF (BUILD_TESTING AND GFLAGS)
+if (BUILD_TESTING AND GFLAGS)
# The CERES_GFLAGS_NAMESPACE compile definition is NOT stored in
# CERES_COMPILE_OPTIONS (and thus config.h) as Ceres itself does not
# require gflags, only the tests and examples do.
- ADD_DEFINITIONS(-DCERES_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
+ add_definitions(-DCERES_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
- ADD_LIBRARY(gtest gmock_gtest_all.cc gmock_main.cc)
- ADD_LIBRARY(test_util
+ add_library(gtest gmock_gtest_all.cc gmock_main.cc)
+ add_library(test_util
evaluator_test_utils.cc
numeric_diff_test_utils.cc
test_util.cc)
- IF (MINIGLOG)
+ if (MINIGLOG)
# When using miniglog, it is compiled into Ceres, thus Ceres becomes
# the library against which other libraries should link for logging.
- TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIBRARIES} ceres)
- TARGET_LINK_LIBRARIES(test_util ceres gtest)
- ELSE (MINIGLOG)
- TARGET_LINK_LIBRARIES(gtest ${GFLAGS_LIBRARIES} ${GLOG_LIBRARIES})
- TARGET_LINK_LIBRARIES(test_util ceres gtest ${GLOG_LIBRARIES})
- ENDIF (MINIGLOG)
+ target_link_libraries(gtest ${GFLAGS_LIBRARIES} ceres)
+ target_link_libraries(test_util ceres gtest)
+ else (MINIGLOG)
+ target_link_libraries(gtest ${GFLAGS_LIBRARIES} ${GLOG_LIBRARIES})
+ target_link_libraries(test_util ceres gtest ${GLOG_LIBRARIES})
+ endif (MINIGLOG)
- MACRO (CERES_TEST NAME)
- ADD_EXECUTABLE(${NAME}_test ${NAME}_test.cc)
- TARGET_LINK_LIBRARIES(${NAME}_test test_util ceres gtest)
- ADD_TEST(NAME ${NAME}_test
+ macro (CERES_TEST NAME)
+ add_executable(${NAME}_test ${NAME}_test.cc)
+ target_link_libraries(${NAME}_test test_util ceres gtest)
+ add_test(NAME ${NAME}_test
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${NAME}_test
--test_srcdir
${CMAKE_SOURCE_DIR}/data)
- ENDMACRO (CERES_TEST)
+ endmacro (CERES_TEST)
- CERES_TEST(array_utils)
- CERES_TEST(autodiff)
- CERES_TEST(autodiff_cost_function)
- CERES_TEST(autodiff_local_parameterization)
- CERES_TEST(block_jacobi_preconditioner)
- CERES_TEST(block_random_access_dense_matrix)
- CERES_TEST(block_random_access_diagonal_matrix)
- CERES_TEST(block_random_access_sparse_matrix)
- CERES_TEST(block_sparse_matrix)
- CERES_TEST(c_api)
- CERES_TEST(canonical_views_clustering)
- CERES_TEST(compressed_row_sparse_matrix)
- CERES_TEST(conditioned_cost_function)
- CERES_TEST(corrector)
- CERES_TEST(cost_function_to_functor)
- CERES_TEST(covariance)
- CERES_TEST(cubic_interpolation)
- CERES_TEST(dense_sparse_matrix)
- CERES_TEST(dynamic_autodiff_cost_function)
- CERES_TEST(dynamic_compressed_row_sparse_matrix)
- CERES_TEST(dynamic_numeric_diff_cost_function)
- CERES_TEST(evaluator)
- CERES_TEST(gradient_checker)
- CERES_TEST(gradient_checking_cost_function)
- CERES_TEST(gradient_problem)
- CERES_TEST(gradient_problem_solver)
- CERES_TEST(graph)
- CERES_TEST(graph_algorithms)
- CERES_TEST(householder_vector)
- CERES_TEST(implicit_schur_complement)
- CERES_TEST(iterative_schur_complement_solver)
- CERES_TEST(jet)
- CERES_TEST(levenberg_marquardt_strategy)
- CERES_TEST(dogleg_strategy)
- CERES_TEST(line_search_preprocessor)
- CERES_TEST(local_parameterization)
- CERES_TEST(loss_function)
- CERES_TEST(minimizer)
- CERES_TEST(normal_prior)
- CERES_TEST(numeric_diff_cost_function)
- CERES_TEST(ordered_groups)
- CERES_TEST(parameter_block)
- CERES_TEST(parameter_block_ordering)
- CERES_TEST(partitioned_matrix_view)
- CERES_TEST(polynomial)
- CERES_TEST(problem)
- CERES_TEST(program)
- CERES_TEST(reorder_program)
- CERES_TEST(residual_block)
- CERES_TEST(residual_block_utils)
- CERES_TEST(rotation)
- CERES_TEST(schur_complement_solver)
- CERES_TEST(schur_eliminator)
- CERES_TEST(single_linkage_clustering)
- CERES_TEST(small_blas)
- CERES_TEST(solver)
+ ceres_test(array_utils)
+ ceres_test(autodiff)
+ ceres_test(autodiff_cost_function)
+ ceres_test(autodiff_local_parameterization)
+ ceres_test(block_jacobi_preconditioner)
+ ceres_test(block_random_access_dense_matrix)
+ ceres_test(block_random_access_diagonal_matrix)
+ ceres_test(block_random_access_sparse_matrix)
+ ceres_test(block_sparse_matrix)
+ ceres_test(c_api)
+ ceres_test(canonical_views_clustering)
+ ceres_test(compressed_row_sparse_matrix)
+ ceres_test(conditioned_cost_function)
+ ceres_test(corrector)
+ ceres_test(cost_function_to_functor)
+ ceres_test(covariance)
+ ceres_test(cubic_interpolation)
+ ceres_test(dense_sparse_matrix)
+ ceres_test(dynamic_autodiff_cost_function)
+ ceres_test(dynamic_compressed_row_sparse_matrix)
+ ceres_test(dynamic_numeric_diff_cost_function)
+ ceres_test(evaluator)
+ ceres_test(gradient_checker)
+ ceres_test(gradient_checking_cost_function)
+ ceres_test(gradient_problem)
+ ceres_test(gradient_problem_solver)
+ ceres_test(graph)
+ ceres_test(graph_algorithms)
+ ceres_test(householder_vector)
+ ceres_test(implicit_schur_complement)
+ ceres_test(iterative_schur_complement_solver)
+ ceres_test(jet)
+ ceres_test(levenberg_marquardt_strategy)
+ ceres_test(dogleg_strategy)
+ ceres_test(line_search_preprocessor)
+ ceres_test(local_parameterization)
+ ceres_test(loss_function)
+ ceres_test(minimizer)
+ ceres_test(normal_prior)
+ ceres_test(numeric_diff_cost_function)
+ ceres_test(ordered_groups)
+ ceres_test(parameter_block)
+ ceres_test(parameter_block_ordering)
+ ceres_test(partitioned_matrix_view)
+ ceres_test(polynomial)
+ ceres_test(problem)
+ ceres_test(program)
+ ceres_test(reorder_program)
+ ceres_test(residual_block)
+ ceres_test(residual_block_utils)
+ ceres_test(rotation)
+ ceres_test(schur_complement_solver)
+ ceres_test(schur_eliminator)
+ ceres_test(single_linkage_clustering)
+ ceres_test(small_blas)
+ ceres_test(solver)
# TODO(sameeragarwal): This test should ultimately be made
# independent of SuiteSparse.
- IF (SUITESPARSE AND SUITESPARSE_FOUND)
- CERES_TEST(compressed_col_sparse_matrix_utils)
- TARGET_LINK_LIBRARIES(compressed_col_sparse_matrix_utils_test
+ if (SUITESPARSE AND SUITESPARSE_FOUND)
+ ceres_test(compressed_col_sparse_matrix_utils)
+ target_link_libraries(compressed_col_sparse_matrix_utils_test
${SUITESPARSE_LIBRARIES})
- ENDIF (SUITESPARSE AND SUITESPARSE_FOUND)
+ endif (SUITESPARSE AND SUITESPARSE_FOUND)
- CERES_TEST(symmetric_linear_solver)
- CERES_TEST(triplet_sparse_matrix)
- CERES_TEST(trust_region_minimizer)
- CERES_TEST(trust_region_preprocessor)
- CERES_TEST(unsymmetric_linear_solver)
- CERES_TEST(visibility)
- CERES_TEST(visibility_based_preconditioner)
+ ceres_test(symmetric_linear_solver)
+ ceres_test(triplet_sparse_matrix)
+ ceres_test(trust_region_minimizer)
+ ceres_test(trust_region_preprocessor)
+ ceres_test(unsymmetric_linear_solver)
+ ceres_test(visibility)
+ ceres_test(visibility_based_preconditioner)
# Put the large end to end test last.
- CERES_TEST(system)
-ENDIF (BUILD_TESTING AND GFLAGS)
+ ceres_test(system)
+endif (BUILD_TESTING AND GFLAGS)