1# - try to find VRPN library
2#
3# Cache Variables:
4#  VRPN_LIBRARY
5#  VRPN_SERVER_LIBRARY
6#  VRPN_INCLUDE_DIR
7#
8# Non-cache variables you might use in your CMakeLists.txt:
9#  VRPN_FOUND
10#  VRPN_SERVER_LIBRARIES - server libraries
11#  VRPN_LIBRARIES - client libraries
12#  VRPN_CLIENT_DEFINITIONS - definitions if you only use the client library
13#  VRPN_DEFINITIONS - Client-only definition if all we found was the client library.
14#  VRPN_INCLUDE_DIRS
15#
16# VRPN_ROOT_DIR is searched preferentially for these files
17#
18# Requires these CMake modules:
19#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
20#
21# Original Author:
22# 2009-2012 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
23# http://academic.cleardefinition.com
24# Iowa State University HCI Graduate Program/VRAC
25#
26# Copyright Iowa State University 2009-2012.
27# Distributed under the Boost Software License, Version 1.0.
28# (See accompanying file LICENSE_1_0.txt or copy at
29# http://www.boost.org/LICENSE_1_0.txt)
30
31set(VRPN_ROOT_DIR
32	"${VRPN_ROOT_DIR}"
33	CACHE
34	PATH
35	"Root directory to search for VRPN")
36
37if("${CMAKE_SIZEOF_VOID_P}" MATCHES "8")
38	set(_libsuffixes lib64 lib)
39
40	# 64-bit dir: only set on win64
41	file(TO_CMAKE_PATH "$ENV{ProgramW6432}" _progfiles)
42else()
43	set(_libsuffixes lib)
44	set(_PF86 "ProgramFiles(x86)")
45	if(NOT "$ENV{${_PF86}}" STREQUAL "")
46		# 32-bit dir: only set on win64
47		file(TO_CMAKE_PATH "$ENV{${_PF86}}" _progfiles)
48	else()
49		# 32-bit dir on win32, useless to us on win64
50		file(TO_CMAKE_PATH "$ENV{ProgramFiles}" _progfiles)
51	endif()
52endif()
53
54set(_vrpn_quiet)
55if(VRPN_FIND_QUIETLY)
56	set(_vrpn_quiet QUIET)
57endif()
58
59###
60# Configure VRPN
61###
62
63find_path(VRPN_INCLUDE_DIR
64	NAMES
65	vrpn_Connection.h
66	PATH_SUFFIXES
67	include
68	include/vrpn
69	HINTS
70	"${VRPN_ROOT_DIR}"
71	PATHS
72	"${_progfiles}/VRPN"
73	C:/usr/local
74	/usr/local)
75
76find_library(VRPN_LIBRARY
77	NAMES
78	vrpn
79	PATH_SUFFIXES
80	${_libsuffixes}
81	HINTS
82	"${VRPN_ROOT_DIR}"
83	PATHS
84	"${_progfiles}/VRPN"
85	C:/usr/local
86	/usr/local)
87
88find_library(VRPN_SERVER_LIBRARY
89	NAMES
90	vrpnserver
91	PATH_SUFFIXES
92	${_libsuffixes}
93	HINTS
94	"${VRPN_ROOT_DIR}"
95	PATHS
96	"${_progfiles}/VRPN"
97	C:/usr/local
98	/usr/local)
99
100###
101# Dependencies
102###
103set(_deps_libs)
104set(_deps_includes)
105set(_deps_check)
106
107find_package(quatlib ${_vrpn_quiet})
108list(APPEND _deps_libs ${QUATLIB_LIBRARIES})
109list(APPEND _deps_includes ${QUATLIB_INCLUDE_DIRS})
110list(APPEND _deps_check QUATLIB_FOUND)
111
112if(NOT WIN32)
113	find_package(Threads ${_vrpn_quiet})
114	list(APPEND _deps_libs ${CMAKE_THREAD_LIBS_INIT})
115	list(APPEND _deps_check CMAKE_HAVE_THREADS_LIBRARY)
116endif()
117
118if(WIN32)
119	find_package(Libusb1 QUIET)
120	if(LIBUSB1_FOUND)
121		list(APPEND _deps_libs ${LIBUSB1_LIBRARIES})
122		list(APPEND _deps_includes ${LIBUSB1_INCLUDE_DIRS})
123	endif()
124endif()
125
126
127# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
128# all listed variables are TRUE
129include(FindPackageHandleStandardArgs)
130find_package_handle_standard_args(VRPN
131	DEFAULT_MSG
132	VRPN_LIBRARY
133	VRPN_INCLUDE_DIR
134	${_deps_check})
135
136if(VRPN_FOUND)
137	set(VRPN_INCLUDE_DIRS "${VRPN_INCLUDE_DIR}" ${_deps_includes})
138	set(VRPN_LIBRARIES "${VRPN_LIBRARY}" ${_deps_libs})
139	set(VRPN_SERVER_LIBRARIES "${VRPN_SERVER_LIBRARY}" ${_deps_libs})
140
141	if(VRPN_LIBRARY)
142		set(VRPN_CLIENT_DEFINITIONS -DVRPN_CLIENT_ONLY)
143	else()
144		unset(VRPN_CLIENT_DEFINITIONS)
145	endif()
146
147	if(VRPN_LIBRARY AND NOT VRPN_SERVER_LIBRARY)
148		set(VRPN_DEFINITIONS -DVRPN_CLIENT_ONLY)
149	else()
150		unset(VRPN_DEFINITIONS)
151	endif()
152
153	mark_as_advanced(VRPN_ROOT_DIR)
154endif()
155
156mark_as_advanced(VRPN_LIBRARY VRPN_SERVER_LIBRARY VRPN_INCLUDE_DIR)
157