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