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