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