1# - try to find DCUBED library
2#
3#  DCUBED_LIBRARY_DIR, library search path
4#  DCUBED_INCLUDE_DIR, include search path
5#  DCUBED_{component}_LIBRARY, the library to link against
6#  DCUBED_ENVIRONMENT
7#  DCUBED_FOUND, If false, do not try to use this library.
8#
9# Plural versions refer to this library and its dependencies, and
10# are recommended to be used instead, unless you have a good reason.
11#
12# Useful configuration variables you might want to add to your cache:
13#  DCUBED_ROOT_DIR - A directory prefix to search
14#                         (a path that contains include/ as a subdirectory)
15#
16# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu>
17# http://academic.cleardefinition.com
18# Iowa State University HCI Graduate Program/VRAC
19#
20# Copyright Iowa State University 2009-2010.
21# Distributed under the Boost Software License, Version 1.0.
22# (See accompanying file LICENSE_1_0.txt or copy at
23# http://www.boost.org/LICENSE_1_0.txt)
24
25if(NOT BITS)
26	if(CMAKE_SIZEOF_VOID_P MATCHES "8")
27		set(BITS 64)
28	else()
29		set(BITS 32)
30	endif()
31endif()
32
33if(WIN32 AND MSVC)
34	include(CMakeDetermineVSServicePack)
35	determinevsservicepack(_sp)
36	if(MSVC71)
37		set(VC_VER vc71)
38		set(VC_VER_LONG vc71)
39	elseif(MSVC80)
40		set(VC_VER vc8)
41		set(VC_VER_LONG vc80)
42		# FIXME TODO provide more options here
43		set(D3BUILD nt8)
44		if("${_sp}" STREQUAL "vc80sp1")
45			set(_verstring nt8s1)
46		else()
47			set(_verstring nt8)
48		endif()
49	elseif(MSVC90)
50		set(VC_VER vc9)
51		set(VC_VER_LONG vc90)
52		set(_verstring nt9)
53	endif()
54
55	if(BITS EQUAL 32)
56		set(PLATFORM win32)
57	else()
58		set(PLATFORM win64)
59	endif()
60endif()
61
62if(NOT DCUBED_ROOT_DIR)
63	if(EXISTS "$ENV{DCUBED}" AND IS_DIRECTORY "$ENV{DCUBED}")
64		set(DCUBED_ROOT_DIR "$ENV{DCUBED}")
65	endif()
66endif()
67
68file(TO_CMAKE_PATH "${DCUBED_ROOT_DIR}" DCUBED_ROOT_DIR)
69
70set(DCUBED_ROOT_DIR
71	"${DCUBED_ROOT_DIR}"
72	CACHE
73	PATH
74	"Root directory to search for DCubed")
75
76# Do this by default
77if(NOT DEFINED DCUBED_NESTED_TARGETS)
78	set(DCUBED_NESTED_TARGETS TRUE)
79endif()
80
81set(DCUBED_NESTED_TARGETS
82	"${DCUBED_NESTED_TARGETS}"
83	CACHE
84	BOOL
85	"Whether we should compile the wrappers as a part of the solution")
86mark_as_advanced(DCUBED_NESTED_TARGETS)
87
88###
89# Configure DCubed
90###
91
92
93find_path(DCUBED_CORE_INCLUDE_DIR
94	d3ew_inc/modelgate.hxx
95	PATHS
96	"${DCUBED_ROOT_DIR}/inc")
97
98foreach(lib aem cdmwp d3e_base d3e_cd dcm dcm3 g3)
99	find_library(DCUBED_${lib}_LIBRARY
100		${lib}
101		PATHS
102		"${DCUBED_ROOT_DIR}/lib/${_verstring}")
103	if(DCUBED_${lib}_LIBRARY)
104		list(APPEND DCUBED_LIBRARIES ${DCUBED_${lib}_LIBRARY})
105		list(APPEND DCUBED_CORE_LIBRARIES ${DCUBED_${lib}_LIBRARY})
106	endif()
107	mark_as_advanced(DCUBED_${lib}_LIBRARY)
108endforeach()
109
110find_path(DCUBED_WRAPPER_INCLUDE_DIR
111	d3ew_p/p_utils.hxx
112	PATHS
113	"${DCUBED_ROOT_DIR}/source/wrapper_source/")
114
115foreach(lib d3ew_p d3ew_scene)
116	find_library(DCUBED_WRAPPER_${lib}_LIBRARY
117		${lib}_${D3BUILD}
118		PATHS
119		"${DCUBED_ROOT_DIR}/wrappers/cdmwp/${lib}")
120	mark_as_advanced(DCUBED_WRAPPER_${lib}_LIBRARY)
121endforeach()
122
123set(_nest_targets)
124if(DCUBED_WRAPPER_INCLUDE_DIR)
125	foreach(lib d3ew_p d3ew_scene)
126		if(DCUBED_NESTED_TARGETS OR NOT DCUBED_WRAPPER_${lib}_LIBRARY)
127			if(PARASOLID_FOUND)
128				set(_nest_targets YES)
129				set(DCUBED_WRAPPER_${lib}_LIBRARY
130					"dcubed_wrapper_${lib}_nested_target"
131					CACHE
132					STRING
133					"We will build the DCubed wrapper ${lib} lib."
134					FORCE)
135			else()
136				set(DCUBED_WRAPPER_${lib}_LIBRARY
137					"NESTED_TARGET_REQUIRES_PARASOLID-NOTFOUND"
138					CACHE
139					STRING
140					"Can't build the DCubed wrapper ${lib} without first finding Parasolid."
141					FORCE)
142			endif()
143		endif()
144	endforeach()
145endif()
146
147foreach(lib d3ew_p d3ew_scene)
148	if(DCUBED_WRAPPER_${lib}_LIBRARY)
149		list(APPEND DCUBED_WRAPPER_LIBRARIES ${DCUBED_WRAPPER_${lib}_LIBRARY})
150	endif()
151endforeach()
152
153if(NOT DCUBED_ROOT_DIR)
154	get_filename_component(_path "${DCUBED_dcm_LIBRARY}" PATH)
155	get_filename_component(_path "${_path}/../.." ABSOLUTE)
156	set(DCUBED_ROOT_DIR
157		"${_path}"
158		CACHE
159		PATH
160		"Root directory to search for DCubed"
161		FORCE)
162endif()
163
164#file(TO_NATIVE_PATH "${DCUBED_ROOT_DIR}" _d3envdir)
165set(DCUBED_ENVIRONMENT "DCUBED=${DCUBED_ROOT_DIR}")
166
167# handle the QUIETLY and REQUIRED arguments and set xxx_FOUND to TRUE if
168# all listed variables are TRUE
169include(FindPackageHandleStandardArgs)
170find_package_handle_standard_args(DCubed
171	DEFAULT_MSG
172	DCUBED_ROOT_DIR
173	DCUBED_LIBRARIES
174	DCUBED_CORE_LIBRARIES
175	DCUBED_CORE_INCLUDE_DIR
176	DCUBED_WRAPPER_INCLUDE_DIR
177	DCUBED_WRAPPER_LIBRARIES)
178
179if(DCUBED_FOUND)
180	if(_nest_targets)
181		get_filename_component(_moddir "${CMAKE_CURRENT_LIST_FILE}" PATH)
182		add_subdirectory("${_moddir}/nested_targets/DCubed")
183	endif()
184	set(DCUBED_INCLUDE_DIRS
185		"${DCUBED_CORE_INCLUDE_DIR}"
186		"${DCUBED_CORE_INCLUDE_DIR}/if3"
187		"${DCUBED_CORE_INCLUDE_DIR}/.."
188		"${DCUBED_WRAPPER_INCLUDE_DIR}")
189	mark_as_advanced(DCUBED_ROOT_DIR)
190endif()
191
192mark_as_advanced(DCUBED_CORE_INCLUDE_DIR DCUBED_WRAPPER_INCLUDE_DIR)
193