Windows MSVC allow building with openvdb / tbb
[blender.git] / CMakeLists.txt
1 # ***** BEGIN GPL LICENSE BLOCK *****
2 #
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # The Original Code is Copyright (C) 2006, Blender Foundation
18 # All rights reserved.
19 #
20 # The Original Code is: all of this file.
21 #
22 # Contributor(s): Jacques Beaurain.
23 #
24 # ***** END GPL LICENSE BLOCK *****
25
26 #-----------------------------------------------------------------------------
27 # We don't allow in-source builds. This causes no end of troubles because
28 # all out-of-source builds will use the CMakeCache.txt file there and even
29 # build the libs and objects in it.
30
31 if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
32         if(NOT DEFINED WITH_IN_SOURCE_BUILD)
33                 message(FATAL_ERROR
34                         "CMake generation for blender is not allowed within the source directory!"
35                         "\n Remove the CMakeCache.txt file and try again from another folder, e.g.:"
36                         "\n "
37                         "\n rm CMakeCache.txt"
38                         "\n cd .."
39                         "\n mkdir cmake-make"
40                         "\n cd cmake-make"
41                         "\n cmake ../blender"
42                         "\n "
43                         "\n Alternately define WITH_IN_SOURCE_BUILD to force this option (not recommended!)"
44                 )
45         endif()
46 endif()
47
48 cmake_minimum_required(VERSION 2.8)
49
50 if(NOT EXECUTABLE_OUTPUT_PATH)
51         set(FIRST_RUN TRUE)
52 else()
53         set(FIRST_RUN FALSE)
54 endif()
55
56 # this starts out unset
57 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
58
59 # avoid having empty buildtype
60 set(CMAKE_BUILD_TYPE_INIT "Release")
61
62 # quiet output for Makefiles, 'make -s' helps too
63 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
64
65 # global compile definitions since add_definitions() adds for all.
66
67 if(NOT (${CMAKE_VERSION} VERSION_LESS 3.0))
68         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
69                 $<$<CONFIG:Debug>:DEBUG;_DEBUG>
70                 $<$<CONFIG:Release>:NDEBUG>
71                 $<$<CONFIG:MinSizeRel>:NDEBUG>
72                 $<$<CONFIG:RelWithDebInfo>:NDEBUG>
73         )
74 else()
75         # keep until CMake-3.0 is min requirement
76         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG           DEBUG _DEBUG)
77         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE         NDEBUG)
78         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL      NDEBUG)
79         set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO  NDEBUG)
80 endif()
81
82 #-----------------------------------------------------------------------------
83 # Set policy
84
85 # see "cmake --help-policy CMP0003"
86 # So library linking is more sane
87 cmake_policy(SET CMP0003 NEW)
88
89 # So BUILDINFO and BLENDERPATH strings are automatically quoted
90 cmake_policy(SET CMP0005 NEW)
91
92 # So syntax problems are errors
93 cmake_policy(SET CMP0010 NEW)
94
95 # Input directories must have CMakeLists.txt
96 cmake_policy(SET CMP0014 NEW)
97
98 #-----------------------------------------------------------------------------
99 # Load some macros.
100 include(build_files/cmake/macros.cmake)
101
102
103 #-----------------------------------------------------------------------------
104 # Initialize project.
105
106 blender_project_hack_pre()
107
108 project(Blender)
109
110 blender_project_hack_post()
111
112 enable_testing()
113
114 #-----------------------------------------------------------------------------
115 # Redirect output files
116
117 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
118 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
119 set(TESTS_OUTPUT_DIR ${EXECUTABLE_OUTPUT_PATH}/tests CACHE INTERNAL "" FORCE)
120
121 #-----------------------------------------------------------------------------
122 # Set default config options
123
124 get_blender_version()
125
126
127 #-----------------------------------------------------------------------------
128 # Platform Specific Defaults
129
130 # list of var-names
131 set(_init_vars)
132
133 # initialize to ON
134 macro(option_defaults_init)
135         foreach(_var ${ARGV})
136                 set(${_var} ON)
137                 list(APPEND _init_vars "${_var}")
138         endforeach()
139         unset(_var)
140 endmacro()
141
142 # remove from namespace
143 macro(option_defaults_clear)
144         foreach(_var ${_init_vars})
145                 unset(${_var})
146         endforeach()
147         unset(_var)
148         unset(_init_vars)
149 endmacro()
150
151
152 # values to initialize WITH_****
153 option_defaults_init(
154         _init_BUILDINFO
155         _init_CODEC_FFMPEG
156         _init_CYCLES_OSL
157         _init_IMAGE_OPENEXR
158         _init_INPUT_NDOF
159         _init_JACK
160         _init_OPENCOLLADA
161         _init_OPENCOLORIO
162         _init_SDL
163         _init_FFTW3
164         _init_GAMEENGINE
165         _init_OPENSUBDIV
166 )
167
168 # customize...
169 if (UNIX AND NOT APPLE)
170         # some of these libraries are problematic on Linux
171         # disable less important dependencies by default
172         set(_init_CODEC_FFMPEG                   OFF)
173         set(_init_CYCLES_OSL                     OFF)
174         set(_init_IMAGE_OPENEXR                  OFF)
175         set(_init_INPUT_NDOF                     OFF)
176         set(_init_JACK                           OFF)
177         set(_init_OPENCOLLADA                    OFF)
178         set(_init_OPENCOLORIO                    OFF)
179         set(_init_SDL                            OFF)
180         set(_init_FFTW3                          OFF)
181         set(_init_OPENSUBDIV                     OFF)
182 elseif(WIN32)
183         set(_init_JACK                           OFF)
184 elseif(APPLE)
185         set(_init_JACK                           OFF)
186         set(_init_OPENSUBDIV                     OFF)
187 endif()
188
189
190 #-----------------------------------------------------------------------------
191 # Options
192
193 # First platform spesific non-cached vars
194 if(UNIX AND NOT APPLE)
195         set(WITH_X11 ON)
196 endif()
197
198 # Blender internal features
199 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
200 mark_as_advanced(WITH_BLENDER)
201
202 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
203
204 option(WITH_PYTHON        "Enable Embedded Python API  (only disable for development)" ON)
205 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default" ON) 
206 mark_as_advanced(WITH_PYTHON)  # dont want people disabling this unless they really know what they are doing.
207 mark_as_advanced(WITH_PYTHON_SECURITY)  # some distributions see this as a security issue, rather than have them patch it, make a build option.
208
209 option(WITH_PYTHON_SAFETY "Enable internal API error checking to track invalid data to prevent crash on access (at the expense of some effeciency, only enable for development)." OFF)
210 mark_as_advanced(WITH_PYTHON_SAFETY)
211 option(WITH_PYTHON_MODULE "Enable building as a python module which runs without a user interface, like running regular blender in background mode (experimental, only enable for development), installs to PYTHON_SITE_PACKAGES (or CMAKE_INSTALL_PREFIX if WITH_INSTALL_PORTABLE is enabled)." OFF)
212 if(APPLE)
213         option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
214 endif()
215
216 option(WITH_BUILDINFO     "Include extra build details (only disable for development & faster builds)" ${_init_BUILDINFO})
217 if(${CMAKE_VERSION} VERSION_LESS 2.8.8)
218         # add_library OBJECT arg unsupported
219         set(WITH_BUILDINFO OFF)
220 endif()
221
222 option(WITH_IK_ITASC      "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
223 option(WITH_IK_SOLVER     "Enable Legacy IK solver (only disable for development)" ON)
224 option(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio effects)" ${_init_FFTW3})
225 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
226 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
227 mark_as_advanced(WITH_SYSTEM_BULLET)
228 option(WITH_GAMEENGINE    "Enable Game Engine" ${_init_GAMEENGINE})
229 option(WITH_PLAYER        "Build Player" OFF)
230 option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
231
232 # Compositor
233 option(WITH_COMPOSITOR         "Enable the tile based nodal compositor" ON)
234
235 option(WITH_OPENSUBDIV    "Enable OpenSubdiv for surface subdivision" _init_OPENSUBDIV)
236
237 option(WITH_OPENVDB       "Enable features relying on OpenVDB" OFF)
238 option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" OFF)
239
240 # GHOST Windowing Library Options
241 option(WITH_GHOST_DEBUG   "Enable debugging output for the GHOST library" OFF)
242 mark_as_advanced(WITH_GHOST_DEBUG)
243
244 option(WITH_GHOST_SDL    "Enable building Blender against SDL for windowing rather than the native APIs" OFF)
245 mark_as_advanced(WITH_GHOST_SDL)
246
247 if(WITH_X11)
248         option(WITH_GHOST_XDND    "Enable drag'n'drop support on X11 using XDND protocol" ON)
249 endif()
250
251 # Misc...
252 option(WITH_HEADLESS      "Build without graphical support (renderfarm, server mode only)" OFF)
253 mark_as_advanced(WITH_HEADLESS)
254
255 option(WITH_AUDASPACE    "Build with blenders audio library (only disable if you know what you're doing!)" ON)
256 option(WITH_SYSTEM_AUDASPACE "Build with external audaspace library installed on the system (only enable if you know what you're doing!)" OFF)
257 mark_as_advanced(WITH_AUDASPACE)
258 mark_as_advanced(WITH_SYSTEM_AUDASPACE)
259
260 if(NOT WITH_AUDASPACE)
261         set(WITH_SYSTEM_AUDASPACE OFF)
262 endif()
263
264 option(WITH_OPENMP        "Enable OpenMP (has to be supported by the compiler)" ON)
265 if(UNIX AND NOT APPLE)
266         option(WITH_OPENMP_STATIC "Link OpenMP statically (only used by the release environment)" OFF)
267         mark_as_advanced(WITH_OPENMP_STATIC)
268 endif()
269
270 if(WITH_X11)
271         option(WITH_X11_XINPUT    "Enable X11 Xinput (tablet support and unicode input)"  ON)
272         option(WITH_X11_XF86VMODE "Enable X11 video mode switching"                       ON)
273 endif()
274
275 if(UNIX AND NOT APPLE)
276         option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
277         option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system"           ON)
278 else()
279         # not an option for other OS's
280         set(WITH_SYSTEM_GLEW OFF)
281         set(WITH_SYSTEM_GLES OFF)
282 endif()
283
284
285 # (unix defaults to System OpenJPEG On)
286 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" OFF)
287
288 if(UNIX AND NOT APPLE)
289         option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
290 endif()
291
292
293 # Modifiers
294 option(WITH_MOD_FLUID           "Enable Elbeem Modifier (Fluid Simulation)" ON)
295 option(WITH_MOD_SMOKE           "Enable Smoke Modifier (Smoke Simulation)" ON)
296 option(WITH_MOD_BOOLEAN         "Enable Boolean Modifier" ON)
297 option(WITH_MOD_REMESH          "Enable Remesh Modifier" ON)
298 # option(WITH_MOD_CLOTH_ELTOPO    "Enable Experimental cloth solver" OFF)  # this is now only available in a branch
299 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
300 option(WITH_MOD_OCEANSIM        "Enable Ocean Modifier" OFF)
301
302 # Image format support
303 option(WITH_OPENIMAGEIO         "Enable OpenImageIO Support (http://www.openimageio.org)" ON)
304 option(WITH_IMAGE_OPENEXR       "Enable OpenEXR Support (http://www.openexr.com)" ${_init_IMAGE_OPENEXR})
305 option(WITH_IMAGE_OPENJPEG      "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
306 option(WITH_IMAGE_TIFF          "Enable LibTIFF Support" ON)
307 option(WITH_IMAGE_DDS           "Enable DDS Image Support" ON)
308 option(WITH_IMAGE_CINEON        "Enable CINEON and DPX Image Support" ON)
309 option(WITH_IMAGE_HDR           "Enable HDR Image Support" ON)
310 option(WITH_IMAGE_FRAMESERVER   "Enable image FrameServer Support for rendering" ON)
311
312 # Audio/Video format support
313 option(WITH_CODEC_AVI           "Enable Blenders own AVI file support (raw/jpeg)" ON)
314 option(WITH_CODEC_FFMPEG        "Enable FFMPeg Support (http://ffmpeg.org)" ${_init_CODEC_FFMPEG})
315 option(WITH_CODEC_SNDFILE       "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
316
317 if(APPLE)
318         option(WITH_CODEC_QUICKTIME     "Enable Quicktime Support" ON)
319 endif()
320
321 # 3D format support
322 # Disable opencollada when we don't have precompiled libs
323 option(WITH_OPENCOLLADA   "Enable OpenCollada Support (http://www.opencollada.org)" ${_init_OPENCOLLADA})
324
325 # Sound output
326 option(WITH_SDL           "Enable SDL for sound and joystick support" ${_init_SDL})
327 option(WITH_OPENAL        "Enable OpenAL Support (http://www.openal.org)" ON)
328 option(WITH_JACK          "Enable Jack Support (http://www.jackaudio.org)" ${_init_JACK})
329 if(UNIX AND NOT APPLE)
330         option(WITH_JACK_DYNLOAD  "Enable runtime dynamic Jack libraries loading" OFF)
331 endif()
332 if(UNIX AND NOT APPLE)
333         option(WITH_SDL_DYNLOAD  "Enable runtime dynamic SDL libraries loading" OFF)
334 endif()
335
336 # Compression
337 option(WITH_LZO           "Enable fast LZO compression (used for pointcache)" ON)
338 option(WITH_LZMA          "Enable best LZMA compression, (used for pointcache)" ON)
339 if(UNIX AND NOT APPLE)
340         option(WITH_SYSTEM_LZO    "Use the system LZO library" OFF)
341 endif()
342
343 # Camera/motion tracking
344 option(WITH_LIBMV         "Enable Libmv structure from motion library" ON)
345 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." OFF)
346 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
347
348 # Freestyle
349 option(WITH_FREESTYLE     "Enable Freestyle (advanced edges rendering)" ON)
350
351 # Misc
352 if(WIN32)
353         option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
354 endif()
355 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ${_init_INPUT_NDOF})
356 option(WITH_RAYOPTIMIZATION     "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
357 if(UNIX AND NOT APPLE)
358         option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
359         option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
360         if(WITH_STATIC_LIBS)
361                 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
362                 mark_as_advanced(WITH_BOOST_ICU)
363         endif()
364 endif()
365 option(WITH_PYTHON_INSTALL       "Copy system python into the blender install folder" ON)
366 option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder"  ON)
367 set(PYTHON_NUMPY_PATH            "" CACHE PATH "Path to python site-packages or dist-packages containing 'numpy' module")
368 mark_as_advanced(PYTHON_NUMPY_PATH)
369 option(WITH_CPU_SSE              "Enable SIMD instruction if they're detected on the host machine" ON)
370 mark_as_advanced(WITH_CPU_SSE)
371
372 if(UNIX AND NOT APPLE)
373         option(WITH_PYTHON_INSTALL_REQUESTS "Copy system requests into the blender install folder" ON)
374         set(PYTHON_REQUESTS_PATH "" CACHE PATH "Path to python site-packages or dist-packages containing 'requests' module")
375         mark_as_advanced(PYTHON_REQUESTS_PATH)
376 endif()
377
378 # Cycles
379 option(WITH_CYCLES                                      "Enable Cycles Render Engine" ON)
380 option(WITH_CYCLES_STANDALONE           "Build Cycles standalone application" OFF)
381 option(WITH_CYCLES_STANDALONE_GUI       "Build Cycles standalone with GUI" OFF)
382 option(WITH_CYCLES_OSL                          "Build Cycles with OSL support" ${_init_CYCLES_OSL})
383 option(WITH_CYCLES_CUDA_BINARIES        "Build Cycles CUDA binaries" OFF)
384 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_37 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for")
385 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
386 unset(PLATFORM_DEFAULT)
387 option(WITH_CYCLES_LOGGING      "Build Cycles with logging support" ON)
388 option(WITH_CYCLES_DEBUG        "Build Cycles with extra debug capabilities" OFF)
389 mark_as_advanced(WITH_CYCLES_LOGGING)
390 mark_as_advanced(WITH_CYCLES_DEBUG)
391
392 option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
393 mark_as_advanced(WITH_CUDA_DYNLOAD)
394
395 # LLVM
396 option(WITH_LLVM                                        "Use LLVM" OFF)
397 if(APPLE)
398         option(LLVM_STATIC                                      "Link with LLVM static libraries" ON) # we prefer static llvm build on Apple, dyn build possible though
399 else()
400         option(LLVM_STATIC                                      "Link with LLVM static libraries" OFF)
401 endif()
402 mark_as_advanced(LLVM_STATIC)
403
404 # disable for now, but plan to support on all platforms eventually
405 option(WITH_MEM_JEMALLOC   "Enable malloc replacement (http://www.canonware.com/jemalloc)" ON)
406 mark_as_advanced(WITH_MEM_JEMALLOC)
407
408 # currently only used for BLI_mempool
409 option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
410 mark_as_advanced(WITH_MEM_VALGRIND)
411
412 # Debug
413 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
414 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
415
416 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
417 mark_as_advanced(WITH_ASSERT_ABORT)
418
419 option(WITH_BOOST                                       "Enable features depending on boost" ON)
420
421 # Unit testsing
422 option(WITH_GTESTS "Enable GTest unit testing" OFF)
423
424
425 # Documentation
426 if(UNIX AND NOT APPLE)
427         option(WITH_DOC_MANPAGE "Create a manual page (Unix manpage)" OFF)
428 endif()
429
430
431 # OpenGL
432
433 option(WITH_GLEW_MX             "Support multiple GLEW contexts (experimental)"                                                                     OFF )
434 option(WITH_GLEW_ES             "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
435 option(WITH_GL_EGL              "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)"       OFF)
436 option(WITH_GL_PROFILE_COMPAT   "Support using the OpenGL 'compatibility' profile. (deprecated)"                                                    ON )
437 option(WITH_GL_PROFILE_CORE     "Support using the OpenGL 3.2+ 'core' profile."                                                                     OFF)
438 option(WITH_GL_PROFILE_ES20     "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)"                                  OFF)
439
440 mark_as_advanced(
441         WITH_GLEW_MX
442         WITH_GLEW_ES
443         WITH_GL_EGL
444         WITH_GL_PROFILE_COMPAT
445         WITH_GL_PROFILE_CORE
446         WITH_GL_PROFILE_ES20
447 )
448
449 if(WITH_GL_PROFILE_COMPAT)
450         set(WITH_GLU ON)
451 else()
452         set(WITH_GLU OFF)
453 endif()
454
455 if(WIN32)
456         option(WITH_GL_ANGLE "Link with the ANGLE library, an OpenGL ES 2.0 implementation based on Direct3D, instead of the system OpenGL library." OFF)
457         mark_as_advanced(WITH_GL_ANGLE)
458 endif()
459
460 if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
461         message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
462         set(WITH_SYSTEM_GLEW OFF)
463 endif()
464
465 if(WIN32)
466         getDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
467         set(CPACK_INSTALL_PREFIX ${CMAKE_GENERIC_PROGRAM_FILES}/${})
468 endif()
469
470 # Experimental support of C++11
471 option(WITH_CPP11 "Build with C++11 standard enabled, for development use only!" OFF)
472 mark_as_advanced(WITH_CPP11)
473
474 # Dependency graph
475 option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON)
476 mark_as_advanced(WITH_LEGACY_DEPSGRAPH)
477
478 # avoid using again
479 option_defaults_clear()
480
481 # end option(...)
482
483
484
485 # By default we want to install to the directory we are compiling our executables
486 # unless specified otherwise, which we currently do not allow
487 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
488         if(WIN32)
489                 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
490         elseif(APPLE)
491                 set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH}/\${BUILD_TYPE} CACHE PATH "default install path" FORCE)
492         else()
493                 if(WITH_INSTALL_PORTABLE)
494                         set(CMAKE_INSTALL_PREFIX ${EXECUTABLE_OUTPUT_PATH} CACHE PATH "default install path" FORCE)
495                 endif()
496         endif()
497 endif()
498
499
500
501 # Apple
502
503 if(APPLE)
504         if(${CMAKE_VERSION} VERSION_LESS 3.0) # else breaks setting CMP0043 policy
505                 cmake_minimum_required(VERSION 2.8.8)
506                 cmake_policy(VERSION 2.8.8)
507         endif()
508
509         if(NOT CMAKE_OSX_ARCHITECTURES)
510                 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
511                 "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
512                 FORCE)
513         endif()
514         
515         execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
516         if(${MAC_SYS} MATCHES 15)
517                 set(OSX_SYSTEM 10.11)
518                 # throw an error here, older cmake cannot handle 2 digit subversion!
519                 cmake_minimum_required(VERSION 3.0.0)
520         elseif(${MAC_SYS} MATCHES 14)
521                 set(OSX_SYSTEM 10.10)
522                 # throw an error here, older cmake cannot handle 2 digit subversion!
523                 cmake_minimum_required(VERSION 3.0.0)
524         elseif(${MAC_SYS} MATCHES 13)
525                 set(OSX_SYSTEM 10.9)
526         elseif(${MAC_SYS} MATCHES 12)
527                 set(OSX_SYSTEM 10.8)
528         elseif(${MAC_SYS} MATCHES 11)
529                 set(OSX_SYSTEM 10.7)
530         elseif(${MAC_SYS} MATCHES 10)
531                 set(OSX_SYSTEM 10.6)
532         elseif(${MAC_SYS} MATCHES 9)
533                 set(OSX_SYSTEM 10.5)
534         else()
535                 set(OSX_SYSTEM unsupported)
536         endif()
537         
538         # workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not take xcode-select path into accout
539         # but would always look into /Applications/Xcode.app while dev versions are named Xcode<version>-DP<preview_number>
540         execute_process(COMMAND xcode-select --print-path  OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
541         string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case
542         
543         if(${CMAKE_GENERATOR} MATCHES "Xcode")
544         
545                 if(${XCODE_VERSION} VERSION_GREATER 4.2) # earlier xcode has no bundled developer dir, no sense in getting xcode path from
546                         string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) # reduce to XCode name without dp extension
547                         if(${DP_NAME} MATCHES Xcode5)
548                                 set(XCODE_VERSION 5)
549                         endif()
550                 endif()
551
552                 ##### cmake incompatibility with xcode  4.3 and higher #####
553                 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
554                         message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
555                 endif()
556                 ### end cmake incompatibility with xcode 4.3 and higher ###
557                 
558                 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
559                         # Xcode 4 defaults to the Apple LLVM Compiler.
560                         # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
561                         set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
562                         message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
563                 endif()
564         else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
565                 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
566                 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
567                 unset(XCODE_VERS_BUILD_NR)
568         endif()
569
570         message(STATUS "Detected OS X ${OSX_SYSTEM} and Xcode ${XCODE_VERSION} at ${XCODE_BUNDLE}")
571
572         if(${XCODE_VERSION} VERSION_LESS 4.3)
573                 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE)  # use guaranteed existing sdk
574         else()
575                 # note: xcode-select path could be ambigous, cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
576                 # so i use a selfcomposed bundlepath here  
577                 set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
578                 message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
579                 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
580                 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
581                 if(${CMAKE_GENERATOR} MATCHES "Xcode")
582                         set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM}) # to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
583                 endif()
584         endif()
585
586         if(OSX_SYSTEM MATCHES 10.9)
587                 set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT}) # make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
588         endif()
589
590         if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
591                 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE) # 10.6 is our min. target, if you use higher sdk, weak linking happens
592         endif()
593         
594         if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
595                 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
596                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
597                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
598                 add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
599         endif()
600
601         option(WITH_LIBS10.5  "Use 10.5 libs (needed for 64bit builds)" OFF)
602 endif()
603
604
605 #-----------------------------------------------------------------------------
606 # Check for conflicting/unsupported configurations
607
608 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_STANDALONE)
609         message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER or WITH_CYCLES_STANDALONE must be enabled, nothing to do!")
610 endif()
611
612 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
613         message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
614 endif()
615
616 if(NOT WITH_AUDASPACE)
617         if(WITH_OPENAL)
618                 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
619         endif()
620         if(WITH_JACK)
621                 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
622         endif()
623         if(WITH_GAMEENGINE)
624                 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
625         endif()
626 endif()
627
628 if(NOT WITH_SDL AND WITH_GHOST_SDL)
629         message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
630 endif()
631
632 # python module, needs some different options
633 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
634         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
635 endif()
636
637 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
638         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
639 endif()
640
641
642 # may as well build python module without a UI
643 if(WITH_PYTHON_MODULE)
644         set(WITH_HEADLESS ON)
645 endif()
646
647 if(NOT WITH_PYTHON)
648         set(WITH_CYCLES OFF)
649 endif()
650
651 # enable boost for cycles, audaspace or i18n
652 # otherwise if the user disabled
653 if(NOT WITH_BOOST)
654         # Explicitly disabled. so disable all deps.
655         macro(set_and_warn
656                 _setting _val)
657                 if(${${_setting}})
658                         message(STATUS "'WITH_BOOST' is disabled: forceing 'set(${_setting} ${_val})'")
659                 endif()
660                 set(${_setting} ${_val})
661         endmacro()
662
663         set_and_warn(WITH_CYCLES         OFF)
664         set_and_warn(WITH_AUDASPACE      OFF)
665         set_and_warn(WITH_INTERNATIONAL  OFF)
666         set_and_warn(WITH_OPENVDB        OFF)
667         set_and_warn(WITH_OPENCOLORIO    OFF)
668         set_and_warn(WITH_MOD_BOOLEAN    OFF)
669
670         set_and_warn(WITH_OPENAL         OFF)  # depends on AUDASPACE
671         set_and_warn(WITH_GAMEENGINE     OFF)  # depends on AUDASPACE
672         set_and_warn(WITH_PLAYER         OFF)  # depends on GAMEENGINE
673 elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL OR WITH_OPENVDB OR WITH_OPENCOLORIO OR WITH_MOD_BOOLEAN)
674         # Keep enabled
675 else()
676         # Enabled but we don't need it
677         set(WITH_BOOST OFF)
678 endif()
679
680 # auto enable openimageio for cycles
681 if(WITH_CYCLES)
682         set(WITH_OPENIMAGEIO ON)
683
684         # auto enable llvm for cycles_osl
685         if(WITH_CYCLES_OSL)
686                 set(WITH_LLVM ON CACHE BOOL "" FORCE)
687         endif()
688 else()
689         set(WITH_CYCLES_OSL OFF)
690 endif()
691
692 # auto enable openimageio linking dependencies
693 if(WITH_OPENIMAGEIO)
694         set(WITH_IMAGE_OPENEXR ON)
695         set(WITH_IMAGE_TIFF ON)
696 endif()
697
698 # don't store paths to libs for portable distribution
699 if(WITH_INSTALL_PORTABLE)
700         set(CMAKE_SKIP_BUILD_RPATH TRUE)
701 endif()
702
703 if(WITH_GHOST_SDL OR WITH_HEADLESS)
704         set(WITH_X11           OFF)
705         set(WITH_X11_XINPUT    OFF)
706         set(WITH_X11_XF86VMODE OFF)
707         set(WITH_GHOST_XDND    OFF)
708         set(WITH_INPUT_IME     OFF)
709 endif()
710
711 if(WITH_CPU_SSE)
712         TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
713 else()
714         message(STATUS "SSE and SSE2 optimizations are DISABLED!")
715         set(COMPILER_SSE_FLAG)
716         set(COMPILER_SSE2_FLAG)
717 endif()
718
719 TEST_SHARED_PTR_SUPPORT()
720 TEST_UNORDERED_MAP_SUPPORT()
721
722 if(WITH_AUDASPACE)
723         if(WITH_SYSTEM_AUDASPACE)
724                 set(AUDASPACE_DEFINITIONS
725                         -DWITH_AUDASPACE
726                         -DWITH_SYSTEM_AUDASPACE
727                         "-DAUD_DEVICE_H=<AUD_Device.h>"
728                         "-DAUD_SPECIAL_H=<AUD_Special.h>"
729                         "-DAUD_SOUND_H=<AUD_Sound.h>"
730                         "-DAUD_HANDLE_H=<AUD_Handle.h>"
731                         "-DAUD_SEQUENCE_H=<AUD_Sequence.h>"
732                         "-DAUD_TYPES_H=<AUD_Types.h>"
733                         "-DAUD_PYTHON_H=<python/PyAPI.h>"
734                 )
735         else()
736                 set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
737                 set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
738                 set(AUDASPACE_DEFINITIONS
739                         -DWITH_AUDASPACE
740                         "-DAUD_DEVICE_H=<AUD_C-API.h>"
741                         "-DAUD_SPECIAL_H=<AUD_C-API.h>"
742                         "-DAUD_SOUND_H=<AUD_C-API.h>"
743                         "-DAUD_HANDLE_H=<AUD_C-API.h>"
744                         "-DAUD_SEQUENCE_H=<AUD_C-API.h>"
745                         "-DAUD_TYPES_H=<AUD_Space.h>"
746                 )
747         endif()
748 endif()
749
750 #-----------------------------------------------------------------------------
751 # Check for valid directories
752 # ... a partial checkout may cause this.
753 #
754 # note: we need to check for a known subdir in both cases.
755 #       since uninitialized git submodules will give blank dirs
756
757 if(WITH_INTERNATIONAL)
758         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale/languages")
759                 message(WARNING "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
760                                                 "This is a 'git submodule', which are known not to work with bridges to other version "
761                                                 "control systems, disabling 'WITH_INTERNATIONAL'.")
762                 set(WITH_INTERNATIONAL OFF)
763         endif()
764 endif()
765
766 if(WITH_PYTHON)
767         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons/modules")
768                 message(WARNING "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
769                                                 "This is a 'git submodule', which are known not to work with bridges to other version "
770                                                 "control systems: * CONTINUING WITHOUT ADDONS *")
771         endif()
772 endif()
773
774 #-----------------------------------------------------------------------------
775 # Initialize un-cached vars, avoid unused warning
776
777 # linux only, not cached
778 set(WITH_BINRELOC OFF)
779
780 # MAXOSX only, set to avoid uninitialized
781 set(EXETYPE "")
782
783 # C/C++ flags
784 set(PLATFORM_CFLAGS)
785
786 # these are added to later on.
787 set(C_WARNINGS)
788 set(CXX_WARNINGS)
789
790 # for gcc -Wno-blah-blah
791 set(CC_REMOVE_STRICT_FLAGS)
792
793 # libraries to link the binary with passed to target_link_libraries()
794 # known as LLIBS to scons
795 set(PLATFORM_LINKLIBS "")
796
797 # Added to linker flags in setup_liblinks
798 # - CMAKE_EXE_LINKER_FLAGS
799 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
800 set(PLATFORM_LINKFLAGS "")
801 set(PLATFORM_LINKFLAGS_DEBUG "")
802
803
804 # For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
805 # On Unix:
806 #   cmake ../blender \
807 #         -D PYTHON_VERSION=3.5 \
808 #         -D PYTHON_INCLUDE_DIR=/opt/py35/include/python3.5d \
809 #         -D PYTHON_LIBRARY=/opt/py35/lib/libpython3.5d.so
810 #
811 # On Macs:
812 #   cmake ../blender \
813 #         -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.5/include/python3.5 \
814 #         -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/config \
815 #         -G Xcode
816 #
817 # When changing any of this remember to update the notes in doc/build_systems/cmake.txt
818
819 #-----------------------------------------------------------------------------
820 #Platform specifics
821
822 if(WITH_X11)
823         find_package(X11 REQUIRED)
824
825         find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
826         mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
827
828         list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
829
830         if(WITH_X11_XINPUT)
831                 if(X11_Xinput_LIB)
832                         list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
833                 else()
834                         set(WITH_X11_XINPUT OFF)
835                 endif()
836         endif()
837
838         if(WITH_X11_XF86VMODE)
839                 # XXX, why dont cmake make this available?
840                 find_library(X11_Xxf86vmode_LIB Xxf86vm   ${X11_LIB_SEARCH_PATH})
841                 mark_as_advanced(X11_Xxf86vmode_LIB)
842                 if(X11_Xxf86vmode_LIB)
843                         list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
844                 else()
845                         set(WITH_X11_XF86VMODE OFF)
846                 endif()
847         endif()
848
849 endif()
850
851
852 # ----------------------------------------------------------------------------
853 # Main Platform Checks
854 #
855 # - UNIX
856 # - WIN32
857 # - APPLE
858
859 if(UNIX AND NOT APPLE)
860         macro(find_package_wrapper)
861                 if(WITH_STATIC_LIBS)
862                         find_package_static(${ARGV})
863                 else()
864                         find_package(${ARGV})
865                 endif()
866         endmacro()
867
868         find_package_wrapper(JPEG REQUIRED)
869         find_package_wrapper(PNG REQUIRED)
870         find_package_wrapper(ZLIB REQUIRED)
871         find_package_wrapper(Freetype REQUIRED)
872
873         if(WITH_LZO AND WITH_SYSTEM_LZO)
874                 find_package_wrapper(LZO)
875                 if(NOT LZO_FOUND)
876                         message(FATAL_ERROR "Failed finding system LZO version!")
877                 endif()
878         endif()
879
880         if(WITH_SYSTEM_EIGEN3)
881                 find_package_wrapper(Eigen3)
882                 if(NOT EIGEN3_FOUND)
883                         message(FATAL_ERROR "Failed finding system Eigen3 version!")
884                 endif()
885         endif()
886         # else values are set below for all platforms
887
888         if(WITH_PYTHON)
889                 # No way to set py35, remove for now.
890                 # find_package(PythonLibs)
891
892                 # Use our own instead, since without py is such a rare case,
893                 # require this package
894                 # XXX Linking errors with debian static python :/
895 #               find_package_wrapper(PythonLibsUnix REQUIRED)
896                 find_package(PythonLibsUnix REQUIRED)
897         endif()
898
899         if(WITH_IMAGE_OPENEXR)
900                 find_package_wrapper(OpenEXR)  # our own module
901                 if(NOT OPENEXR_FOUND)
902                         set(WITH_IMAGE_OPENEXR OFF)
903                 endif()
904         endif()
905
906         if(WITH_IMAGE_OPENJPEG)
907                 find_package_wrapper(OpenJPEG)
908                 if(NOT OPENJPEG_FOUND)
909                         set(WITH_IMAGE_OPENJPEG OFF)
910                 endif()
911         endif()
912
913         if(WITH_IMAGE_TIFF)
914                 # XXX Linking errors with debian static tiff :/
915 #               find_package_wrapper(TIFF)
916                 find_package(TIFF)
917                 if(NOT TIFF_FOUND)
918                         set(WITH_IMAGE_TIFF OFF)
919                 endif()
920         endif()
921
922         # Audio IO
923         if(WITH_SYSTEM_AUDASPACE)
924                 find_package_wrapper(Audaspace)
925                 if(NOT AUDASPACE_FOUND OR NOT AUDASPACE_C_FOUND)
926                         message(FATAL_ERROR "Audaspace external library not found!")
927                 endif()
928         endif()
929
930         if(WITH_OPENAL)
931                 find_package_wrapper(OpenAL)
932                 if(NOT OPENAL_FOUND)
933                         set(WITH_OPENAL OFF)
934                 endif()
935         endif()
936
937         if(WITH_SDL)
938                 if(WITH_SDL_DYNLOAD)
939                         set(SDL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/sdlew/include/SDL2")
940                         set(SDL_LIBRARY)
941                 else()
942                         find_package_wrapper(SDL2)
943                         if(SDL2_FOUND)
944                                 # Use same names for both versions of SDL until we move to 2.x.
945                                 set(SDL_INCLUDE_DIR "${SDL2_INCLUDE_DIR}")
946                                 set(SDL_LIBRARY "${SDL2_LIBRARY}")
947                                 set(SDL_FOUND "${SDL2_FOUND}")
948                         else()
949                                 find_package_wrapper(SDL)
950                         endif()
951                         mark_as_advanced(
952                                 SDL_INCLUDE_DIR
953                                 SDL_LIBRARY
954                         )
955                         # unset(SDLMAIN_LIBRARY CACHE)
956                         if(NOT SDL_FOUND)
957                                 set(WITH_SDL OFF)
958                         endif()
959                 endif()
960         endif()
961
962         if(WITH_JACK)
963                 find_package_wrapper(Jack)
964                 if(NOT JACK_FOUND)
965                         set(WITH_JACK OFF)
966                 endif()
967         endif()
968
969         # Codecs
970         if(WITH_CODEC_SNDFILE)
971                 find_package_wrapper(SndFile)
972                 if(NOT SNDFILE_FOUND)
973                         set(WITH_CODEC_SNDFILE OFF)
974                 endif()
975         endif()
976
977         if(WITH_CODEC_FFMPEG)
978                 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
979                 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
980
981                 mark_as_advanced(FFMPEG)
982
983                 # lame, but until we have proper find module for ffmpeg
984                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
985                 if(EXISTS "${FFMPEG}/include/ffmpeg/")
986                         list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
987                 endif()
988                 # end lameness
989
990                 mark_as_advanced(FFMPEG_LIBRARIES)
991                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
992         endif()
993
994         if(WITH_FFTW3)
995                 find_package_wrapper(Fftw3)
996                 if(NOT FFTW3_FOUND)
997                         set(WITH_FFTW3 OFF)
998                 endif()
999         endif()
1000
1001         if(WITH_OPENCOLLADA)
1002                 find_package_wrapper(OpenCOLLADA)
1003                 if(OPENCOLLADA_FOUND)
1004                         find_package_wrapper(XML2)
1005                         find_package_wrapper(PCRE)
1006                 else()
1007                         set(WITH_OPENCOLLADA OFF)
1008                 endif()
1009         endif()
1010
1011         if(WITH_MEM_JEMALLOC)
1012                 find_package_wrapper(JeMalloc)
1013                 if(NOT JEMALLOC_FOUND)
1014                         set(WITH_MEM_JEMALLOC OFF)
1015                 endif()
1016         endif()
1017
1018         if(WITH_INPUT_NDOF)
1019                 find_package_wrapper(Spacenav)
1020                 if(NOT SPACENAV_FOUND)
1021                         set(WITH_INPUT_NDOF OFF)
1022                 endif()
1023
1024                 # use generic names within blenders buildsystem.
1025                 if(SPACENAV_FOUND)
1026                         set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
1027                         set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
1028                 endif()
1029         endif()
1030
1031         if(WITH_CYCLES_OSL)
1032                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1033                 if(NOT OSL_ROOT)
1034                         set(OSL_ROOT ${CYCLES_OSL})
1035                 endif()
1036                 find_package_wrapper(OpenShadingLanguage)
1037                 if(OSL_FOUND)
1038                         if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6")
1039                                 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
1040                                 # otherwise LLVM is missing the osl_allocate_closure_component function
1041                                 set(OSL_LIBRARIES ${OSL_OSLCOMP_LIBRARY} -Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY} -Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY})
1042                         endif()
1043                 else()
1044                         message(STATUS "OSL not found, disabling it from Cycles")
1045                         set(WITH_CYCLES_OSL OFF)
1046                 endif()
1047         endif()
1048
1049         if(WITH_OPENVDB)
1050                 find_package_wrapper(OpenVDB)
1051                 find_package_wrapper(TBB)
1052                 if(NOT OPENVDB_FOUND OR NOT TBB_FOUND)
1053                         set(WITH_OPENVDB OFF)
1054                         set(WITH_OPENVDB_BLOSC OFF)
1055                         message(STATUS "OpenVDB not found, disabling it")
1056                 endif()
1057         endif()
1058
1059         if(WITH_BOOST)
1060                 # uses in build instructions to override include and library variables
1061                 if(NOT BOOST_CUSTOM)
1062                         if(WITH_STATIC_LIBS)
1063                                 set(Boost_USE_STATIC_LIBS ON)
1064                         endif()
1065                         set(Boost_USE_MULTITHREADED ON)
1066                         set(__boost_packages filesystem regex system thread date_time)
1067                         if(WITH_CYCLES_OSL)
1068                                 if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
1069                                         list(APPEND __boost_packages wave)
1070                                 else()
1071                                 endif()
1072                         endif()
1073                         if(WITH_INTERNATIONAL)
1074                                 list(APPEND __boost_packages locale)
1075                         endif()
1076                         if(WITH_CYCLES_NETWORK)
1077                                 list(APPEND __boost_packages serialization)
1078                         endif()
1079                         if(WITH_OPENVDB)
1080                                 list(APPEND __boost_packages iostreams)
1081                         endif()
1082                         find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1083                         if(NOT Boost_FOUND)
1084                                 # try to find non-multithreaded if -mt not found, this flag
1085                                 # doesn't matter for us, it has nothing to do with thread
1086                                 # safety, but keep it to not disturb build setups
1087                                 set(Boost_USE_MULTITHREADED OFF)
1088                                 find_package(Boost 1.48 COMPONENTS ${__boost_packages})
1089                         endif()
1090                         unset(__boost_packages)
1091                         if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
1092                                 find_package(IcuLinux)
1093                         endif()
1094                         mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
1095                 endif()
1096
1097                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1098                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1099                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1100                 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1101         endif()
1102
1103         if(WITH_OPENIMAGEIO)
1104                 find_package_wrapper(OpenImageIO)
1105                 if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
1106                         find_package_wrapper(PugiXML)
1107                 else()
1108                         set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
1109                         set(PUGIXML_LIBRARIES "")
1110                 endif()
1111
1112                 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES} ${BOOST_LIBRARIES})
1113                 set(OPENIMAGEIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1114                 set(OPENIMAGEIO_DEFINITIONS "")
1115
1116                 if(WITH_IMAGE_TIFF)
1117                         list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
1118                 endif()
1119                 if(WITH_IMAGE_OPENEXR)
1120                         list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
1121                 endif()
1122
1123                 if(NOT OPENIMAGEIO_FOUND)
1124                         set(WITH_OPENIMAGEIO OFF)
1125                         message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
1126                 endif()
1127         endif()
1128
1129         if(WITH_OPENCOLORIO)
1130                 find_package_wrapper(OpenColorIO)
1131
1132                 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
1133                 set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1134                 set(OPENCOLORIO_DEFINITIONS)
1135
1136                 if(NOT OPENCOLORIO_FOUND)
1137                         set(WITH_OPENCOLORIO OFF)
1138                         message(STATUS "OpenColorIO not found")
1139                 endif()
1140         endif()
1141
1142         if(WITH_LLVM)
1143                 find_package_wrapper(LLVM)
1144
1145                 if(NOT LLVM_FOUND)
1146                         set(WITH_LLVM OFF)
1147                         message(STATUS "LLVM not found")
1148                 endif()
1149         endif()
1150
1151         if(WITH_LLVM OR WITH_SDL_DYNLOAD)
1152                 # Fix for conflict with Mesa llvmpipe
1153                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'")
1154         endif()
1155
1156         if(WITH_OPENSUBDIV)
1157                 find_package_wrapper(OpenSubdiv)
1158
1159                 set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
1160                 set(OPENSUBDIV_LIBPATH)  # TODO, remove and reference the absolute path everywhere
1161
1162                 if(NOT OPENSUBDIV_FOUND)
1163                         set(WITH_OPENSUBDIV OFF)
1164                         message(STATUS "OpenSubdiv not found")
1165                 endif()
1166         endif()
1167
1168         # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
1169         list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
1170
1171         find_package(Threads REQUIRED)
1172         list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
1173         # used by other platforms
1174         set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
1175
1176         if(CMAKE_DL_LIBS)
1177                 list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
1178         endif()
1179
1180         if(CMAKE_SYSTEM_NAME MATCHES "Linux")
1181                 if(NOT WITH_PYTHON_MODULE)
1182                         # binreloc is linux only
1183                         set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
1184                         set(WITH_BINRELOC ON)
1185                 endif()
1186         endif()
1187
1188         # lfs on glibc, all compilers should use
1189         add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1190
1191         # GNU Compiler
1192         if(CMAKE_COMPILER_IS_GNUCC)
1193                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1194
1195                 # use ld.gold linker if available, could make optional
1196                 execute_process(
1197                         COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
1198                         ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
1199                 if("${LD_VERSION}" MATCHES "GNU gold")
1200                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
1201                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
1202                 else()
1203                         message(STATUS "GNU gold linker isn't available, using the default system linker.")
1204                 endif()
1205                 unset(LD_VERSION)
1206
1207         # CLang is the same as GCC for now.
1208         elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
1209                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1210         # Solaris CC
1211         elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro")
1212                 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
1213                 
1214         # Intel C++ Compiler
1215         elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
1216                 # think these next two are broken
1217                 find_program(XIAR xiar)
1218                 if(XIAR)
1219                         set(CMAKE_AR "${XIAR}")
1220                 endif()
1221                 mark_as_advanced(XIAR)
1222
1223                 find_program(XILD xild)
1224                 if(XILD)
1225                         set(CMAKE_LINKER "${XILD}")
1226                 endif()
1227                 mark_as_advanced(XILD)
1228
1229                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
1230                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
1231
1232                 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
1233                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
1234                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
1235         endif()
1236
1237 elseif(WIN32)
1238
1239         add_definitions(-DWIN32)
1240
1241         if(MSVC)
1242
1243                 # needed for some MSVC installations
1244                 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
1245                 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
1246                 set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
1247
1248                 list(APPEND PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp)
1249
1250                 if(WITH_INPUT_IME)
1251                         list(APPEND PLATFORM_LINKLIBS imm32)
1252                 endif()
1253
1254                 add_definitions(
1255                         -D_CRT_NONSTDC_NO_DEPRECATE
1256                         -D_CRT_SECURE_NO_DEPRECATE
1257                         -D_SCL_SECURE_NO_DEPRECATE
1258                         -D_CONSOLE
1259                         -D_LIB
1260                 )
1261
1262                 # MSVC11 needs _ALLOW_KEYWORD_MACROS to build
1263                 add_definitions(-D_ALLOW_KEYWORD_MACROS)
1264
1265                 if(CMAKE_CL_64)
1266                         # We want to support Vista level ABI for x64
1267                         add_definitions(-D_WIN32_WINNT=0x600)
1268                 endif()
1269
1270                 # Make cmake find the msvc redistributables
1271                 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
1272                 include(InstallRequiredSystemLibraries)
1273
1274                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
1275                 set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
1276
1277                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
1278                 set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
1279                 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
1280                 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
1281                 set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
1282                 set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
1283                 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
1284                 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
1285
1286                 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
1287
1288                 # MSVC only, Mingw doesnt need
1289                 if(CMAKE_CL_64)
1290                         set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1291                 else()
1292                         set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1293                 endif()
1294
1295                 set(PLATFORM_LINKFLAGS_DEBUG "/IGNORE:4099 /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1296
1297                 if(NOT DEFINED LIBDIR)
1298
1299                         # Setup 64bit and 64bit windows systems
1300                         if(CMAKE_CL_64)
1301                                 message(STATUS "64 bit compiler detected.")
1302                                 set(LIBDIR_BASE "win64")
1303                         else()
1304                                 message(STATUS "32 bit compiler detected.")
1305                                 set(LIBDIR_BASE "windows")
1306                         endif()
1307
1308                         if(MSVC_VERSION EQUAL 1900)
1309                                 message(STATUS "Visual Studio 2015 detected.")
1310                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc14)
1311                         else()
1312                                 message(STATUS "Visual Studio 2013 detected.")
1313                                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc12)
1314                         endif()
1315                 else()
1316                         message(STATUS using LIBDIR  ${LIBDIR})
1317                 endif()
1318
1319                 # Add each of our libraries to our cmake_prefix_path so find_package() could work
1320                 file(GLOB children RELATIVE ${LIBDIR} ${LIBDIR}/*)
1321                 foreach(child ${children})
1322                 if(IS_DIRECTORY ${LIBDIR}/${child})
1323                         list(APPEND CMAKE_PREFIX_PATH  ${LIBDIR}/${child})
1324                 endif()
1325                 endforeach()
1326
1327                 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1328                 set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
1329                 set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
1330                 set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
1331                 set(ZLIB_DIR ${LIBDIR}/zlib)
1332                 #find_package(zlib) # we want to find before finding things that depend on it like png
1333
1334
1335                 find_package(png)
1336                 if(NOT PNG_FOUND)
1337                         message(WARNING "Using HARDCODED libpng locations")
1338                         set(PNG_PNG_INCLUDE_DIR ${LIBDIR}/png/include)
1339                         set(PNG_LIBRARIES libpng)
1340                         set(PNG "${LIBDIR}/png")
1341                         set(PNG_INCLUDE_DIRS "${PNG}/include")
1342                         set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1343                 endif()
1344
1345                 set(JPEG_NAMES ${JPEG_NAMES} libjpeg)
1346                 find_package(jpeg REQUIRED)
1347
1348                 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1349                 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1350
1351                 set(FREETYPE ${LIBDIR}/freetype)
1352                 set(FREETYPE_INCLUDE_DIRS
1353                         ${LIBDIR}/freetype/include
1354                         ${LIBDIR}/freetype/include/freetype2
1355                 )
1356                 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1357                 find_package(freetype REQUIRED)
1358
1359                 if(WITH_FFTW3)
1360                         set(FFTW3 ${LIBDIR}/fftw3)
1361                         set(FFTW3_LIBRARIES libfftw)
1362                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1363                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1364                 endif()
1365
1366                 if(WITH_OPENCOLLADA)
1367                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1368
1369                         set(OPENCOLLADA_INCLUDE_DIRS
1370                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1371                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1372                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1373                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1374                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1375                         )
1376
1377                         set(OPENCOLLADA_LIBRARIES
1378                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADASaxFrameworkLoader.lib
1379                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAFramework.lib
1380                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADABaseUtils.lib
1381                                 ${OPENCOLLADA}/lib/opencollada/OpenCOLLADAStreamWriter.lib
1382                                 ${OPENCOLLADA}/lib/opencollada/MathMLSolver.lib
1383                                 ${OPENCOLLADA}/lib/opencollada/GeneratedSaxParser.lib
1384                                 ${OPENCOLLADA}/lib/opencollada/xml.lib
1385                                 ${OPENCOLLADA}/lib/opencollada/buffer.lib
1386                                 ${OPENCOLLADA}/lib/opencollada/ftoa.lib
1387                         )
1388
1389                         if(NOT WITH_LLVM)
1390                                 list(APPEND OPENCOLLADA_LIBRARIES ${OPENCOLLADA}/lib/opencollada/UTF.lib)
1391                         endif()
1392
1393                         set(PCRE_LIBRARIES
1394                                 ${OPENCOLLADA}/lib/opencollada/pcre.lib
1395                         )
1396                 endif()
1397
1398                 if(WITH_CODEC_FFMPEG)
1399                         set(FFMPEG_INCLUDE_DIRS
1400                                 ${LIBDIR}/ffmpeg/include
1401                                 ${LIBDIR}/ffmpeg/include/msvc
1402                         )
1403                         find_package(FFMPEG)
1404                         if(NOT FFMPEG_FOUND)
1405                                 message(WARNING "Using HARDCODED ffmpeg locations")
1406                                 set(FFMPEG_LIBRARY_VERSION 55)
1407                                 set(FFMPEG_LIBRARY_VERSION_AVU 52)
1408                                 set(FFMPEG_LIBRARIES
1409                                         ${LIBDIR}/ffmpeg/lib/avcodec-${FFMPEG_LIBRARY_VERSION}.lib
1410                                         ${LIBDIR}/ffmpeg/lib/avformat-${FFMPEG_LIBRARY_VERSION}.lib
1411                                         ${LIBDIR}/ffmpeg/lib/avdevice-${FFMPEG_LIBRARY_VERSION}.lib
1412                                         ${LIBDIR}/ffmpeg/lib/avutil-${FFMPEG_LIBRARY_VERSION_AVU}.lib
1413                                         ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1414                                         )
1415                         endif()
1416                 endif()
1417
1418                 if(WITH_IMAGE_OPENEXR)
1419                         set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
1420                         set(OPENEXR_VERSION "2.1")
1421                         find_package(OPENEXR REQUIRED)
1422                         if(NOT OPENEXR_FOUND)
1423                                 message(WARNING "Using HARDCODED OpenEXR locations")
1424                                 set(OPENEXR ${LIBDIR}/openexr)
1425                                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1426                                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
1427                                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1428                                 set(OPENEXR_LIBRARIES
1429                                         ${OPENEXR_LIBPATH}/Iex-2_2.lib
1430                                         ${OPENEXR_LIBPATH}/Half.lib
1431                                         ${OPENEXR_LIBPATH}/IlmImf-2_2.lib
1432                                         ${OPENEXR_LIBPATH}/Imath-2_2.lib
1433                                         ${OPENEXR_LIBPATH}/IlmThread-2_2.lib
1434                                 )
1435                         endif()
1436                 endif()
1437
1438                 if(WITH_IMAGE_TIFF)
1439                 # Try to find tiff first then complain and set static and maybe wrong paths
1440                 find_package(TIFF)
1441                 if(NOT TIFF_FOUND)
1442                         message(WARNING "Using HARDCODED libtiff locations")
1443                         set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1444                         set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1445                 endif()
1446                 endif()
1447
1448                 if(WITH_JACK)
1449                         set(JACK_INCLUDE_DIRS
1450                                 ${LIBDIR}/jack/include/jack
1451                                 ${LIBDIR}/jack/include
1452                         )
1453                         set(JACK_LIBRARIES optimized ${LIBDIR}/jack/lib/libjack.lib debug ${LIBDIR}/jack/lib/libjack_d.lib)
1454                 endif()
1455
1456                 if(WITH_PYTHON)
1457                         set(PYTHON_VERSION 3.5) # CACHE STRING)
1458
1459                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1460                         # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1461                         set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1462                         unset(_PYTHON_VERSION_NO_DOTS)
1463
1464                         # Shared includes for both vc2008 and vc2010
1465                         set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1466
1467                         # uncached vars
1468                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1469                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1470                 endif()
1471
1472                 if(WITH_BOOST)
1473                         if(WITH_CYCLES_OSL)
1474                                 set(boost_extra_libs wave)
1475                         endif()
1476                         if(WITH_INTERNATIONAL)
1477                                 list(APPEND boost_extra_libs locale)
1478                         endif()
1479                         if(WITH_OPENVDB)
1480                                 list(APPEND boost_extra_libs iostreams)
1481                         endif()
1482                         set(Boost_USE_STATIC_RUNTIME ON) # prefix lib
1483                         set(Boost_USE_MULTITHREADED ON) # suffix -mt
1484                         set(Boost_USE_STATIC_LIBS ON) # suffix -s
1485                         find_package(Boost COMPONENTS date_time filesystem thread regex system ${boost_extra_libs})
1486                         if(NOT Boost_FOUND)
1487                                 message(WARNING "USING HARDCODED boost locations")
1488                                 set(BOOST ${LIBDIR}/boost)
1489                                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1490                                 if(MSVC12)
1491                                         set(BOOST_LIBPATH ${BOOST}/lib)
1492                                         set(BOOST_POSTFIX "vc120-mt-s-1_60.lib")
1493                                         set(BOOST_DEBUG_POSTFIX "vc120-mt-sgd-1_60.lib")
1494                                 else()
1495                                         set(BOOST_LIBPATH ${BOOST}/lib)
1496                                         set(BOOST_POSTFIX "vc140-mt-s-1_60.lib")
1497                                         set(BOOST_DEBUG_POSTFIX "vc140-mt-sgd-1_60.lib")
1498                                 endif()
1499                                 set(BOOST_LIBRARIES
1500                                         optimized libboost_date_time-${BOOST_POSTFIX} optimized libboost_filesystem-${BOOST_POSTFIX}
1501                                         optimized libboost_regex-${BOOST_POSTFIX}
1502                                         optimized libboost_system-${BOOST_POSTFIX} optimized libboost_thread-${BOOST_POSTFIX}
1503                                         debug libboost_date_time-${BOOST_DEBUG_POSTFIX} debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1504                                         debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1505                                         debug libboost_system-${BOOST_DEBUG_POSTFIX} debug libboost_thread-${BOOST_DEBUG_POSTFIX})
1506                                 if(WITH_CYCLES_OSL)
1507                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1508                                                 optimized libboost_wave-${BOOST_POSTFIX}
1509                                                 debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1510                                 endif()
1511                                 if(WITH_INTERNATIONAL)
1512                                         set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1513                                                 optimized libboost_locale-${BOOST_POSTFIX}
1514                                                 debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1515                                 endif()
1516                         else() # we found boost using find_package
1517                                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
1518                                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
1519                                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
1520                         endif()
1521                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1522                 endif()
1523                         
1524                 if(WITH_OPENIMAGEIO)
1525                         find_package(OpenImageIO)
1526                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1527                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1528                         set(OIIO_OPTIMIZED optimized OpenImageIO optimized OpenImageIO_Util)
1529                         set(OIIO_DEBUG debug OpenImageIO_d debug OpenImageIO_Util_d)
1530                         set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
1531                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1532                         set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1533                         set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1534                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1535                         add_definitions(-DOIIO_STATIC_BUILD)
1536                 endif()
1537
1538                 if(WITH_LLVM)
1539                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1540                         file(GLOB LLVM_LIBRARY_OPTIMIZED ${LLVM_ROOT_DIR}/lib/*.lib)
1541
1542                         if(EXISTS ${LLVM_ROOT_DIR}/debug/lib)
1543                                 foreach(LLVM_OPTIMIZED_LIB ${LLVM_LIBRARY_OPTIMIZED})
1544                                         get_filename_component(LIBNAME ${LLVM_OPTIMIZED_LIB} ABSOLUTE)
1545                                         list(APPEND LLVM_LIBS optimized ${LIBNAME})
1546                                 endforeach(LLVM_OPTIMIZED_LIB)
1547                         
1548                                 file(GLOB LLVM_LIBRARY_DEBUG ${LLVM_ROOT_DIR}/debug/lib/*.lib)
1549
1550                                 foreach(LLVM_DEBUG_LIB ${LLVM_LIBRARY_DEBUG})
1551                                         get_filename_component(LIBNAME ${LLVM_DEBUG_LIB} ABSOLUTE)
1552                                         list(APPEND LLVM_LIBS debug ${LIBNAME})
1553                                 endforeach(LLVM_DEBUG_LIB)
1554
1555                                 set(LLVM_LIBRARY ${LLVM_LIBS})
1556                         else()
1557                                 message(WARNING "LLVM debug libs not present on this system. Using release libs for debug builds.")
1558                                 set(LLVM_LIBRARY ${LLVM_LIBRARY_OPTIMIZED})
1559                         endif()
1560                         
1561                 endif()
1562         
1563                 if(WITH_OPENCOLORIO)
1564                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1565                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1566                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1567                         set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1568                         set(OPENCOLORIO_DEFINITIONS)
1569                 endif()
1570
1571                 if(WITH_OPENVDB)
1572                         set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/tbb.lib)
1573                         set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
1574                         set(OPENVDB ${LIBDIR}/openvdb)
1575                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include ${TBB_INCLUDE_DIR})
1576                         set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1577                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1578                 endif()
1579
1580                 if(WITH_MOD_CLOTH_ELTOPO)
1581                         set(LAPACK ${LIBDIR}/lapack)
1582                         # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1583                         set(LAPACK_LIBPATH ${LAPACK}/lib)
1584                         set(LAPACK_LIBRARIES
1585                                 ${LIBDIR}/lapack/lib/libf2c.lib
1586                                 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1587                                 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1588                         )
1589                 endif()
1590
1591                 if(WITH_OPENSUBDIV)
1592                         set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
1593                         set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
1594                         set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib ${OPENSUBDIV_LIBPATH}/osdGPU.lib)
1595                         find_package(OpenSubdiv)
1596                 endif()
1597
1598                 if(WITH_SDL)
1599                         set(SDL ${LIBDIR}/sdl)
1600                         set(SDL_INCLUDE_DIR ${SDL}/include)
1601                         set(SDL_LIBPATH ${SDL}/lib)
1602                         # MinGW TODO: Update MinGW to SDL2
1603                         if(NOT CMAKE_COMPILER_IS_GNUCC)
1604                                 set(SDL_LIBRARY SDL2)
1605                         else()
1606                                 set(SDL_LIBRARY SDL)
1607                         endif()
1608                 endif()
1609
1610                 # Audio IO
1611                 if(WITH_SYSTEM_AUDASPACE)
1612                         set(AUDASPACE_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1613                         set(AUDASPACE_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace.lib)
1614                         set(AUDASPACE_C_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1615                         set(AUDASPACE_C_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-c.lib)
1616                         set(AUDASPACE_PY_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
1617                         set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
1618                 endif()
1619
1620                 # used in many places so include globally, like OpenGL
1621                 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1622
1623         elseif(CMAKE_COMPILER_IS_GNUCC)
1624                 # keep GCC specific stuff here
1625                 include(CheckCSourceCompiles)
1626                 # Setup 64bit and 64bit windows systems
1627                 CHECK_C_SOURCE_COMPILES("
1628                         #ifndef __MINGW64__
1629                         #error
1630                         #endif
1631                         int main(void) { return 0; }
1632                         " 
1633                         WITH_MINGW64)
1634                 
1635                 if(WITH_MINGW64)
1636                         message(STATUS "Compiling for 64 bit with MinGW-w64.")
1637                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
1638                 else()
1639                         message(STATUS "Compiling for 32 bit with MinGW-w32.")
1640                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
1641                         
1642                         if(WITH_RAYOPTIMIZATION)
1643                                 message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
1644                         endif()
1645                 endif()
1646                 
1647                 list(APPEND PLATFORM_LINKLIBS -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp)
1648
1649                 if(WITH_INPUT_IME)
1650                         list(APPEND PLATFORM_LINKLIBS -limm32)
1651                 endif()
1652
1653                 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1654
1655                 if(WITH_MINGW64)
1656                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1657                         list(APPEND PLATFORM_LINKLIBS -lpthread)
1658                         
1659                         add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1660                 endif()
1661
1662                 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1663
1664                 add_definitions(-DFREE_WINDOWS)
1665
1666                 set(PNG "${LIBDIR}/png")
1667                 set(PNG_INCLUDE_DIRS "${PNG}/include")
1668                 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1669
1670                 if(WITH_MINGW64)
1671                         set(JPEG_LIBRARIES jpeg)
1672                 else()
1673                         set(JPEG_LIBRARIES libjpeg)
1674                 endif()
1675                 set(PNG_LIBRARIES png)
1676
1677                 set(ZLIB ${LIBDIR}/zlib)
1678                 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1679                 set(ZLIB_LIBPATH ${ZLIB}/lib)
1680                 set(ZLIB_LIBRARIES z)
1681
1682                 set(JPEG "${LIBDIR}/jpeg")
1683                 set(JPEG_INCLUDE_DIR "${JPEG}/include")
1684                 set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
1685                 
1686                 # comes with own pthread library
1687                 if(NOT WITH_MINGW64)
1688                         set(PTHREADS ${LIBDIR}/pthreads)
1689                         #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1690                         set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1691                         set(PTHREADS_LIBRARIES pthreadGC2)
1692                 endif()
1693                 
1694                 set(FREETYPE ${LIBDIR}/freetype)
1695                 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1696                 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1697                 set(FREETYPE_LIBRARY freetype)
1698
1699                 if(WITH_FFTW3)
1700                         set(FFTW3 ${LIBDIR}/fftw3)
1701                         set(FFTW3_LIBRARIES fftw3)
1702                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1703                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1704                 endif()
1705
1706                 if(WITH_OPENCOLLADA)
1707                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1708                         set(OPENCOLLADA_INCLUDE_DIRS
1709                                 ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
1710                                 ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
1711                                 ${OPENCOLLADA}/include/opencollada/COLLADAFramework
1712                                 ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
1713                                 ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
1714                         )
1715                         set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
1716                         set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver buffer ftoa xml)
1717                         set(PCRE_LIBRARIES pcre)
1718                 endif()
1719
1720                 if(WITH_CODEC_FFMPEG)
1721                         set(FFMPEG ${LIBDIR}/ffmpeg)
1722                         set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1723                         if(WITH_MINGW64)
1724                                 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1725                         else()
1726                                 set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
1727                         endif()
1728                         set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1729                 endif()
1730
1731                 if(WITH_IMAGE_OPENEXR)
1732                         set(OPENEXR ${LIBDIR}/openexr)
1733                         set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1734                         set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1735                         set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1736                         set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1737                 endif()
1738
1739                 if(WITH_IMAGE_TIFF)
1740                         set(TIFF ${LIBDIR}/tiff)
1741                         set(TIFF_LIBRARY tiff)
1742                         set(TIFF_INCLUDE_DIR ${TIFF}/include)
1743                         set(TIFF_LIBPATH ${TIFF}/lib)
1744                 endif()
1745
1746                 if(WITH_JACK)
1747                         set(JACK ${LIBDIR}/jack)
1748                         set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1749                         set(JACK_LIBRARIES jack)
1750                         set(JACK_LIBPATH ${JACK}/lib)
1751
1752                         # TODO, gives linking errors, force off
1753                         set(WITH_JACK OFF)
1754                 endif()
1755
1756                 if(WITH_PYTHON)
1757                         # normally cached but not since we include them with blender
1758                         set(PYTHON_VERSION 3.5) #  CACHE STRING)
1759                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1760                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")  # CACHE PATH)
1761                         set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib")  # CACHE FILEPATH)
1762                         unset(_PYTHON_VERSION_NO_DOTS)
1763
1764                         # uncached vars
1765                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1766                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1767                 endif()
1768
1769                 if(WITH_BOOST)
1770                         set(BOOST ${LIBDIR}/boost)
1771                         set(BOOST_INCLUDE_DIR ${BOOST}/include)
1772                         if(WITH_MINGW64)
1773                                 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1774                                 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1775                         else()
1776                                 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1777                                 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1778                         endif()
1779                         set(BOOST_LIBRARIES
1780                                 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1781                                 boost_regex-${BOOST_POSTFIX}
1782                                 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1783                                 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1784                                 boost_regex-${BOOST_DEBUG_POSTFIX}
1785                                 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1786                         if(WITH_INTERNATIONAL)
1787                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1788                                         optimized boost_locale-${BOOST_POSTFIX}
1789                                         debug boost_locale-${BOOST_DEBUG_POSTFIX}) 
1790                         endif()
1791                         if(WITH_CYCLES_OSL)
1792                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1793                                         optimized boost_wave-${BOOST_POSTFIX}
1794                                         debug boost_wave-${BOOST_DEBUG_POSTFIX}) 
1795                         endif()
1796                         set(BOOST_LIBPATH ${BOOST}/lib)
1797                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1798                 endif()
1799                         
1800                 if(WITH_OPENIMAGEIO)
1801                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1802                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1803                         set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1804                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1805                         set(OPENIMAGEIO_DEFINITIONS "")
1806                         set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
1807                 endif()
1808                 
1809                 if(WITH_LLVM)
1810                         set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
1811                         set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
1812                         # Explicitly set llvm lib order.
1813                         #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1814                         set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1815                                 LLVMAsmParser LLVMAsmPrinter
1816                                 LLVMBitReader LLVMBitWriter
1817                                 LLVMDebugInfo LLVMExecutionEngine
1818                                 LLVMInstCombine LLVMInstrumentation
1819                                 LLVMInterpreter LLVMJIT
1820                                 LLVMLinker LLVMMC
1821                                 LLVMMCDisassembler LLVMMCJIT
1822                                 LLVMMCParser LLVMObject
1823                                 LLVMRuntimeDyld 
1824                                 LLVMSupport
1825                                 LLVMTableGen LLVMTarget
1826                                 LLVMTransformUtils LLVMVectorize
1827                                 LLVMX86AsmParser LLVMX86AsmPrinter
1828                                 LLVMX86CodeGen LLVMX86Desc
1829                                 LLVMX86Disassembler LLVMX86Info
1830                                 LLVMX86Utils LLVMipa
1831                                 LLVMipo LLVMCore)
1832                         # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1833                         list(APPEND PLATFORM_LINKLIBS -limagehlp)
1834                 endif()
1835                 
1836                 if(WITH_OPENCOLORIO)
1837                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1838                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1839                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1840                         set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1841                         set(OPENCOLORIO_DEFINITIONS)
1842                 endif()
1843
1844                 if(WITH_SDL)
1845                         set(SDL ${LIBDIR}/sdl)
1846                         set(SDL_INCLUDE_DIR ${SDL}/include)
1847                         set(SDL_LIBRARY SDL)
1848                         set(SDL_LIBPATH ${SDL}/lib)
1849                 endif()
1850
1851                 if(WITH_OPENVDB)
1852                         set(OPENVDB ${LIBDIR}/openvdb)
1853                         set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
1854                         set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
1855                         set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
1856                         set(OPENVDB_DEFINITIONS)
1857                 endif()
1858
1859                 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
1860
1861                 ## DISABLE - causes linking errors 
1862                 ## for re-distribution, so users dont need mingw installed
1863                 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
1864
1865         endif()
1866         
1867         # Things common to both mingw and MSVC  should go here
1868
1869         set(WINTAB_INC ${LIBDIR}/wintab/include)
1870
1871         if(WITH_OPENAL)
1872                 set(OPENAL ${LIBDIR}/openal)
1873                 set(OPENALDIR ${LIBDIR}/openal)
1874                 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
1875                 if(MSVC12)
1876                         set(OPENAL_LIBRARY openal32)
1877                 else()
1878                         set(OPENAL_LIBRARY wrap_oal)
1879                 endif()
1880                 set(OPENAL_LIBPATH ${OPENAL}/lib)
1881         endif()
1882
1883         if(WITH_CODEC_SNDFILE)
1884                 set(SNDFILE ${LIBDIR}/sndfile)
1885                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1886                 set(SNDFILE_LIBRARIES libsndfile-1)
1887                 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
1888         endif()
1889
1890         if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
1891                 add_definitions(-D__SSE__ -D__MMX__)
1892         endif()
1893
1894         if(WITH_CYCLES_OSL)
1895                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1896         
1897                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1898                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1899                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1900                 find_library(OSL_LIB_EXEC_DEBUG NAMES oslexec_d PATHS ${CYCLES_OSL}/lib)
1901                 find_library(OSL_LIB_COMP_DEBUG NAMES oslcomp_d PATHS ${CYCLES_OSL}/lib)
1902                 find_library(OSL_LIB_QUERY_DEBUG NAMES oslquery_d PATHS ${CYCLES_OSL}/lib)
1903                 list(APPEND OSL_LIBRARIES optimized ${OSL_LIB_COMP} optimized ${OSL_LIB_EXEC} optimized ${OSL_LIB_QUERY} debug ${OSL_LIB_EXEC_DEBUG} debug ${OSL_LIB_COMP_DEBUG} debug ${OSL_LIB_QUERY_DEBUG})
1904                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1905                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1906         
1907                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
1908                         set(OSL_FOUND TRUE)
1909                 else()
1910                         message(STATUS "OSL not found")
1911                         set(WITH_CYCLES_OSL OFF)
1912                 endif()
1913         endif()
1914
1915 elseif(APPLE)
1916
1917         if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5")
1918                 set(WITH_LIBS10.5 ON CACHE BOOL "Use 10.5 libs" FORCE) # valid also for 10.6/7/8/9
1919         endif()
1920
1921         if(WITH_LIBS10.5)
1922                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
1923         else()
1924                 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1925                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.x.i386)
1926                 else()
1927                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.0.0-powerpc)
1928                 endif()
1929         endif()
1930
1931
1932         if(WITH_OPENAL)
1933                 find_package(OpenAL)
1934                 if(OPENAL_FOUND)
1935                         set(WITH_OPENAL ON)
1936                         set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
1937                 else()
1938                         set(WITH_OPENAL OFF)
1939                 endif()
1940         endif()
1941
1942         if(WITH_OPENSUBDIV)
1943                 set(OPENSUBDIV ${LIBDIR}/opensubdiv)
1944                 set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
1945                 find_library(OSL_LIB_UTIL NAMES osdutil PATHS ${OPENSUBDIV_LIBPATH})
1946                 find_library(OSL_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
1947                 find_library(OSL_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
1948                 set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
1949                 set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
1950                 list(APPEND OPENSUBDIV_LIBRARIES ${OSL_LIB_UTIL} ${OSL_LIB_CPU} ${OSL_LIB_GPU})
1951         endif()
1952
1953         if(WITH_JACK)
1954                 find_library(JACK_FRAMEWORK
1955                         NAMES jackmp
1956                 )
1957                 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
1958                 if(NOT JACK_FRAMEWORK)
1959                         set(WITH_JACK OFF)
1960                 endif()
1961         endif()
1962
1963         if(WITH_CODEC_SNDFILE)
1964                 set(SNDFILE ${LIBDIR}/sndfile)
1965                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1966                 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
1967                 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)  # TODO, deprecate
1968         endif()
1969
1970         if(WITH_PYTHON)
1971                 # we use precompiled libraries for py 3.5 and up by default
1972                 set(PYTHON_VERSION 3.5)
1973                 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
1974                         # normally cached but not since we include them with blender
1975                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
1976                         # set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
1977                         set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
1978                         set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
1979                         # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
1980                 else()
1981                         # module must be compiled against Python framework
1982                         set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m")
1983                         set(PYTHON_EXECUTABLE "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}")
1984                         #set(PYTHON_LIBRARY python${PYTHON_VERSION})
1985                         set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
1986                         #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python")  # won't  build with this enabled
1987                 endif()
1988                 
1989                 # uncached vars
1990                 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1991                 set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1992         endif()
1993
1994         if(WITH_FFTW3)
1995                 set(FFTW3 ${LIBDIR}/fftw3)
1996                 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1997                 set(FFTW3_LIBRARIES fftw3)
1998                 set(FFTW3_LIBPATH ${FFTW3}/lib)
1999         endif()
2000
2001         set(PNG_LIBRARIES png)
2002         set(JPEG_LIBRARIES jpeg)
2003
2004         set(ZLIB /usr)
2005         set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
2006         set(ZLIB_LIBRARIES z bz2)
2007
2008         set(FREETYPE ${LIBDIR}/freetype)
2009         set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
2010         set(FREETYPE_LIBPATH ${FREETYPE}/lib)
2011         set(FREETYPE_LIBRARY freetype)
2012
2013         if(WITH_IMAGE_OPENEXR)
2014                 set(OPENEXR ${LIBDIR}/openexr)
2015                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
2016                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR} ${OPENEXR}/include/OpenEXR)
2017                 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
2018                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
2019         endif()
2020
2021         if(WITH_CODEC_FFMPEG)
2022                 set(FFMPEG ${LIBDIR}/ffmpeg)
2023                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
2024                 set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
2025                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
2026         endif()
2027
2028         find_library(SYSTEMSTUBS_LIBRARY
2029                 NAMES
2030                 SystemStubs
2031                 PATHS
2032         )
2033         mark_as_advanced(SYSTEMSTUBS_LIBRARY)
2034         if(SYSTEMSTUBS_LIBRARY)
2035                 list(APPEND PLATFORM_LINKLIBS stdc++ SystemStubs)
2036         else()
2037                 list(APPEND PLATFORM_LINKLIBS stdc++)
2038         endif()
2039
2040         set(PLATFORM_CFLAGS "-pipe -funsigned-char")
2041         set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio")
2042         if(WITH_CODEC_QUICKTIME)
2043                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
2044                 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
2045                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
2046                         # libSDL still needs 32bit carbon quicktime
2047                 endif()
2048         endif()
2049
2050         # XXX - SOME MAC DEV PLEASE TEST WITH THE SDK INSTALLED!
2051         # ALSO SHOULD BE MOVED INTO OWN MODULE WHEN FUNCTIONAL
2052         if(WITH_INPUT_NDOF)
2053                 # This thread it *should* work and check the framework - campbell
2054                 # http://www.cmake.org/pipermail/cmake/2005-December/007740.html
2055                 find_library(3DCONNEXION_CLIENT_FRAMEWORK
2056                         NAMES 3DconnexionClient
2057                 )
2058                 if(NOT 3DCONNEXION_CLIENT_FRAMEWORK)
2059                         set(WITH_INPUT_NDOF OFF)
2060                 endif()
2061
2062                 if(WITH_INPUT_NDOF)
2063                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework 3DconnexionClient")
2064                         set(NDOF_INCLUDE_DIRS /Library/Frameworks/3DconnexionClient.framework/Headers )
2065                 endif()
2066         endif()
2067
2068         if(WITH_JACK)
2069                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework jackmp")
2070         endif()
2071         
2072         if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
2073                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")# force cmake to link right framework
2074         endif()
2075         
2076         if(WITH_OPENCOLLADA)
2077                 set(OPENCOLLADA ${LIBDIR}/opencollada)
2078
2079                 set(OPENCOLLADA_INCLUDE_DIRS
2080                         ${LIBDIR}/opencollada/include/COLLADAStreamWriter
2081                         ${LIBDIR}/opencollada/include/COLLADABaseUtils
2082                         ${LIBDIR}/opencollada/include/COLLADAFramework
2083                         ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
2084                         ${LIBDIR}/opencollada/include/GeneratedSaxParser
2085                 )
2086
2087                 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
2088                 set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lxml2 -lbuffer -lftoa")
2089                 # Use UTF functions from collada if LLVM is not enabled
2090                 if(NOT WITH_LLVM)
2091                         set(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES} -lUTF")
2092                 endif()
2093                 # pcre is bundled with openCollada
2094                 #set(PCRE ${LIBDIR}/pcre)
2095                 #set(PCRE_LIBPATH ${PCRE}/lib)
2096                 set(PCRE_LIBRARIES pcre)
2097                 #libxml2 is used
2098                 #set(EXPAT ${LIBDIR}/expat)
2099                 #set(EXPAT_LIBPATH ${EXPAT}/lib)
2100                 set(EXPAT_LIB)
2101         endif()
2102
2103         if(WITH_SDL)
2104                 set(SDL ${LIBDIR}/sdl)
2105                 set(SDL_INCLUDE_DIR ${SDL}/include)
2106                 set(SDL_LIBRARY SDL2)
2107                 set(SDL_LIBPATH ${SDL}/lib)
2108                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lazy_framework ForceFeedback")
2109         endif()
2110
2111         set(PNG "${LIBDIR}/png")
2112         set(PNG_INCLUDE_DIRS "${PNG}/include")
2113         set(PNG_LIBPATH ${PNG}/lib)
2114
2115         set(JPEG "${LIBDIR}/jpeg")
2116         set(JPEG_INCLUDE_DIR "${JPEG}/include")
2117         set(JPEG_LIBPATH ${JPEG}/lib)
2118
2119         if(WITH_IMAGE_TIFF)
2120                 set(TIFF ${LIBDIR}/tiff)
2121                 set(TIFF_INCLUDE_DIR ${TIFF}/include)
2122                 set(TIFF_LIBRARY tiff)
2123                 set(TIFF_LIBPATH ${TIFF}/lib)
2124         endif()
2125
2126         if(WITH_INPUT_NDOF)
2127                 # linker needs "-weak_framework 3DconnexionClient"
2128         endif()
2129
2130         if(WITH_BOOST)
2131                 set(BOOST ${LIBDIR}/boost)
2132                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
2133                 set(BOOST_LIBRARIES boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt boost_wave-mt)
2134                 if(WITH_INTERNATIONAL)
2135                         list(APPEND BOOST_LIBRARIES boost_locale-mt)
2136                 endif()
2137                 if(WITH_CYCLES_NETWORK)
2138                         list(APPEND BOOST_LIBRARIES boost_serialization-mt)
2139                 endif()
2140                 if(WITH_OPENVDB)
2141                         list(APPEND BOOST_LIBRARIES boost_iostreams-mt)
2142                 endif()
2143                 set(BOOST_LIBPATH ${BOOST}/lib)
2144                 set(BOOST_DEFINITIONS)
2145         endif()
2146         
2147         if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
2148                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale and ffmpeg needs it !
2149         endif()
2150
2151         if(WITH_OPENIMAGEIO)
2152                 set(OPENIMAGEIO ${LIBDIR}/openimageio)
2153                 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
2154                 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO}/lib/libOpenImageIO.a ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARY} ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
2155                 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib ${JPEG_LIBPATH} ${PNG_LIBPATH} ${TIFF_LIBPATH} ${OPENEXR_LIBPATH} ${ZLIB_LIBPATH})
2156                 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
2157                 set(OPENIMAGEIO_IDIFF "${LIBDIR}/openimageio/bin/idiff")
2158         endif()
2159
2160         if(WITH_OPENCOLORIO)
2161                 set(OPENCOLORIO ${LIBDIR}/opencolorio)
2162                 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
2163                 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
2164                 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
2165         endif()
2166
2167         if(WITH_OPENVDB)
2168                 set(OPENVDB ${LIBDIR}/openvdb)
2169                 set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
2170                 set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include)
2171                 set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a)
2172                 set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
2173                 set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
2174                 set(OPENVDB_DEFINITIONS)
2175         endif()
2176
2177         if(WITH_LLVM)
2178                 set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH     "Path to the LLVM installation")
2179                 set(LLVM_VERSION "3.4" CACHE STRING     "Version of LLVM to use")
2180                 if(EXISTS "${LLVM_ROOT_DIR}/bin/llvm-config")
2181                         set(LLVM_CONFIG "${LLVM_ROOT_DIR}/bin/llvm-config")
2182                 else()
2183                         set(LLVM_CONFIG llvm-config)
2184                 endif()
2185                 execute_process(COMMAND ${LLVM_CONFIG} --version
2186                                 OUTPUT_VARIABLE LLVM_VERSION
2187                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2188                 execute_process(COMMAND ${LLVM_CONFIG} --prefix
2189                                 OUTPUT_VARIABLE LLVM_ROOT_DIR
2190                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2191                 execute_process(COMMAND ${LLVM_CONFIG} --libdir
2192                                 OUTPUT_VARIABLE LLVM_LIBPATH
2193                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2194                 find_library(LLVM_LIBRARY
2195                              NAMES LLVMAnalysis # first of a whole bunch of libs to get
2196                              PATHS ${LLVM_LIBPATH})
2197
2198                 if(LLVM_LIBRARY AND LLVM_ROOT_DIR AND LLVM_LIBPATH)
2199                         if(LLVM_STATIC)
2200                                 # if static LLVM libraries were requested, use llvm-config to generate
2201                                 # the list of what libraries we need, and substitute that in the right
2202                                 # way for LLVM_LIBRARY.
2203                                 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
2204                                                 OUTPUT_VARIABLE LLVM_LIBRARY
2205                                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
2206                                 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
2207                         else()
2208                                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
2209                         endif()
2210                 else()
2211                         message(FATAL_ERROR "LLVM not found.")
2212                 endif()
2213         endif()
2214
2215         if(WITH_CYCLES_OSL)
2216                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
2217         
2218                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
2219                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
2220                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
2221                 # WARNING! depends on correct order of OSL libs linking
2222                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
2223                 find_path(OSL_INCLUDE_DIR OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
2224                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
2225         
2226                 if(OSL_INCLUDE_DIR AND OSL_LIBRARIES AND OSL_COMPILER)
2227                         set(OSL_FOUND TRUE)
2228                 else()
2229                         message(STATUS "OSL not found")
2230                         set(WITH_CYCLES_OSL OFF)
2231                 endif()
2232         endif()
2233         
2234         if(WITH_OPENMP)
2235                 execute_process(COMMAND ${CMAKE_C_COMPILER} --version OUTPUT_VARIABLE COMPILER_VENDOR)
2236                 string(SUBSTRING "${COMPILER_VENDOR}" 0 5 VENDOR_NAME) # truncate output
2237                 if(${VENDOR_NAME} MATCHES "Apple") # Apple does not support OpenMP reliable with gcc and not with clang
2238                         set(WITH_OPENMP OFF)
2239                 else() # vanilla gcc or clang_omp support OpenMP
2240                         message(STATUS "Using special OpenMP enabled compiler !") # letting find_package(OpenMP) module work for gcc
2241                         if(CMAKE_C_COMPILER_ID MATCHES "Clang") # clang-omp in darwin libs
2242                                 set(OPENMP_FOUND ON)
2243                                 set(OpenMP_C_FLAGS "-fopenmp" CACHE STRING "C compiler flags for OpenMP parallization" FORCE)
2244                                 set(OpenMP_CXX_FLAGS "-fopenmp" CACHE STRING "C++ compiler flags for OpenMP parallization" FORCE)
2245                                 include_directories(${LIBDIR}/openmp/include)
2246                                 link_directories(${LIBDIR}/openmp/lib)
2247                                 # This is a workaround for our helperbinaries ( datatoc, masgfmt, ... ),
2248                                 # They are linked also to omp lib, so we need it in builddir for runtime exexcution, TODO: remove all unneeded dependencies from these
2249                                 execute_process(COMMAND ditto -arch ${CMAKE_OSX_ARCHITECTURES} ${LIBDIR}/openmp/lib/libiomp5.dylib ${CMAKE_BINARY_DIR}/Resources/lib/libiomp5.dylib) # for intermediate binaries, in respect to lib ID
2250                         endif()
2251                 endif()
2252         endif()
2253
2254         set(EXETYPE MACOSX_BUNDLE)
2255
2256         set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
2257         set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
2258         if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
2259                 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
2260                 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic  -msse -msse2 -msse3 -mssse3")
2261                 if(NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
2262                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2263                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
2264                 endif()
2265         else()
2266                 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2267                 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
2268         endif()
2269
2270         if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
2271                 # Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
2272                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth=1024")
2273         endif()
2274         # Get rid of eventually clashes, we export some symbols explicite as local
2275         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map")
2276 endif()
2277
2278 #-----------------------------------------------------------------------------
2279 # Common.
2280
2281 if(APPLE OR WIN32)
2282         if(NOT EXISTS "${LIBDIR}/")
2283                 message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'")
2284         endif()
2285 endif()
2286
2287 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
2288         message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
2289 endif()
2290
2291 if(WITH_CYCLES)
2292         if(NOT WITH_OPENIMAGEIO)
2293                 message(FATAL_ERROR "Cycles requires WITH_OPENIMAGEIO, the library may not have been found. Configure OIIO or disable WITH_CYCLES")
2294         endif()
2295         if(NOT WITH_BOOST)
2296                 message(FATAL_ERROR "Cycles requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
2297         endif()
2298
2299         if(WITH_CYCLES_OSL)
2300                 if(NOT WITH_LLVM)
2301                         message(FATAL_ERROR "Cycles OSL requires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
2302                 endif()
2303         endif()
2304 endif()
2305
2306 if(WITH_INTERNATIONAL)
2307         if(NOT WITH_BOOST)
2308                 message(FATAL_ERROR "Internationalization requires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_INTERNATIONAL")
2309         endif()
2310 endif()
2311
2312 # See TEST_SSE_SUPPORT() for how this is defined.
2313
2314 if(WITH_RAYOPTIMIZATION)
2315         if(SUPPORT_SSE_BUILD)
2316                 set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
2317                 add_definitions(-D__SSE__ -D__MMX__)
2318         endif()
2319         if(SUPPORT_SSE2_BUILD)
2320                 set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
2321                 add_definitions(-D__SSE2__)
2322                 if(NOT SUPPORT_SSE_BUILD) # dont double up
2323                         add_definitions(-D__MMX__)
2324                 endif()
2325         endif()
2326 endif()
2327
2328
2329 # set the endian define
2330 if(MSVC)
2331         # for some reason this fails on msvc
2332         add_definitions(-D__LITTLE_ENDIAN__)
2333         
2334 # OSX-Note: as we do crosscompiling with specific set architecture,
2335 # endianess-detection and autosetting is counterproductive
2336 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
2337
2338 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
2339         add_definitions(-D__LITTLE_ENDIAN__)
2340 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)            
2341         add_definitions(-D__BIG_ENDIAN__)
2342         
2343 else()
2344         include(TestBigEndian)
2345         test_big_endian(_SYSTEM_BIG_ENDIAN)
2346         if(_SYSTEM_BIG_ENDIAN)
2347                 add_definitions(-D__BIG_ENDIAN__)
2348         else()
2349                 add_definitions(-D__LITTLE_ENDIAN__)
2350         endif()
2351         unset(_SYSTEM_BIG_ENDIAN)
2352 endif()
2353
2354
2355 if(WITH_IMAGE_OPENJPEG)
2356         if(WITH_SYSTEM_OPENJPEG)
2357                 # dealt with above
2358                 set(OPENJPEG_DEFINES "")
2359         else()
2360                 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
2361                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2362         endif()
2363         # Special handling of Windows platform where openjpeg is always static.
2364         if(WIN32)
2365                 set(OPENJPEG_DEFINES "-DOPJ_STATIC")
2366         endif()
2367 endif()
2368
2369 if(NOT WITH_SYSTEM_EIGEN3)
2370         set(EIGEN3_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/Eigen3)
2371 endif()
2372
2373 #-----------------------------------------------------------------------------
2374 # Configure OpenGL.
2375
2376 find_package(OpenGL)
2377 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
2378
2379 if(WITH_GLU)
2380         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
2381         list(APPEND GL_DEFINITIONS -DWITH_GLU)
2382 endif()
2383
2384 if(WITH_SYSTEM_GLES)
2385         find_package_wrapper(OpenGLES)
2386 endif()
2387
2388 if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
2389         list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
2390
2391 elseif(WITH_GL_PROFILE_ES20)
2392         if(WITH_SYSTEM_GLES)
2393                 if(NOT OPENGLES_LIBRARY)
2394                         message(FATAL_ERROR "Unable to find OpenGL ES libraries.  Install them or disable WITH_SYSTEM_GLES.")
2395                 endif()
2396
2397                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
2398
2399         else()
2400                 set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
2401                 mark_as_advanced(OPENGLES_LIBRARY)
2402
2403                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
2404
2405                 if(NOT OPENGLES_LIBRARY)
2406                         message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY to the file path of an OpenGL ES 2.0 library.")
2407                 endif()
2408
2409         endif()
2410
2411         if(WIN32)
2412                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2413
2414                 set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
2415                 mark_as_advanced(OPENGLES_DLL)
2416
2417                 if(NOT OPENGLES_DLL)
2418                         message(FATAL_ERROR "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file path of an OpenGL ES 2.0 runtime dynamic link library (DLL).")
2419                 endif()
2420
2421                 if(WITH_GL_ANGLE)
2422                         list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
2423
2424                         set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
2425
2426                         get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
2427                         list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
2428
2429                         mark_as_advanced(D3DCOMPILER_DLL)
2430
2431                         if(D3DCOMPILER_DLL STREQUAL "")
2432                                 message(FATAL_ERROR "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll")
2433                         endif()
2434
2435                 endif()
2436
2437         endif()
2438
2439 endif()
2440
2441 if(WITH_GL_EGL)
2442         list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
2443
2444         if(WITH_SYSTEM_GLES)
2445                 if(NOT OPENGLES_EGL_LIBRARY)
2446                         message(FATAL_ERROR "Unable to find OpenGL ES libraries.  Install them or disable WITH_SYSTEM_GLES.")
2447                 endif()
2448
2449                 list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
2450
2451         else()
2452                 set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
2453                 mark_as_advanced(OPENGLES_EGL_LIBRARY)
2454
2455                 list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
2456
2457                 if(NOT OPENGLES_EGL_LIBRARY)
2458                         message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY to the file path of an EGL library.")
2459                 endif()
2460
2461         endif()
2462
2463         if(WIN32)
2464                 # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
2465
2466                 set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
2467                 mark_as_advanced(OPENGLES_EGL_DLL)
2468
2469                 if(NOT OPENGLES_EGL_DLL)
2470                         message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL to the file path of an EGL runtime dynamic link library (DLL).")
2471                 endif()
2472
2473         endif()
2474
2475 endif()
2476
2477 if(WITH_GL_PROFILE_COMPAT)
2478         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
2479 endif()
2480
2481 if(WITH_GL_PROFILE_CORE)
2482         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
2483 endif()
2484
2485 if(WITH_GL_PROFILE_ES20)
2486         list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
2487 endif()
2488
2489 if(WITH_GL_EGL)
2490         list(APPEND GL_DEFINITIONS -DWITH_EGL)
2491 endif()
2492
2493 #-----------------------------------------------------------------------------
2494 # Configure OpenMP.
2495 if(WITH_OPENMP)
2496         find_package(OpenMP)
2497         if(OPENMP_FOUND)
2498                 if(NOT WITH_OPENMP_STATIC)
2499                         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
2500                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
2501                 else()
2502                         # Typically avoid adding flags as defines but we can't
2503                         # pass OpenMP flags to the linker for static builds, meaning
2504                         # we can't add any OpenMP related flags to CFLAGS variables
2505                         # since they're passed to the linker as well.
2506                         add_definitions("${OpenMP_C_FLAGS}")
2507
2508                         find_library_static(OpenMP_LIBRARIES gomp ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
2509                 endif()
2510         else()
2511                 set(WITH_OPENMP OFF)
2512         endif()
2513
2514         mark_as_advanced(
2515                 OpenMP_C_FLAGS
2516                 OpenMP_CXX_FLAGS
2517         )
2518 endif()
2519
2520 #-----------------------------------------------------------------------------
2521 # Configure GLEW
2522
2523 if(WITH_GLEW_MX)
2524         list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
2525 endif()
2526
2527 if(WITH_SYSTEM_GLEW)
2528         find_package(GLEW)
2529
2530         # Note: There is an assumption here that the system GLEW is not a static library.
2531
2532         if(NOT GLEW_FOUND)
2533                 message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
2534         endif()
2535
2536         if(WITH_GLEW_MX)
2537                 set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
2538         else()
2539                 set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
2540         endif()
2541 else()
2542         if(WITH_GLEW_ES)
2543                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
2544
2545                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
2546
2547                 # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
2548                 if(NOT WITH_GL_PROFILE_ES20)
2549                         # No ES functions are needed
2550                         list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2551                 elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
2552                         # ES is enabled, but the other functions are all disabled
2553                         list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
2554                 endif()
2555
2556                 if(WITH_GL_PROFILE_ES20)
2557                         if(WITH_GL_EGL)
2558                                 list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
2559                         endif()
2560
2561                         # ToDo: This is an experiment to eliminate ES 1 symbols,
2562                         # GLEW doesn't really properly provide this level of control
2563                         # (for example, without modification it eliminates too many symbols)
2564                         # so there are lots of modifications to GLEW to make this work,
2565                         # and no attempt to make it work beyond Blender at this point.
2566                         list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
2567                 endif()
2568
2569                 if(WITH_GL_EGL)
2570                         list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
2571                 endif()
2572
2573                 set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
2574
2575         else()
2576                 set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
2577
2578                 list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
2579
2580                 # This won't affect the non-experimental glew library, 
2581                 # but is used for conditional compilation elsewhere.
2582                 list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
2583
2584                 set(BLENDER_GLEW_LIBRARIES extern_glew)
2585
2586         endif()
2587
2588 endif()
2589
2590 if(NOT WITH_GLU)
2591         list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
2592 endif()
2593
2594 #-----------------------------------------------------------------------------
2595 # Configure Bullet
2596
2597 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
2598         find_package(Bullet)
2599         if(NOT BULLET_FOUND)
2600                 set(WITH_BULLET OFF)
2601         endif()
2602 else()
2603         set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
2604         # set(BULLET_LIBRARIES "")
2605 endif()
2606
2607 #-----------------------------------------------------------------------------
2608 # Configure Python.
2609
2610 if(WITH_PYTHON_MODULE)
2611         add_definitions(-DPy_ENABLE_SHARED)
2612 endif()
2613
2614 #-----------------------------------------------------------------------------
2615 # Configure GLog/GFlags
2616
2617 if(WITH_LIBMV OR WITH_GTESTS OR (WITH_CYCLES AND WITH_CYCLES_LOGGING))
2618         set(GLOG_DEFINES
2619                 -DGOOGLE_GLOG_DLL_DECL=
2620         )
2621
2622         set(GFLAGS_DEFINES
2623                 -DGFLAGS_DLL_DEFINE_FLAG=
2624                 -DGFLAGS_DLL_DECLARE_FLAG=
2625                 -DGFLAGS_DLL_DECL=
2626         )
2627 endif()
2628
2629 #-----------------------------------------------------------------------------
2630 # Configure Ceres
2631
2632 if(WITH_LIBMV)
2633         set(CERES_DEFINES)
2634
2635         if(SHARED_PTR_FOUND)
2636                 if(SHARED_PTR_TR1_MEMORY_HEADER)
2637                         list(APPEND CERES_DEFINES -DCERES_TR1_MEMORY_HEADER)
2638                 endif()
2639                 if(SHARED_PTR_TR1_NAMESPACE)
2640                         list(APPEND CERES_DEFINES -DCERES_TR1_SHARED_PTR)
2641                 endif()
2642         else()
2643                 message(FATAL_ERROR "Ceres: Unable to find shared_ptr.")
2644         endif()
2645
2646         if(HAVE_STD_UNORDERED_MAP_HEADER)
2647                 if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE)
2648                         list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP)
2649                 else()
2650                         if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2651                                 list(APPEND CERES_DEFINES -DCERES_STD_UNORDERED_MAP_IN_TR1_NAMESPACE)
2652                         else()
2653                                 list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2654                                 message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2655                         endif()
2656                 endif()
2657         else()
2658                 if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE)
2659                         list(APPEND CERES_DEFINES -DCERES_TR1_UNORDERED_MAP)
2660                 else()
2661                         list(APPEND CERES_DEFINES -DCERES_NO_UNORDERED_MAP)
2662                         message(STATUS "Ceres: Replacing unordered_map/set with map/set (warning: slower!)")
2663                 endif()
2664         endif()
2665 endif()
2666
2667 #-----------------------------------------------------------------------------
2668 # Extra compile flags
2669
2670 if(CMAKE_COMPILER_IS_GNUCC)
2671
2672         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2673         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
2674         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2675         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2676         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_VLA -Werror=vla)
2677         # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
2678         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
2679         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2680         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2681         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2682         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2683         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2684         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
2685         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
2686         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
2687         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2688         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
2689         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2690         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2691         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_TYPE_LIMITS -Wtype-limits)
2692         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_FORMAT_SIGN -Wformat-signedness)
2693
2694         # gcc 4.2 gives annoying warnings on every file with this
2695         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2696                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
2697         endif()
2698
2699         # versions before gcc4.6 give many BLI_math warnings
2700         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
2701                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
2702                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
2703         endif()
2704
2705         # versions before gcc4.8 include global name-space.
2706         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.8")
2707                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_SHADOW -Wshadow)
2708         endif()
2709
2710         # disable because it gives warnings for printf() & friends.
2711         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
2712
2713         if(NOT APPLE)
2714                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2715         endif()
2716
2717         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2718         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2719         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2720         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
2721         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
2722         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
2723         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
2724         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_TYPE_LIMITS -Wtype-limits)
2725         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2726         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2727         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2728         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2729         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_POINTER_ARITH -Wpointer-arith)
2730         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_PARAMETER -Wunused-parameter)
2731         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_WRITE_STRINGS -Wwrite-strings)
2732         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2733         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_FORMAT_SIGN -Wformat-signedness)
2734
2735         # gcc 4.2 gives annoying warnings on every file with this
2736         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
2737                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
2738         endif()
2739
2740         # causes too many warnings
2741         if(NOT APPLE)
2742                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
2743                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
2744         endif()
2745
2746         # flags to undo strict flags
2747         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
2748         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
2749
2750         if(NOT APPLE)
2751                 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
2752         endif()
2753
2754 elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
2755
2756         if(APPLE AND WITH_OPENMP) # we need the Intel omp lib linked here to not fail all tests due presence of -fopenmp !
2757                 set(CMAKE_REQUIRED_FLAGS "-L${LIBDIR}/openmp/lib -liomp5") # these are only used for the checks
2758         endif()
2759
2760         # strange, clang complains these are not supported, but then yses them.
2761         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2762         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
2763         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
2764         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2765         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2766         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2767         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
2768         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2769         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2770
2771         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2772         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2773         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
2774         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
2775         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_OVERLOADED_VIRTUAL  -Wno-overloaded-virtual)  # we get a lot of these, if its a problem a dev needs to look into it.
2776         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
2777         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
2778
2779         # gives too many unfixable warnings
2780         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
2781         # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
2782
2783         # flags to undo strict flags
2784         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2785         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
2786
2787         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_VARIABLE_DECLARATIONS -Wno-missing-variable-declarations)
2788         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INCOMPAT_PTR_DISCARD_QUAL -Wno-incompatible-pointer-types-discards-qualifiers)
2789         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_FUNCTION -Wno-unused-function)
2790         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_INT_TO_VOID_POINTER_CAST -Wno-int-to-void-pointer-cast)
2791         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_PROTOTYPES -Wno-missing-prototypes)
2792         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DUPLICATE_ENUM -Wno-duplicate-enum)
2793         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNDEF -Wno-undef)
2794         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_MISSING_NORETURN -Wno-missing-noreturn)
2795
2796         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_PRIVATE_FIELD -Wno-unused-private-field)
2797         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_CXX11_NARROWING -Wno-c++11-narrowing)
2798         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_NON_VIRTUAL_DTOR -Wno-non-virtual-dtor)
2799         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_UNUSED_MACROS -Wno-unused-macros)
2800         ADD_CHECK_CXX_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS CXX_WARN_NO_REORDER -Wno-reorder)
2801
2802 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
2803
2804         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2805         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2806         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2807
2808         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2809         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2810         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2811
2812         # disable numbered, false positives
2813         set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
2814         set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
2815 elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
2816         # most msvc warnings are C & C++
2817         set(_WARNINGS
2818                 # warning level:
2819                 "/W3"
2820                 "/w34062"  # switch statement contains 'default' but no 'case' labels
2821                 # disable:
2822                 "/wd4018"  # signed/unsigned mismatch
2823                 "/wd4146"  # unary minus operator applied to unsigned type, result still unsigned
2824                 "/wd4065"  # switch statement contains 'default' but no 'case' labels
2825                 "/wd4127"  # conditional expression is constant
2826                 "/wd4181"  # qualifier applied to reference type; ignored
2827                 "/wd4200"  # zero-sized array in struct/union
2828                 "/wd4244"  # conversion from 'type1' to 'type2', possible loss of data
2829                 "/wd4267"  # conversion from 'size_t' to 'type', possible loss of data
2830                 "/wd4305"  # truncation from 'type1' to 'type2'
2831                 "/wd4800"  # forcing value to bool 'true' or 'false'
2832                 # errors:
2833                 "/we4013"  # 'function' undefined; assuming extern returning int
2834                 "/we4431"  # missing type specifier - int assumed
2835         )
2836
2837         string(REPLACE ";" " " _WARNINGS "${_WARNINGS}")
2838         set(C_WARNINGS "${_WARNINGS}")
2839         set(CXX_WARNINGS "${_WARNINGS}")
2840         unset(_WARNINGS)
2841 endif()
2842
2843 # ensure python header is found since detection can fail, this could happen
2844 # with _any_ library but since we used a fixed python version this tends to
2845 # be most problematic.
2846 if(WITH_PYTHON)
2847         if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
2848                 message(FATAL_ERROR "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
2849                                                         "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
2850                                                         "to a valid python include path. Containing "
2851                                                         "Python.h for python version \"${PYTHON_VERSION}\"")
2852         endif()
2853
2854         if(WIN32 OR APPLE)
2855                 # pass, we have this in an archive to extract
2856         elseif(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
2857                 find_python_package(numpy)
2858         endif()
2859
2860         if(WIN32 OR APPLE)
2861                 # pass, we have this in lib/python/site-packages
2862         elseif(WITH_PYTHON_INSTALL_REQUESTS)
2863                 find_python_package(requests)
2864         endif()
2865 endif()
2866
2867 if(WITH_CPP11)
2868         if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
2869                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
2870         elseif(MSVC12)
2871                 # Nothing special is needed, C++11 features are available by default.
2872         else()
2873                 message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER_ID} is not supported for C++11 build yet")
2874         endif()
2875 endif()
2876
2877 # Visual Studio has all standards it supports available by default
2878 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
2879         # Use C99 + GNU extensions, works with GCC, Clang, ICC
2880         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
2881 endif()
2882
2883 # Include warnings first, so its possible to disable them with user defined flags
2884 # eg: -Wno-uninitialized
2885 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
2886 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
2887
2888 # defined above, platform spesific but shared names
2889 mark_as_advanced(
2890         CYCLES_OSL
2891         OSL_LIB_EXEC
2892         OSL_COMPILER
2893         OSL_LIB_COMP
2894         OSL_LIB_QUERY
2895         OSL_INCLUDE_DIR
2896 )
2897
2898 mark_as_advanced(
2899         LLVM_CONFIG
2900         LLVM_ROOT_DIR
2901         LLVM_LIBRARY
2902         LLVM_VERSION
2903 )
2904
2905 #-------------------------------------------------------------------------------
2906 # Global Defines
2907
2908 # better not set includes here but this debugging option is off by default.
2909 if(WITH_CXX_GUARDEDALLOC)
2910         include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
2911         add_definitions(-DWITH_CXX_GUARDEDALLOC)
2912 endif()
2913
2914 if(WITH_ASSERT_ABORT)
2915         add_definitions(-DWITH_ASSERT_ABORT)
2916 endif()
2917
2918 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
2919 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
2920
2921 #-----------------------------------------------------------------------------
2922 # Libraries
2923
2924 if(WITH_GTESTS)
2925         include(GTestTesting)
2926 endif()
2927
2928 if(WITH_BLENDER OR WITH_PLAYER)
2929         add_subdirectory(intern)
2930         add_subdirectory(extern)
2931
2932         # source after intern and extern to gather all
2933         # internal and external library information first, for test linking
2934         add_subdirectory(source)
2935 elseif(WITH_CYCLES_STANDALONE)
2936         add_subdirectory(intern/cycles)
2937         add_subdirectory(extern/clew)
2938         if(WITH_CUDA_DYNLOAD)
2939                 add_subdirectory(extern/cuew)
2940         endif()
2941         if(NOT WITH_SYSTEM_GLEW)
2942                 add_subdirectory(extern/glew)
2943         endif()
2944 endif()
2945
2946 #-----------------------------------------------------------------------------
2947 # Blender Application
2948 if(WITH_BLENDER)
2949         add_subdirectory(source/creator)
2950 endif()
2951
2952
2953 #-----------------------------------------------------------------------------
2954 # Blender Player
2955 if(WITH_PLAYER)
2956         add_subdirectory(source/blenderplayer)
2957 endif()
2958
2959
2960 #-----------------------------------------------------------------------------
2961 # Testing
2962 add_subdirectory(tests)
2963
2964
2965 #-----------------------------------------------------------------------------
2966 # CPack for generating packages
2967 include(build_files/cmake/packaging.cmake)
2968
2969
2970 #-----------------------------------------------------------------------------
2971 # Print Final Configuration
2972
2973 if(FIRST_RUN)
2974
2975         set(_config_msg "\nBlender Configuration\n=====================")
2976
2977         function(info_cfg_option
2978                 _setting
2979                 )
2980
2981                 set(_msg "  - ${_setting}")
2982                 string(LENGTH "${_msg}" _len)
2983                 while("32" GREATER "${_len}")
2984                         set(_msg "${_msg} ")
2985                          math(EXPR _len "${_len} + 1")
2986                 endwhile()
2987
2988                 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}" PARENT_SCOPE)
2989         endfunction()
2990
2991         function(info_cfg_text
2992                 _text
2993                 )
2994
2995                 set(_config_msg "${_config_msg}\n\n  ${_text}" PARENT_SCOPE)
2996         endfunction()
2997
2998         message(STATUS "C Compiler:   \"${CMAKE_C_COMPILER_ID}\"")
2999         message(STATUS "C++ Compiler: \"${CMAKE_CXX_COMPILER_ID}\"")
3000
3001         info_cfg_text("Build Options:")
3002         info_cfg_option(WITH_GAMEENGINE)
3003         info_cfg_option(WITH_PLAYER)
3004         info_cfg_option(WITH_BULLET)
3005         info_cfg_option(WITH_IK_SOLVER)
3006         info_cfg_option(WITH_IK_ITASC)
3007         info_cfg_option(WITH_OPENCOLLADA)
3008         info_cfg_option(WITH_FFTW3)
3009         info_cfg_option(WITH_INTERNATIONAL)
3010         info_cfg_option(WITH_INPUT_NDOF)
3011         info_cfg_option(WITH_CYCLES)
3012         info_cfg_option(WITH_FREESTYLE)
3013         info_cfg_option(WITH_OPENCOLORIO)
3014         info_cfg_option(WITH_OPENVDB)
3015
3016         info_cfg_text("Compiler Options:")
3017         info_cfg_option(WITH_BUILDINFO)
3018         info_cfg_option(WITH_OPENMP)
3019         info_cfg_option(WITH_RAYOPTIMIZATION)
3020
3021         info_cfg_text("System Options:")
3022         info_cfg_option(WITH_INSTALL_PORTABLE)
3023         info_cfg_option(WITH_X11_XF86VMODE)
3024         info_cfg_option(WITH_X11_XINPUT)
3025         info_cfg_option(WITH_MEM_JEMALLOC)
3026         info_cfg_option(WITH_MEM_VALGRIND)
3027         info_cfg_option(WITH_SYSTEM_GLEW)
3028         info_cfg_option(WITH_SYSTEM_OPENJPEG)
3029
3030         info_cfg_text("Image Formats:")
3031         info_cfg_option(WITH_OPENIMAGEIO)
3032         info_cfg_option(WITH_IMAGE_CINEON)
3033         info_cfg_option(WITH_IMAGE_DDS)
3034         info_cfg_option(WITH_IMAGE_HDR)
3035         info_cfg_option(WITH_IMAGE_OPENEXR)
3036         info_cfg_option(WITH_IMAGE_OPENJPEG)
3037         info_cfg_option(WITH_IMAGE_TIFF)
3038
3039         info_cfg_text("Audio:")
3040         info_cfg_option(WITH_OPENAL)
3041         info_cfg_option(WITH_SDL)
3042         info_cfg_option(WITH_SDL_DYNLOAD)
3043         info_cfg_option(WITH_JACK)
3044         info_cfg_option(WITH_JACK_DYNLOAD)
3045         info_cfg_option(WITH_CODEC_AVI)
3046         info_cfg_option(WITH_CODEC_FFMPEG)
3047         info_cfg_option(WITH_CODEC_SNDFILE)
3048
3049         info_cfg_text("Compression:")
3050         info_cfg_option(WITH_LZMA)
3051         info_cfg_option(WITH_LZO)
3052
3053         info_cfg_text("Python:")
3054         info_cfg_option(WITH_PYTHON_INSTALL)
3055         info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
3056         info_cfg_option(WITH_PYTHON_MODULE)
3057         info_cfg_option(WITH_PYTHON_SAFETY)
3058         if(APPLE)
3059                 info_cfg_option(WITH_PYTHON_FRAMEWORK)
3060         endif()
3061
3062         info_cfg_text("Modifiers:")
3063         info_cfg_option(WITH_MOD_BOOLEAN)
3064         info_cfg_option(WITH_MOD_REMESH)
3065         info_cfg_option(WITH_MOD_FLUID)
3066         info_cfg_option(WITH_MOD_OCEANSIM)
3067
3068         info_cfg_text("OpenGL:")
3069         info_cfg_option(WITH_GLEW_ES)
3070         info_cfg_option(WITH_GLU)
3071         info_cfg_option(WITH_GL_EGL)
3072         info_cfg_option(WITH_GL_PROFILE_COMPAT)
3073         info_cfg_option(WITH_GL_PROFILE_CORE)
3074         info_cfg_option(WITH_GL_PROFILE_ES20)
3075         if(WIN32)
3076                 info_cfg_option(WITH_GL_ANGLE)
3077         endif()
3078
3079         info_cfg_text("")
3080
3081         message("${_config_msg}")
3082 endif()
3083
3084 if(0)
3085         print_all_vars()
3086 endif()
3087