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