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