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