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