1# - try to find CPPDOM library 2# Optionally uses Flagpoll and FindFlagpoll.cmake 3# 4# CPPDOM_LIBRARY_DIR, library search path 5# CPPDOM_INCLUDE_DIR, include search path 6# CPPDOM_LIBRARY, the library to link against 7# CPPDOM_CXX_FLAGS 8# CPPDOM_FOUND, If false, do not try to use this library. 9# 10# Useful configuration variables you might want to add to your cache: 11# CPPDOM_ROOT_DIR - A directory prefix to search 12# (a path that contains include/ as a subdirectory) 13# CPPDOM_ADDITIONAL_VERSIONS - Additional versions (outside of 0.7.8 to 1.2.0) 14# to use when constructing search names and paths 15# 16# This script will use Flagpoll, if found, to provide hints to the location 17# of this library, but does not use the compiler flags returned by Flagpoll 18# directly. 19# 20# VR Juggler requires this package, so this Find script takes that into 21# account when determining where to search for the desired files. 22# The VJ_BASE_DIR environment variable is searched (preferentially) 23# when searching for this package, so most sane VR Juggler build environments 24# should "just work." Note that you need to manually re-run CMake if you 25# change this environment variable, because it cannot auto-detect this change 26# and trigger an automatic re-run. 27# 28# Original Author: 29# 2009-2012 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> 30# http://academic.cleardefinition.com 31# Iowa State University HCI Graduate Program/VRAC 32# 33# Copyright Iowa State University 2009-2012. 34# Distributed under the Boost Software License, Version 1.0. 35# (See accompanying file LICENSE_1_0.txt or copy at 36# http://www.boost.org/LICENSE_1_0.txt) 37 38set(_HUMAN "cppdom") 39set(_HEADER cppdom/cppdom.h) 40set(_FP_PKG_NAME cppdom) 41 42set(CPPDOM_VERSIONS 43 ${CPPDOM_ADDITIONAL_VERSIONS} 44 1.3.0 45 1.2.0 46 1.1.2 47 1.1.1 48 1.1.0 49 1.0.3 50 1.0.2 51 1.0.1 52 1.0.0 53 0.7.10 54 0.7.9 55 0.7.8) 56set(CPPDOM_DIRS) 57set(CPPDOM_RELEASE_LIB_NAMES) 58set(CPPDOM_DEBUG_LIB_NAMES) 59foreach(_version ${CPPDOM_VERSIONS}) 60 string(REGEX REPLACE "[-\\.]" "_" _versionclean ${_version}) 61 list(APPEND CPPDOM_DIRS cppdom-${_version}) 62 list(APPEND CPPDOM_HEADER_DIRS include/cppdom-${_version}) 63 list(APPEND CPPDOM_RELEASE_LIB_NAMES cppdom-${_versionclean}) 64 list(APPEND CPPDOM_DEBUG_LIB_NAMES cppdom_d-${_versionclean}) 65endforeach() 66 67include(SelectLibraryConfigurations) 68include(CreateImportedTarget) 69include(CleanLibraryList) 70include(CleanDirectoryList) 71include(FindPackageHandleStandardArgs) 72 73# Handle the case where a recent cppdom is supplying its own cmake config file. 74option(CPPDOM_ATTEMPT_CMAKE_MODULE "Should we attempt to use CPPDOM's own CMake module for configuration?" ON) 75mark_as_advanced(CPPDOM_ATTEMPT_CMAKE_MODULE) 76if(NOT cppdom_FOUND) 77 find_package(cppdom QUIET NO_MODULE) 78 if(cppdom_FOUND) 79 set(CPPDOM_LIBRARIES ${cppdom_LIBRARIES}) 80 set(CPPDOM_INCLUDE_DIRS ${cppdom_INCLUDE_DIRS}) 81 find_package_handle_standard_args(CPPDOM 82 DEFAULT_MSG 83 CPPDOM_LIBRARIES 84 CPPDOM_INCLUDE_DIRS) 85 return() 86 endif() 87endif() 88 89if(CPPDOM_INCLUDE_DIRS AND CPPDOM_LIBRARIES) 90 # in cache already 91 set(CPPDOM_FIND_QUIETLY TRUE) 92endif() 93 94# Try flagpoll. 95find_package(Flagpoll QUIET) 96 97if(FLAGPOLL) 98 flagpoll_get_include_dirs(${_FP_PKG_NAME} NO_DEPS) 99 flagpoll_get_library_dirs(${_FP_PKG_NAME} NO_DEPS) 100 flagpoll_get_library_names(${_FP_PKG_NAME} NO_DEPS) 101endif() 102 103set(CPPDOM_ROOT_DIR 104 "${CPPDOM_ROOT_DIR}" 105 CACHE 106 PATH 107 "Root directory to search for CPPDOM") 108if(DEFINED VRJUGGLER22_ROOT_DIR) 109 mark_as_advanced(CPPDOM_ROOT_DIR) 110endif() 111if(NOT CPPDOM_ROOT_DIR) 112 if(VRJUGGLER22_ROOT_DIR) 113 set(CPPDOM_ROOT_DIR "${VRJUGGLER22_ROOT_DIR}") 114 elseif(VRJUGGLER30_ROOT_DIR) 115 set(CPPDOM_ROOT_DIR "${VRJUGGLER30_ROOT_DIR}") 116 endif() 117endif() 118 119set(_ROOT_DIR "${CPPDOM_ROOT_DIR}") 120 121if(CMAKE_SIZEOF_VOID_P MATCHES "8") 122 set(_VRJ_LIBSUFFIXES lib64 lib) 123 set(_VRJ_LIBDSUFFIXES 124 debug 125 lib64/x86_64/debug 126 lib64/debug 127 lib64 128 lib/x86_64/debug 129 lib/debug 130 lib) 131 set(_VRJ_LIBDSUFFIXES_ONLY 132 debug 133 lib64/x86_64/debug 134 lib64/debug 135 lib/x86_64/debug 136 lib/debug) 137else() 138 set(_VRJ_LIBSUFFIXES lib) 139 set(_VRJ_LIBDSUFFIXES debug lib/i686/debug lib/debug lib) 140 set(_VRJ_LIBDSUFFIXES_ONLY debug lib/i686/debug lib/debug) 141endif() 142 143find_path(CPPDOM_INCLUDE_DIR 144 ${_HEADER} 145 HINTS 146 ${_ROOT_DIR} 147 ${${_FP_PKG_NAME}_FLAGPOLL_INCLUDE_DIRS} 148 PATHS 149 PATH_SUFFIXES 150 ${CPPDOM_DIRS} 151 ${CPPDOM_HEADER_DIRS} 152 include 153 DOC 154 "Path to ${_HUMAN} includes root") 155 156find_library(CPPDOM_LIBRARY_RELEASE 157 NAMES 158 ${CPPDOM_RELEASE_LIB_NAMES} 159 ${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_NAMES} 160 HINTS 161 ${_ROOT_DIR} 162 ${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_DIRS} 163 PATH_SUFFIXES 164 ${_VRJ_LIBSUFFIXES} 165 DOC 166 "${_HUMAN} library full path") 167 168find_library(CPPDOM_LIBRARY_DEBUG 169 NAMES 170 ${CPPDOM_DEBUG_LIB_NAMES} 171 HINTS 172 ${_ROOT_DIR} 173 ${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_DIRS} 174 PATH_SUFFIXES 175 ${_VRJ_LIBDSUFFIXES} 176 DOC 177 "${_HUMAN} debug library full path") 178 179# Fallback to same library name but in the debug folder 180if(NOT CPPDOM_LIBRARY_DEBUG) 181 find_library(CPPDOM_LIBRARY_DEBUG 182 NAMES 183 ${CPPDOM_LIB_NAMES} 184 HINTS 185 ${CPPDOM_INCLUDE_DIR}/../ 186 ${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_DIRS} 187 PATH_SUFFIXES 188 ${_VRJ_LIBDSUFFIXES_ONLY} 189 NO_DEFAULT_PATH 190 DOC 191 "${_HUMAN} debug library full path") 192endif() 193 194if(CPPDOM_LIBRARY_RELEASE OR CPPDOM_LIBRARY_DEBUG) 195 select_library_configurations(CPPDOM) 196endif() 197 198# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if 199# all listed variables are TRUE 200find_package_handle_standard_args(CPPDOM 201 DEFAULT_MSG 202 CPPDOM_LIBRARY 203 CPPDOM_INCLUDE_DIR) 204 205if(CPPDOM_FOUND) 206 set(CPPDOM_INCLUDE_DIRS ${CPPDOM_INCLUDE_DIR}) 207 if(MSVC) 208 set(CPPDOM_CXX_FLAGS "/wd4290") 209 endif() 210 211 mark_as_advanced(CPPDOM_ROOT_DIR) 212endif() 213 214mark_as_advanced(CPPDOM_LIBRARY_RELEASE 215 CPPDOM_LIBRARY_DEBUG 216 CPPDOM_INCLUDE_DIR) 217