1# - try to find VR Juggler 3.0 core library
2# Requires JCCL 1.4, Gadgeteer 1.4, VPR 2.2, and Sonix 1.4
3# (thus FindJCCL14.cmake, FindGadgeteer20.cmake, FindVPR22.cmake,
4# and FindSonix14.cmake)
5# Requires X11 if not on Mac or Windows.
6# Optionally uses Flagpoll and FindFlagpoll.cmake
7#
8# This library is a part of VR Juggler 3.0 - you probably want to use
9# find_package(VRJuggler30) instead, for an easy interface to this and
10# related scripts.  See FindVRJuggler30.cmake for more information.
11#
12#  VRJ30_LIBRARY_DIR, library search path
13#  VRJ30_INCLUDE_DIR, include search path
14#  VRJ30_LIBRARY, the library to link against
15#  VRJ30_FOUND, If false, do not try to use this library.
16#
17# Plural versions refer to this library and its dependencies, and
18# are recommended to be used instead, unless you have a good reason.
19#
20# Useful configuration variables you might want to add to your cache:
21#  VRJ30_ROOT_DIR - A directory prefix to search
22#                   (a path that contains include/ as a subdirectory)
23#
24# This script will use Flagpoll, if found, to provide hints to the location
25# of this library, but does not use the compiler flags returned by Flagpoll
26# directly.
27#
28# The VJ_BASE_DIR environment variable is also searched (preferentially)
29# when searching for this component, so most sane build environments should
30# "just work."  Note that you need to manually re-run CMake if you change
31# this environment variable, because it cannot auto-detect this change
32# and trigger an automatic re-run.
33#
34# Original Author:
35# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
36# http://academic.cleardefinition.com
37# Iowa State University HCI Graduate Program/VRAC
38# Updated for VR Juggler 3.0 by:
39# Brandon Newendorp <brandon@newendorp.com>
40#
41# Copyright Iowa State University 2009-2010.
42# Distributed under the Boost Software License, Version 1.0.
43# (See accompanying file LICENSE_1_0.txt or copy at
44# http://www.boost.org/LICENSE_1_0.txt)
45
46
47set(_HUMAN "VR Juggler 3.0 Core")
48set(_FP_PKG_NAME vrjuggler)
49set(_RELEASE_NAMES)
50set(_DEBUG_NAMES)
51foreach(VER 3_0 3_0_0 3_0_1 3_0_2)
52	list(APPEND _RELEASE_NAMES vrj-${VER})
53	list(APPEND _DEBUG_NAMES vrj_d-${VER})
54endforeach()
55set(_DIR vrjuggler-3.0)
56set(_HEADER vrj/Kernel/Kernel.h)
57
58include(SelectLibraryConfigurations)
59include(CreateImportedTarget)
60include(CleanLibraryList)
61include(CleanDirectoryList)
62
63if(VRJ30_FIND_QUIETLY)
64	set(_FIND_FLAGS "QUIET")
65else()
66	set(_FIND_FLAGS "")
67endif()
68
69# Try flagpoll.
70find_package(Flagpoll QUIET)
71
72if(FLAGPOLL)
73	flagpoll_get_include_dirs(${_FP_PKG_NAME} NO_DEPS)
74	flagpoll_get_library_dirs(${_FP_PKG_NAME} NO_DEPS)
75	flagpoll_get_extra_libs(${_FP_PKG_NAME} NO_DEPS)
76endif()
77
78set(VRJ30_ROOT_DIR
79	"${VRJ30_ROOT_DIR}"
80	CACHE
81	PATH
82	"Root directory to search for VRJ")
83if(DEFINED VRJUGGLER30_ROOT_DIR)
84	mark_as_advanced(VRJ30_ROOT_DIR)
85endif()
86if(NOT VRJ30_ROOT_DIR)
87	set(VRJ30_ROOT_DIR "${VRJUGGLER30_ROOT_DIR}")
88endif()
89
90set(_ROOT_DIR "${VRJ30_ROOT_DIR}")
91
92find_path(VRJ30_INCLUDE_DIR
93	${_HEADER}
94	HINTS
95	"${_ROOT_DIR}"
96	${${_FP_PKG_NAME}_FLAGPOLL_INCLUDE_DIRS}
97	PATH_SUFFIXES
98	${_DIR}
99	include/${_DIR}
100	include/
101	DOC
102	"Path to ${_HUMAN} includes root")
103
104find_library(VRJ30_LIBRARY_RELEASE
105	NAMES
106	${_RELEASE_NAMES}
107	HINTS
108	"${_ROOT_DIR}"
109	${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_DIRS}
110	PATH_SUFFIXES
111	${_VRJ_LIBSUFFIXES}
112	DOC
113	"${_HUMAN} release library full path")
114
115find_library(VRJ30_LIBRARY_DEBUG
116	NAMES
117	${_DEBUG_NAMES}
118	HINTS
119	"${_ROOT_DIR}"
120	${${_FP_PKG_NAME}_FLAGPOLL_LIBRARY_DIRS}
121	PATH_SUFFIXES
122	${_VRJ_LIBDSUFFIXES}
123	DOC
124	"${_HUMAN} debug library full path")
125
126select_library_configurations(VRJ30)
127
128# Dependencies
129if(NOT JCCL14_FOUND)
130	find_package(JCCL14 ${_FIND_FLAGS})
131endif()
132
133if(NOT GADGETEER20_FOUND)
134	find_package(Gadgeteer20 ${_FIND_FLAGS})
135endif()
136
137if(NOT VPR22_FOUND)
138	find_package(VPR22 ${_FIND_FLAGS})
139endif()
140
141if(NOT SONIX14_FOUND)
142	find_package(Sonix14 ${_FIND_FLAGS})
143endif()
144
145if(UNIX AND NOT APPLE AND NOT WIN32)
146	if(NOT X11_FOUND)
147		find_package(X11 ${_FIND_FLAGS})
148	endif()
149	set(_CHECK_EXTRAS
150		X11_FOUND
151		X11_X11_LIB
152		X11_ICE_LIB
153		X11_SM_LIB
154		X11_INCLUDE_DIR)
155endif()
156if(UNIX AND NOT WIN32)
157	find_library(VRJ30_libm_LIBRARY m)
158	mark_as_advanced(VRJ30_libm_LIBRARY)
159	list(APPEND _CHECK_EXTRAS VRJ30_libm_LIBRARY)
160endif()
161
162# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
163# all listed variables are TRUE
164include(FindPackageHandleStandardArgs)
165find_package_handle_standard_args(VRJ30
166	DEFAULT_MSG
167	VRJ30_LIBRARY
168	VRJ30_INCLUDE_DIR
169	JCCL14_FOUND
170	JCCL14_LIBRARIES
171	JCCL14_INCLUDE_DIR
172	GADGETEER20_FOUND
173	GADGETEER20_LIBRARIES
174	GADGETEER20_INCLUDE_DIR
175	VPR22_FOUND
176	VPR22_LIBRARIES
177	VPR22_INCLUDE_DIR
178	SONIX14_FOUND
179	SONIX14_LIBRARIES
180	SONIX14_INCLUDE_DIR
181	${_CHECK_EXTRAS})
182
183if(VRJ30_FOUND)
184	set(_DEPS
185		${JCCL14_LIBRARIES}
186		${GADGETEER20_LIBRARIES}
187		${VPR22_LIBRARIES}
188		${SONIX14_LIBRARIES})
189	if(UNIX AND NOT APPLE AND NOT WIN32)
190		list(APPEND _DEPS ${X11_X11_LIB} ${X11_ICE_LIB} ${X11_SM_LIB})
191	endif()
192	if(UNIX AND NOT WIN32)
193		list(APPEND _DEPS ${VRJ30_libm_LIBRARY})
194	endif()
195
196	set(VRJ30_INCLUDE_DIRS ${VRJ30_INCLUDE_DIR})
197	list(APPEND
198		VRJ30_INCLUDE_DIRS
199		${JCCL14_INCLUDE_DIRS}
200		${GADGETEER20_INCLUDE_DIRS}
201		${VPR22_INCLUDE_DIRS}
202		${SONIX14_INCLUDE_DIRS})
203	clean_directory_list(VRJ30_INCLUDE_DIRS)
204
205	if(VRJUGGLER30_CREATE_IMPORTED_TARGETS)
206		create_imported_target(VRJ30 ${_DEPS})
207	else()
208		clean_library_list(VRJ30_LIBRARIES ${_DEPS})
209	endif()
210
211	mark_as_advanced(VRJ30_ROOT_DIR)
212endif()
213
214mark_as_advanced(VRJ30_LIBRARY_RELEASE
215	VRJ30_LIBRARY_DEBUG
216	VRJ30_INCLUDE_DIR)
217