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