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