Browse Source

Standards-compilant FindMangum.cmake module.

It is now required to specify which modules to find, as only these
modules will be searched for.
pull/279/head
Vladimír Vondruš 14 years ago
parent
commit
e8403c5123
  1. 10
      CMakeLists.txt
  2. 159
      modules/FindMagnum.cmake

10
CMakeLists.txt

@ -16,14 +16,10 @@ if(BUILD_TESTS)
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${Magnum_SOURCE_DIR}/modules/")
find_package(Corrade REQUIRED)
set_parent_scope(MAGNUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set_parent_scope(MAGNUM_LIBRARY Magnum)
set_parent_scope(MAGNUM_PHYSICS_LIBRARY MagnumPhysics)
set_parent_scope(MAGNUM_PRIMITIVES_LIBRARY MagnumPrimitives)
set_parent_scope(MAGNUM_MESHTOOLS_LIBRARY MagnumMeshTools)
set_parent_scope(MAGNUM_SHADERS_LIBRARY MagnumShaders)
# Populate MAGNUM_*_INSTALL_DIR variables, check for dependencies
set(MAGNUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(MAGNUM_LIBRARY Magnum)
include(FindMagnum)
add_subdirectory(modules)

159
modules/FindMagnum.cmake

@ -1,58 +1,129 @@
# Find Magnum - Magnum handling module for CMake
# - Find Magnum
#
# This module depends on Corrade and additionally defines:
# Basic usage:
#
# MAGNUM_FOUND - True if Magnum library is found
# MAGNUM_INCLUDE_DIR - Include dir for Magnum
# MAGNUM_LIBRARY - Magnum library
# MAGNUM_PHYSICS_LIBRARY - Magnum physics library
# MAGNUM_PRIMITIVES_LIBRARY - Library with primitives
# find_package(Magnum [REQUIRED])
#
# MAGNUM_LIBRARY_INSTALL_DIR - Library installation directory
# MAGNUM_CMAKE_MODULE_INSTALL_DIR - Installation dir for CMake modules
# MAGNUM_INCLUDE_INSTALL_DIR - Include installation directory for headers
# This command tries to find Magnum library and then defines:
#
# MAGNUM_FOUND - Whether the library was found
# MAGNUM_LIBRARY - Magnum library
# MAGNUM_INCLUDE_DIR - Root include dir
# MAGNUM_PLUGINS_IMPORTER_DIR - Directory with importer plugins
#
# This command will try to find only the base library, not the optional
# components. The base library depends on Corrade, OpenGL and GLEW libraries.
# Additional dependencies are specified by the components. The optional
# components are:
#
# MeshTools - MeshTools library
# Physics - Physics library
# Primitives - Library with stock geometric primitives (static)
# Shaders - Library with stock shaders
#
# Example usage with specifying additional components is:
#
# find_package(Magnum [REQUIRED|COMPONENTS] MeshTools Primitives GlutContext)
#
# For each component is then defined:
#
# MAGNUM_*_FOUND - Whether the component was found
# MAGNUM_*_LIBRARY - Component library
#
# Additionally these variables are defined for internal usage:
#
# MAGNUM_LIBRARY_INSTALL_DIR - Library installation directory
# MAGNUM_PLUGINS_INSTALL_DIR - Plugin installation directory
# MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR - Importer plugin installation directory
# MAGNUM_CMAKE_MODULE_INSTALL_DIR - Installation dir for CMake modules
# MAGNUM_INCLUDE_INSTALL_DIR - Header installation directory
# MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR - Plugin header installation directory
#
# Dependencies
find_package(Corrade REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
if (MAGNUM_INCLUDE_DIR AND MAGNUM_LIBRARY AND MAGNUM_PHYSICS_LIBRARY AND MAGNUM_PRIMITIVES_LIBRARY AND MAGNUM_MESHTOOLS_LIBRARY AND MAGNUM_SHADERS_LIBRARY)
# Magnum library
find_library(MAGNUM_LIBRARY Magnum)
# Already in cache
set(MAGNUM_FOUND TRUE)
# Root include dir
find_path(MAGNUM_INCLUDE_DIR
NAMES Magnum.h
PATH_SUFFIXES Magnum
)
else()
# Libraries
find_library(MAGNUM_LIBRARY Magnum)
find_library(MAGNUM_PHYSICS_LIBRARY MagnumPhysics)
find_library(MAGNUM_PRIMITIVES_LIBRARY MagnumPrimitives)
find_library(MAGNUM_MESHTOOLS_LIBRARY MagnumMeshTools)
find_library(MAGNUM_SHADERS_LIBRARY MagnumShaders)
# Paths
find_path(MAGNUM_INCLUDE_DIR
NAMES Magnum.h
PATH_SUFFIXES Magnum
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args("Magnum" DEFAULT_MSG
MAGNUM_INCLUDE_DIR
MAGNUM_LIBRARY
MAGNUM_PHYSICS_LIBRARY
MAGNUM_PRIMITIVES_LIBRARY
MAGNUM_MESHTOOLS_LIBRARY
MAGNUM_SHADERS_LIBRARY
)
# Additional components
foreach(component ${Magnum_FIND_COMPONENTS})
string(TOUPPER ${component} _COMPONENT)
endif()
# Find the library
find_library(MAGNUM_${_COMPONENT}_LIBRARY Magnum${component})
set(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_SUFFIX ${component})
# Mesh tools library
if(${component} STREQUAL MeshTools)
set(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES CompressIndices.h)
endif()
# Physics library
if(${component} STREQUAL Physics)
set(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES AbstractShape.h)
endif()
# Primitives library
if(${component} STREQUAL Primitives)
set(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES Cube.h)
endif()
# Shaders library
if(${component} STREQUAL Shaders)
set(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES PhongShader.h)
endif()
# Try to find the includes
if(_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES)
find_path(_MAGNUM_${_COMPONENT}_INCLUDE_DIR
NAMES ${_MAGNUM_${_COMPONENT}_INCLUDE_PATH_NAMES}
PATHS ${MAGNUM_INCLUDE_DIR}/${_MAGNUM_${_COMPONENT}_INCLUDE_PATH_SUFFIX}
)
endif()
# Decide if the library was found
if(MAGNUM_${_COMPONENT}_LIBRARY AND _MAGNUM_${_COMPONENT}_INCLUDE_DIR)
set(Magnum_${component}_FOUND TRUE)
else()
set(Magnum_${component}_FOUND FALSE)
endif()
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Magnum
REQUIRED_VARS MAGNUM_INCLUDE_DIR MAGNUM_LIBRARY
HANDLE_COMPONENTS
)
# Installation dirs
include(CorradeLibSuffix)
set_parent_scope(MAGNUM_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
set_parent_scope(MAGNUM_PLUGINS_INSTALL_DIR ${MAGNUM_LIBRARY_INSTALL_DIR}/magnum)
set_parent_scope(MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR ${MAGNUM_PLUGINS_INSTALL_DIR}/importers)
set_parent_scope(MAGNUM_CMAKE_MODULE_INSTALL_DIR ${CMAKE_ROOT}/Modules)
set_parent_scope(MAGNUM_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/Magnum)
set_parent_scope(MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/Magnum/Plugins)
set(MAGNUM_LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})
set(MAGNUM_PLUGINS_INSTALL_DIR ${MAGNUM_LIBRARY_INSTALL_DIR}/magnum)
set(MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR ${MAGNUM_PLUGINS_INSTALL_DIR}/importers)
set(MAGNUM_CMAKE_MODULE_INSTALL_DIR ${CMAKE_ROOT}/Modules)
set(MAGNUM_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/Magnum)
set(MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/Magnum/Plugins)
mark_as_advanced(FORCE
MAGNUM_LIBRARY_INSTALL_DIR
MAGNUM_PLUGINS_INSTALL_DIR
MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR
MAGNUM_CMAKE_MODULE_INSTALL_DIR
MAGNUM_INCLUDE_INSTALL_DIR
MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR
)
# Importer plugins dir
if(NOT WIN32)
set(MAGNUM_PLUGINS_IMPORTER_DIR ${MAGNUM_PLUGINS_INSTALL_DIR}/importers)
else()
set(MAGNUM_PLUGINS_IMPORTER_DIR importers)
endif()

Loading…
Cancel
Save