1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
|
# Copyright Contributors to the OpenVDB Project
# SPDX-License-Identifier: MPL-2.0
#
#[=======================================================================[.rst:
OpenVDBMayaSetup
-------------------
Finds the Maya installation and sets up dependencies for OpenVDB builds.
This ensures that all dependencies that are included with a Maya
distribution are configured to load from that installation.
Use this module by invoking include with the form::
include ( OpenVDBMayaSetup )
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``Maya_FOUND``
True if the system has Maya installed.
``Maya_VERSION``
The version of the Maya which was found.
Additionally, the following values are set for all dependent OpenVDB
builds, ensuring they link against the correct libraries. This may
overwrite user provided values.
``TBB_INCLUDEDIR``
``TBB_LIBRARYDIR``
Hints
^^^^^
Instead of explicitly setting the cache variables, the following
variables may be provided to tell this module where to look.
``Maya_ROOT``
Preferred installation prefix.
``ENV{Maya_ROOT}``
Preferred installation prefix.
``ENV{MAYA_LOCATION}``
Preferred installation prefix.
``DISABLE_CMAKE_SEARCH_PATHS``
Disable CMakes default search paths for find_xxx calls in this module
#]=======================================================================]
# Find the Maya installation and use Maya's CMake to initialize
# the Maya lib
cmake_minimum_required(VERSION 3.18)
set(_FIND_MAYA_ADDITIONAL_OPTIONS "")
if(DISABLE_CMAKE_SEARCH_PATHS)
set(_FIND_MAYA_ADDITIONAL_OPTIONS NO_DEFAULT_PATH)
endif()
# Set _MAYA_ROOT based on a user provided root var. Xxx_ROOT and ENV{Xxx_ROOT}
# are prioritised over the legacy capitalized XXX_ROOT variables for matching
# CMake 3.12 behaviour
# @todo deprecate -D and ENV MAYA_ROOT from CMake 3.12
if(Maya_ROOT)
set(_MAYA_ROOT ${Maya_ROOT})
elseif(DEFINED ENV{Maya_ROOT})
set(_MAYA_ROOT $ENV{Maya_ROOT})
elseif(MAYA_ROOT)
set(_MAYA_ROOT ${MAYA_ROOT})
elseif(DEFINED ENV{MAYA_ROOT})
set(_MAYA_ROOT $ENV{MAYA_ROOT})
endif()
set(_MAYA_ROOT_SEARCH_DIR)
if(_MAYA_ROOT)
list(APPEND _MAYA_ROOT_SEARCH_DIR ${_MAYA_ROOT})
endif()
# @todo deprecate MAYA_LOCATION? There may be workflows which set this variable
if(DEFINED ENV{MAYA_LOCATION})
list(APPEND _MAYA_ROOT_SEARCH_DIR $ENV{MAYA_LOCATION})
endif()
# ------------------------------------------------------------------------
# Search for Maya
# ------------------------------------------------------------------------
find_path(Maya_INCLUDE_DIR maya/MTypes.h
${_FIND_MAYA_ADDITIONAL_OPTIONS}
PATHS ${_MAYA_ROOT_SEARCH_DIR}
PATH_SUFFIXES include
)
if(NOT EXISTS "${Maya_INCLUDE_DIR}/maya/MTypes.h")
message(FATAL_ERROR "Unable to locate Maya Installation.")
endif()
# Determine Maya version, including point releases. Currently only works for
# Maya 2016 and onwards so there is no -x64 and -x32 suffixes in the version
file(STRINGS "${Maya_INCLUDE_DIR}/maya/MTypes.h"
_maya_version_string REGEX "#define MAYA_API_VERSION "
)
string(REGEX REPLACE ".*#define[ \t]+MAYA_API_VERSION[ \t]+([0-9]+).*$" "\\1"
_maya_version_string "${_maya_version_string}"
)
string(SUBSTRING ${_maya_version_string} 0 4 Maya_MAJOR_VERSION)
string(SUBSTRING ${_maya_version_string} 4 2 Maya_MINOR_VERSION)
if(Maya_MINOR_VERSION LESS 50)
set(Maya_VERSION ${Maya_MAJOR_VERSION})
else()
set(Maya_VERSION ${Maya_MAJOR_VERSION}.5)
endif()
unset(_maya_version_string)
# Find required maya libs
set(_MAYA_COMPONENT_LIST
OpenMaya
OpenMayaFX
OpenMayaUI
Foundation
)
set(Maya_LIBRARY_DIR "")
if(APPLE)
set(Maya_LIBRARY_DIR ${Maya_INCLUDE_DIR}/../Maya.app/Contents/MacOS/)
else()
set(Maya_LIBRARY_DIR ${Maya_INCLUDE_DIR}/../lib/)
endif()
set(Maya_LIB_COMPONENTS "")
foreach(COMPONENT ${_MAYA_COMPONENT_LIST})
find_library(Maya_${COMPONENT}_LIBRARY ${COMPONENT}
${_FIND_MAYA_ADDITIONAL_OPTIONS}
PATHS ${Maya_LIBRARY_DIR}
)
list(APPEND Maya_LIB_COMPONENTS ${Maya_${COMPONENT}_LIBRARY})
endforeach()
# ------------------------------------------------------------------------
# Cache and set Maya_FOUND
# ------------------------------------------------------------------------
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Maya
FOUND_VAR Maya_FOUND
REQUIRED_VARS
Maya_INCLUDE_DIR
Maya_LIB_COMPONENTS
VERSION_VAR Maya_VERSION
)
if(NOT Maya_FOUND)
message(FATAL_ERROR "Unable to locate Maya Installation.")
elseif(Maya_VERSION VERSION_LESS MINIMUM_MAYA_VERSION)
message(WARNING "Unsupported Maya Version ${Maya_VERSION}. Minimum "
"supported is ${MINIMUM_MAYA_VERSION}."
)
endif()
# ------------------------------------------------------------------------
# Configure dependencies
# ------------------------------------------------------------------------
if(NOT TBB_INCLUDEDIR)
set(TBB_INCLUDEDIR ${Maya_INCLUDE_DIR})
endif()
if(NOT TBB_LIBRARYDIR)
set(TBB_LIBRARYDIR ${Maya_LIBRARY_DIR})
endif()
# ------------------------------------------------------------------------
# Configure Maya
# ------------------------------------------------------------------------
set(Maya_LIBRARIES ${Maya_LIB_COMPONENTS})
set(Maya_INCLUDE_DIRS ${Maya_INCLUDE_DIR})
set(Maya_LIBRARY_DIRS ${Maya_LIBRARY_DIR})
if(APPLE)
set(Maya_DEFINITIONS
-DMAC_PLUGIN
-DREQUIRE_IOSTREAM
-DOSMac_
-DOSMac_MachO_
-D_BOOL
)
elseif(WIN32)
set(Maya_DEFINITIONS
-DNOMINMAX
-DNT_PLUGIN
-DREQUIRE_IOSTREAM
-D_USE_MATH_DEFINES
-D_CRT_SECURE_NO_WARNINGS
)
else()
set(Maya_DEFINITIONS
-D_BOOL
-DFUNCPROTO
-DGL_GLEXT_PROTOTYPES=1
-DREQUIRE_IOSTREAM
-DUNIX
-fno-gnu-keywords
-fno-omit-frame-pointer
-fno-strict-aliasing
-funsigned-char
-Wno-comment
-Wno-multichar
-Wno-strict-aliasing
-m64
-DBits64_
-DLINUX
-DLINUX_64
)
endif()
# Configure imported targets
if(NOT TARGET Maya)
add_library(Maya INTERFACE)
foreach(COMPONENT ${_MAYA_COMPONENT_LIST})
add_library(Maya::${COMPONENT} UNKNOWN IMPORTED)
set_target_properties(Maya::${COMPONENT} PROPERTIES
IMPORTED_LOCATION "${Maya_${COMPONENT}_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${Maya_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${Maya_INCLUDE_DIRS}"
)
target_link_libraries(Maya INTERFACE Maya::${COMPONENT})
endforeach()
endif()
macro(MAYA_SET_LIBRARY_PROPERTIES NAME)
if(WIN32)
set_target_properties(${NAME} PROPERTIES
SUFFIX ".mll"
PREFIX ""
LINK_FLAGS "/export:initializePlugin /export:uninitializePlugin"
)
elseif(APPLE)
set_target_properties(${NAME} PROPERTIES
SUFFIX ".bundle"
PREFIX ""
)
else()
set_target_properties(${NAME} PROPERTIES
PREFIX ""
)
endif()
endmacro()
|