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