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