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