Browse Source

CMake: Begin implementing library detection and configuration.

kestred 12 years ago
parent
commit
71889acb88

+ 80 - 0
cmake/modules/FindEigen2.cmake

@@ -0,0 +1,80 @@
+# Filename: FindEigen2.cmake
+# Authors: [email protected], [email protected]
+# 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)

+ 80 - 0
cmake/modules/FindEigen3.cmake

@@ -0,0 +1,80 @@
+# Filename: FindEigen3.cmake
+# Authors: [email protected], [email protected], [email protected]
+# 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)

+ 24 - 0
cmake/modules/MangleJPEG.cmake

@@ -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()

+ 26 - 0
cmake/modules/MangleOpenSSL.cmake

@@ -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()

+ 29 - 0
cmake/modules/ManglePNG.cmake

@@ -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()

+ 36 - 1
dtool/Configure.cmake

@@ -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()