CMake: Begin implementing library detection and configuration.

This commit is contained in:
kestred 2013-11-29 00:28:43 -07:00
parent 111b1f0548
commit 71889acb88
6 changed files with 275 additions and 1 deletions

View File

@ -0,0 +1,80 @@
# Filename: FindEigen2.cmake
# Authors: montel@kde.org, g.gael@free.fr
# Redistribution and use is allowed according to the terms of the BSD license.
#
# Module modified to mangle the names for Panda3D.
#
# This module supports requiring a minimum version, e.g. you can do
# find_package(Eigen2 2.0.3)
# to require version 2.0.3 to newer of Eigen2.
#
# Once done this will define
#
# HAVE_EIGEN - system has eigen lib with correct version
# EIGEN_IPATH - the eigen include directory
# EIGEN_VERSION - eigen version
#
if(NOT Eigen2_FIND_VERSION)
if(NOT Eigen2_FIND_VERSION_MAJOR)
set(Eigen2_FIND_VERSION_MAJOR 2)
endif(NOT Eigen2_FIND_VERSION_MAJOR)
if(NOT Eigen2_FIND_VERSION_MINOR)
set(Eigen2_FIND_VERSION_MINOR 0)
endif(NOT Eigen2_FIND_VERSION_MINOR)
if(NOT Eigen2_FIND_VERSION_PATCH)
set(Eigen2_FIND_VERSION_PATCH 0)
endif(NOT Eigen2_FIND_VERSION_PATCH)
set(Eigen2_FIND_VERSION "${Eigen2_FIND_VERSION_MAJOR}.${Eigen2_FIND_VERSION_MINOR}.${Eigen2_FIND_VERSION_PATCH}")
endif(NOT Eigen2_FIND_VERSION)
macro(_eigen2_check_version)
file(READ "${EIGEN_IPATH}/Eigen/src/Core/util/Macros.h" _eigen2_version_header)
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen2_world_version_match "${_eigen2_version_header}")
set(EIGEN2_WORLD_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen2_major_version_match "${_eigen2_version_header}")
set(EIGEN2_MAJOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen2_minor_version_match "${_eigen2_version_header}")
set(EIGEN2_MINOR_VERSION "${CMAKE_MATCH_1}")
set(EIGEN_VERSION ${EIGEN2_WORLD_VERSION}.${EIGEN2_MAJOR_VERSION}.${EIGEN2_MINOR_VERSION})
if((${EIGEN2_WORLD_VERSION} NOTEQUAL 2) OR (${EIGEN2_MAJOR_VERSION} GREATER 10) OR (${EIGEN_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION}))
set(EIGEN_VERSION_OK FALSE)
else()
set(EIGEN_VERSION_OK TRUE)
endif()
if(NOT EIGEN_VERSION_OK)
message(STATUS "Eigen2 version ${EIGEN_VERSION} found in ${EIGEN_IPATH}, "
"but at least version ${Eigen2_FIND_VERSION} is required")
endif(NOT EIGEN_VERSION_OK)
endmacro(_eigen2_check_version)
if (EIGEN_IPATH)
# in cache already
_eigen2_check_version()
set(EIGEN2_FOUND ${EIGEN_VERSION_OK})
else (EIGEN_IPATH)
find_path(EIGEN_IPATH NAMES Eigen/Core
PATHS
${INCLUDE_INSTALL_DIR}
${KDE4_INCLUDE_DIR}
PATH_SUFFIXES eigen2
)
if(EIGEN_IPATH)
_eigen2_check_version()
endif(EIGEN_IPATH)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Eigen2 DEFAULT_MSG EIGEN_IPATH EIGEN_VERSION_OK)
mark_as_advanced(EIGEN_IPATH)
endif(EIGEN_IPATH)

View File

@ -0,0 +1,80 @@
# Filename: FindEigen3.cmake
# Authors: montel@kde.org, g.gael@free.fr, jacob.benoit.1@gmail.com
# Redistribution and use is allowed according to the terms of the BSD license.
#
# Module modified to mangle the names for Panda3D.
#
# This module supports requiring a minimum version, e.g. you can do
# find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
# HAVE_EIGEN - system has eigen lib with correct version
# EIGEN_IPATH - the eigen include directory
# EIGEN_VERSION - eigen version
#
if(NOT Eigen3_FIND_VERSION)
if(NOT Eigen3_FIND_VERSION_MAJOR)
set(Eigen3_FIND_VERSION_MAJOR 2)
endif(NOT Eigen3_FIND_VERSION_MAJOR)
if(NOT Eigen3_FIND_VERSION_MINOR)
set(Eigen3_FIND_VERSION_MINOR 91)
endif(NOT Eigen3_FIND_VERSION_MINOR)
if(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION_PATCH 0)
endif(NOT Eigen3_FIND_VERSION_PATCH)
set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)
macro(_eigen3_check_version)
file(READ "${EIGEN_IPATH}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
set(EIGEN_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
if(${EIGEN_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(EIGEN_VERSION_OK FALSE)
else(${EIGEN_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
set(EIGEN_VERSION_OK TRUE)
endif(${EIGEN_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
if(NOT EIGEN_VERSION_OK)
message(STATUS "Eigen3 version ${EIGEN_VERSION} found in ${EIGEN_IPATH}, "
"but at least version ${Eigen3_FIND_VERSION} is required")
endif(NOT EIGEN_VERSION_OK)
endmacro(_eigen3_check_version)
if (EIGEN_IPATH)
# in cache already
_eigen3_check_version()
set(HAVE_EIGEN ${EIGEN_VERSION_OK})
else (EIGEN_IPATH)
find_path(EIGEN_IPATH NAMES signature_of_eigen3_matrix_library
PATHS
${CMAKE_INSTALL_PREFIX}/include
${KDE4_INCLUDE_DIR}
PATH_SUFFIXES eigen3 eigen
)
if(EIGEN_IPATH)
_eigen3_check_version()
endif(EIGEN_IPATH)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN_IPATH EIGEN_VERSION_OK)
mark_as_advanced(EIGEN_IPATH)
endif(EIGEN_IPATH)

View File

@ -0,0 +1,24 @@
# Filename: MangleJPEG.cmake
# Author: kestred (28 Nov, 2013)
#
# MangleJPEG replaces the output variables of the builtin FindJPEG
# with vars matching Panda3D's existing config-var names.
#
if(JPEG_FOUND)
set(HAVE_JPEG TRUE)
set(JPEG_LIBS jpeg)
get_filename_component(JPEG_LIBRARY_DIR "${JPEG_LIBRARY}" PATH)
set(JPEG_IPATH "${JPEG_INCLUDE_DIR}" CACHE PATH "The path to libJPEG's include directory.") # Include path
set(JPEG_LPATH "${JPEG_LIBRARY_DIR}" CACHE PATH "The path to libJPEG's library directory.") # Library path
mark_as_advanced(JPEG_IPATH)
mark_as_advanced(JPEG_LPATH)
unset(JPEG_FOUND)
unset(JPEG_LIBRARY CACHE)
unset(JPEG_LIBRARIES)
unset(JPEG_INCLUDE_DIR CACHE)
unset(JPEG_LIBRARY_DIR)
endif()

View File

@ -0,0 +1,26 @@
# Filename: MangleOpenSSL.cmake
# Author: kestred (28 Nov, 2013)
#
# MangleOpenSSL replaces the output variables of the builtin FindOpenSSL
# with vars matching Panda3D's existing config-var names.
#
if(OPENSSL_FOUND)
set(HAVE_OPENSSL TRUE)
set(OPENSSL_LIBS ssl crypto)
list(GET OPENSSL_LIBRARIES 0 OPENSSL_LIBRARY)
get_filename_component(OPENSSL_LIBRARY_DIR "${OPENSSL_LIBRARY}" PATH)
set(OPENSSL_IPATH "${OPENSSL_INCLUDE_DIR}" CACHE PATH "The path to OpenSSL's include directory.") # Include path
set(OPENSSL_LPATH "${OPENSSL_LIBRARY_DIR}" CACHE PATH "The path to OpenSSL's library directory.") # Library path
mark_as_advanced(OPENSSL_IPATH)
mark_as_advanced(OPENSSL_LPATH)
unset(OPENSSL_FOUND)
unset(OPENSSL_LIBRARY)
unset(OPENSSL_LIBRARIES)
unset(OPENSSL_INCLUDE_DIR CACHE)
unset(OPENSSL_LIBRARY_DIR)
endif()

View File

@ -0,0 +1,29 @@
# Filename: ManglePNG.cmake
# Author: kestred (28 Nov, 2013)
#
# ManglePNG replaces the output variables of the builtin FindPNG
# with vars matching Panda3D's existing config-var names.
#
if(PNG_FOUND)
set(HAVE_PNG TRUE)
set(PNG_LIBS png)
get_filename_component(PNG_LIBRARY_DIR "${PNG_LIBRARY}" PATH)
set(PNG_IPATH "${PNG_INCLUDE_DIR}" CACHE PATH "The path to libPNG's include directory.") # Include path
set(PNG_LPATH "${PNG_LIBRARY_DIR}" CACHE PATH "The path to libPNG's library directory.") # Library path
mark_as_advanced(PNG_IPATH)
mark_as_advanced(PNG_LPATH)
set(PNG_VERSION ${PNG_VERSION_STRING})
unset(PNG_FOUND)
unset(PNG_LIBRARY CACHE)
unset(PNG_LIBRARIES)
unset(PNG_DEFINITIONS)
unset(PNG_INCLUDE_DIR CACHE)
unset(PNG_PNG_INCLUDE_DIR CACHE)
unset(PNG_LIBRARY_DIR)
unset(PNG_VERSION_STRING)
endif()

View File

@ -1,8 +1,18 @@
message(STATUS "")
message("Configuring support for the following optional third-party packages:")
# Check for and configure Eigen library
find_package(Eigen3 QUIET)
if(HAVE_EIGEN)
message(STATUS "+ Eigen linear algebra library")
if(WIN32)
set(EIGEN_CFLAGS "/arch:SSE2")
else()
set(EIGEN_CFLAGS "-msse2")
endif()
set(LINMATH_ALIGN ON CACHE BOOL "If on, vectorization is enabled in build.")
if(LINMATH_ALIGN)
message(STATUS "+ (vectorization enabled in build)")
else()
@ -12,25 +22,50 @@ else()
message(STATUS "- Did not find Eigen linear algebra library")
endif()
#find_package(OpenSSL ssl crypto)
# Check for and configure OpenSSL library
# Mangle the builtin FindOpenSSL output to match Panda3D's config-style
find_package(OpenSSL QUIET COMPONENTS ssl crypto)
include(MangleOpenSSL)
if(HAVE_OPENSSL)
message(STATUS "+ OpenSSL")
if(NOT DEFINED OPTIMIZE OR OPTIMIZE LESS 4)
set(REPORT_OPENSSL_ERRORS ON CACHE BOOL "If on, OpenSSL reports verbose error messages when they occur.")
else()
set(REPORT_OPENSSL_ERRORS OFF CACHE BOOL "If on, OpenSSL reports verbose error messages when they occur.")
endif()
else()
message(STATUS "- Did not find OpenSSL")
endif()
# Check for and configure JPEG library
# Mangle the builtin FindJPEG output to match Panda3D's config-style
find_package(JPEG QUIET COMPONENTS jpeg)
include(MangleJPEG)
if(HAVE_JPEG)
message(STATUS "+ libjpeg")
set(PHAVE_JPEGINT_H TRUE CACHE BOOL "Set to False if missing jpegint.h.")
else()
message(STATUS "- Did not find libjpeg")
unset(PHAVE_JPEGINT_H CACHE)
endif()
# Check for and configure PNG library
find_package(PNG QUIET COMPONENTS png)
# Mangle the builtin FindPNG output to match Panda3D's config-style
include(ManglePNG)
if(HAVE_PNG)
message(STATUS "+ libpng")
else()
message(STATUS "- Did not find libpng")
endif()
if(HAVE_TIFF)
message(STATUS "+ libtiff")
else()