svn merge ^/trunk/blender -r55594:55635
[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 EXECUTABLE_OUTPUT_PATH)
51         set(FIRST_RUN "TRUE")
52 endif()
53
54 # this starts out unset
55 list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules")
56
57 # avoid having empty buildtype
58 set(CMAKE_BUILD_TYPE_INIT "Release")
59
60 # quiet output for Makefiles, 'make -s' helps too
61 # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
62
63 # global compile definitions since add_definitions() adds for all.
64 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG           DEBUG _DEBUG)
65 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE         NDEBUG)
66 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL      NDEBUG)
67 set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO  NDEBUG)
68
69
70 #-----------------------------------------------------------------------------
71 # Set policy
72
73 # see "cmake --help-policy CMP0003"
74 # So library linking is more sane
75 cmake_policy(SET CMP0003 NEW)
76
77 # So BUILDINFO and BLENDERPATH strings are automatically quoted
78 cmake_policy(SET CMP0005 NEW)
79
80 # So syntax problems are errors
81 cmake_policy(SET CMP0010 NEW)
82
83 # Input directories must have CMakeLists.txt
84 cmake_policy(SET CMP0014 NEW)
85
86 #-----------------------------------------------------------------------------
87 # Load some macros.
88 include(build_files/cmake/macros.cmake)
89
90
91 #-----------------------------------------------------------------------------
92 # Initialize project.
93
94 blender_project_hack_pre()
95
96 project(Blender)
97
98 blender_project_hack_post()
99
100 enable_testing()
101
102 #-----------------------------------------------------------------------------
103 # Redirect output files
104
105 set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
106 set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)
107
108 #-----------------------------------------------------------------------------
109 # Set default config options
110
111 get_blender_version()
112
113
114 # Blender internal features
115 option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
116 mark_as_advanced(WITH_BLENDER)
117
118 option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
119
120 option(WITH_PYTHON        "Enable Embedded Python API  (only disable for development)" ON)
121 option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default (recommend to leave off)" OFF)
122 mark_as_advanced(WITH_PYTHON)  # dont want people disabling this unless they really know what they are doing.
123 mark_as_advanced(WITH_PYTHON_SECURITY)  # some distributions see this as a security issue, rather than have them patch it, make a build option.
124
125 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)
126 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)
127 if(APPLE)
128         option(WITH_PYTHON_FRAMEWORK "Enable building using the Python available in the framework (OSX only)" OFF)
129 endif()
130
131 option(WITH_BUILDINFO     "Include extra build details (only disable for development & faster builds)" ON)
132 option(WITH_IK_ITASC      "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
133 option(WITH_IK_SOLVER     "Enable Legacy IK solver (only disable for development)" ON)
134 option(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio effects)" ON)
135 option(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
136 option(WITH_SYSTEM_BULLET "Use the systems bullet library (currently unsupported due to missing features in upstream!)" )
137 mark_as_advanced(WITH_SYSTEM_BULLET)
138 option(WITH_GAMEENGINE    "Enable Game Engine" ON)
139 option(WITH_PLAYER        "Build Player" OFF)
140 option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ON)
141 option(WITH_COMPOSITOR    "Enable the tile based nodal compositor" ON)
142
143 # GHOST Windowing Library Options
144 option(WITH_GHOST_DEBUG   "Enable debugging output for the GHOST library" OFF)
145 mark_as_advanced(WITH_GHOST_DEBUG)
146
147 option(WITH_GHOST_SDL    "Enable building blender against SDL for windowing rather then the native APIs" OFF)
148 mark_as_advanced(WITH_GHOST_SDL)
149
150 # Misc...
151 option(WITH_HEADLESS      "Build without graphical support (renderfarm, server mode only)" OFF)
152 mark_as_advanced(WITH_HEADLESS)
153
154 option(WITH_AUDASPACE    "Build with blenders audio library (only disable if you know what you're doing!)" ON)
155 mark_as_advanced(WITH_AUDASPACE)
156
157 option(WITH_BOOL_COMPAT "Continue defining \"TRUE\" and \"FALSE\" until these can be replaced with \"true\" and \"false\" from stdbool.h" ON)
158 mark_as_advanced(WITH_BOOL_COMPAT)
159
160
161 # (unix defaults to OpenMP On)
162 if((UNIX AND NOT APPLE) OR (MINGW))
163         set(PLATFORM_DEFAULT ON)
164 else()
165         set(PLATFORM_DEFAULT OFF)
166 endif()
167 option(WITH_OPENMP        "Enable OpenMP (has to be supported by the compiler)" ${PLATFORM_DEFAULT})
168 unset(PLATFORM_DEFAULT)
169
170
171 if(UNIX AND NOT APPLE)
172         option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)"   ON)
173         option(WITH_X11_XF86VMODE "Enable X11 video mode switching"     ON)
174         option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
175
176         # freebsd doesn't seems to support XDND
177         if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
178                 option(WITH_GHOST_XDND   "Enable drag'n'drop support on Linux using XDND protocol" ON)
179         endif()
180 else()
181         # not an option for other OS's
182         set(WITH_SYSTEM_GLEW OFF)
183 endif()
184
185
186 # (unix defaults to System OpenJPEG On)
187 if(UNIX AND NOT APPLE)
188         set(PLATFORM_DEFAULT ON)
189 else()
190         set(PLATFORM_DEFAULT OFF)
191 endif()
192 option(WITH_SYSTEM_OPENJPEG "Use the operating systems OpenJPEG library" ${PLATFORM_DEFAULT})
193 unset(PLATFORM_DEFAULT)
194
195
196 # Modifiers
197 option(WITH_MOD_FLUID           "Enable Elbeem Modifier (Fluid Simulation)" ON)
198 option(WITH_MOD_SMOKE           "Enable Smoke Modifier (Smoke Simulation)" ON)
199 option(WITH_MOD_BOOLEAN         "Enable Boolean Modifier" ON)
200 option(WITH_MOD_REMESH          "Enable Remesh Modifier" ON)
201 # option(WITH_MOD_CLOTH_ELTOPO    "Enable Experimental cloth solver" OFF)  # this is now only available in a branch
202 # mark_as_advanced(WITH_MOD_CLOTH_ELTOPO)
203 option(WITH_MOD_OCEANSIM        "Enable Ocean Modifier" OFF)
204
205 # Image format support
206 option(WITH_IMAGE_OPENEXR       "Enable OpenEXR Support (http://www.openexr.com)" ON)
207 option(WITH_IMAGE_OPENJPEG      "Enable OpenJpeg Support (http://www.openjpeg.org)" ON)
208 option(WITH_IMAGE_TIFF          "Enable LibTIFF Support" ON)
209 option(WITH_IMAGE_DDS           "Enable DDS Image Support" ON)
210 option(WITH_IMAGE_CINEON        "Enable CINEON and DPX Image Support" ON)
211 option(WITH_IMAGE_HDR           "Enable HDR Image Support" ON)
212 option(WITH_IMAGE_REDCODE       "Enable RedCode Image Support" OFF)
213 option(WITH_IMAGE_FRAMESERVER   "Enable image FrameServer Support for rendering" ON)
214
215 # Audio/Video format support
216 option(WITH_CODEC_AVI           "Enable Blenders own AVI file support (raw/jpeg)" ON)
217 option(WITH_CODEC_FFMPEG        "Enable FFMPeg Support (http://ffmpeg.org)" OFF)
218
219 option(WITH_CODEC_SNDFILE       "Enable libsndfile Support (http://www.mega-nerd.com/libsndfile)" OFF)
220 if(APPLE OR (WIN32 AND NOT UNIX))
221         option(WITH_CODEC_QUICKTIME     "Enable Quicktime Support" OFF)
222 endif()
223
224 # 3D format support
225 # disable opencollada on non-apple unix because opencollada has no package for debian
226 option(WITH_OPENCOLLADA         "Enable OpenCollada Support (http://www.opencollada.org)"       OFF)
227
228 # Sound output
229 option(WITH_SDL           "Enable SDL for sound and joystick support" ON)
230 option(WITH_OPENAL        "Enable OpenAL Support (http://www.openal.org)" ON)
231 option(WITH_JACK          "Enable Jack Support (http://www.jackaudio.org)" OFF)
232 if(UNIX AND NOT APPLE)
233         option(WITH_JACK_DYNLOAD  "Enable runtime dynamic Jack libraries loading" OFF)
234 endif()
235
236 # Compression
237 option(WITH_LZO           "Enable fast LZO compression (used for pointcache)" ON)
238 option(WITH_LZMA          "Enable best LZMA compression, (used for pointcache)" ON)
239
240 # Camera/motion tracking
241 option(WITH_LIBMV         "Enable libmv structure from motion library" ON)
242
243 # Freestyle
244 option(WITH_FREESTYLE     "Enable Freestyle (advanced edges rendering)" ON)
245
246 # Misc
247 option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
248 option(WITH_RAYOPTIMIZATION     "Enable use of SIMD (SSE) optimizations for the raytracer" ON)
249 if(UNIX AND NOT APPLE)
250         option(WITH_INSTALL_PORTABLE "Install redistributeable runtime, otherwise install into CMAKE_INSTALL_PREFIX" ON)
251         option(WITH_STATIC_LIBS "Try to link with static libraries, as much as possible, to make blender more portable across distributions" OFF)
252         if(WITH_STATIC_LIBS)
253                 option(WITH_BOOST_ICU "Boost uses ICU library (required for linking with static Boost built with libicu)." OFF)
254                 mark_as_advanced(WITH_BOOST_ICU)
255         endif()
256 endif()
257 option(WITH_PYTHON_INSTALL       "Copy system python into the blender install folder" ON)
258 option(WITH_PYTHON_INSTALL_NUMPY "Copy system numpy into the blender install folder"  ON)
259 set(PYTHON_NUMPY_PATH            "" CACHE PATH "Python to python site-packages or dist-packages containing 'numpy' module")
260 mark_as_advanced(PYTHON_NUMPY_PATH)
261
262 # Cycles
263 option(WITH_CYCLES                                      "Enable cycles Render Engine" ON)
264 option(WITH_CYCLES_TEST                         "Build cycles test application" OFF)
265 option(WITH_CYCLES_OSL                          "Build Cycles with OSL support" OFF)
266 option(WITH_CYCLES_CUDA_BINARIES        "Build cycles CUDA binaries" OFF)
267 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 CACHE STRING "CUDA architectures to build binaries for")
268 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
269 unset(PLATFORM_DEFAULT)
270
271 # LLVM
272 option(WITH_LLVM                                        "Use LLVM" OFF)
273
274 # disable for now, but plan to support on all platforms eventually
275 option(WITH_MEM_JEMALLOC   "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
276 mark_as_advanced(WITH_MEM_JEMALLOC)
277
278 # Debug
279 option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
280 mark_as_advanced(WITH_CXX_GUARDEDALLOC)
281
282 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
283 mark_as_advanced(WITH_ASSERT_ABORT)
284
285 option(WITH_BOOST                                       "Enable features depending no boost" ON)
286
287 if(CMAKE_COMPILER_IS_GNUCC)
288         option(WITH_GCC_MUDFLAP                 "Enable mudflap" OFF)
289         mark_as_advanced(WITH_GCC_MUDFLAP)
290 endif()
291
292 if(APPLE)
293         cmake_minimum_required(VERSION 2.8.8)
294         cmake_policy(VERSION 2.8.8)
295
296         if(NOT CMAKE_OSX_ARCHITECTURES)
297                 set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
298                 "Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
299                 FORCE)
300         endif()
301         
302         execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
303         if(${MAC_SYS} MATCHES 12)
304                 set(OSX_SYSTEM 10.8)
305         elseif(${MAC_SYS} MATCHES 11)
306                 set(OSX_SYSTEM 10.7)
307         elseif(${MAC_SYS} MATCHES 10)
308                 set(OSX_SYSTEM 10.6)
309         elseif(${MAC_SYS} MATCHES 9)
310                 set(OSX_SYSTEM 10.5)
311         else()
312                 set(OSX_SYSTEM unsupported)
313         endif()
314         message(STATUS "Detected system-version: " ${OSX_SYSTEM})
315
316         if(${CMAKE_GENERATOR} MATCHES "Xcode")
317         
318                 ##### cmake incompatibility with xcode  4.3 and higher #####
319                 if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
320                         message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
321                 endif()
322                 ### end cmake incompatibility with xcode 4.3 and higher ###
323                 
324                 if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
325                         # Xcode 4 defaults to the Apple LLVM Compiler.
326                         # Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
327                         set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
328                         message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
329                 endif()
330         else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
331                 execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
332                 string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
333                 unset(XCODE_VERS_BUILD_NR)
334         endif()
335         
336         message(STATUS "Detected Xcode-version: " ${XCODE_VERSION})
337
338         if(${XCODE_VERSION} VERSION_LESS 4.3)
339                 set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE)  # use guaranteed existing sdk
340         else()
341                 # note: i don't use xcode-select path on purpose, cause also /Applications/Xcode.app would be allowed
342                 # absolute pathes are more foolproof here !
343                 set(OSX_SYSROOT_PREFIX /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform)
344                 set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
345                 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
346         endif()
347         
348         if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
349                         set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5" CACHE STRING "" FORCE) # 10.5 is our min. target, if you use higher sdk, weak linking happens
350         endif()
351         
352         if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
353                 # force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
354                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
355                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
356                 add_definitions ("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
357         endif()
358
359         option(WITH_COCOA         "Use Cocoa framework instead of deprecated Carbon" ON)
360         option(USE_QTKIT          "Use QtKit instead of Carbon quicktime (needed for having partial quicktime for 64bit)" OFF)
361         option(WITH_LIBS10.5  "Use 10.5 libs (needed for 64bit builds)" OFF)
362         if(CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
363                 set(USE_QTKIT ON CACHE BOOL "ON" FORCE) # no Quicktime in 64bit
364         endif()
365 endif()
366
367
368 #-----------------------------------------------------------------------------
369 # Check for conflicting/unsupported configurations
370
371 if(NOT WITH_BLENDER AND NOT WITH_PLAYER AND NOT WITH_CYCLES_TEST)
372         message(FATAL_ERROR "At least one of WITH_BLENDER or WITH_PLAYER must be enabled, nothing to do!")
373 endif()
374
375 if(NOT WITH_GAMEENGINE AND WITH_PLAYER)
376         message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE")
377 endif()
378
379 if(NOT WITH_AUDASPACE)
380         if(WITH_OPENAL)
381                 message(FATAL_ERROR "WITH_OPENAL requires WITH_AUDASPACE")
382         endif()
383         if(WITH_JACK)
384                 message(FATAL_ERROR "WITH_JACK requires WITH_AUDASPACE")
385         endif()
386         if(WITH_GAMEENGINE)
387                 message(FATAL_ERROR "WITH_GAMEENGINE requires WITH_AUDASPACE")
388         endif()
389 endif()
390
391 if(NOT WITH_SDL AND WITH_GHOST_SDL)
392         message(FATAL_ERROR "WITH_GHOST_SDL requires WITH_SDL")
393 endif()
394
395 if(WITH_IMAGE_REDCODE AND ((NOT WITH_IMAGE_OPENJPEG) OR (NOT WITH_CODEC_FFMPEG)))
396         message(FATAL_ERROR "WITH_IMAGE_REDCODE requires WITH_IMAGE_OPENJPEG and WITH_CODEC_FFMPEG")
397 endif()
398
399 # python module, needs some different options
400 if(WITH_PYTHON_MODULE AND WITH_PLAYER)
401         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PLAYER to be OFF")
402 endif()
403
404 if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL)
405         message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF")
406 endif()
407
408
409 # may as well build python module without a UI
410 if(WITH_PYTHON_MODULE)
411         set(WITH_HEADLESS ON)
412 endif()
413
414 # enable boost for cycles, booleans, audaspace or i18n
415 # otherwise if the user disabled
416 if(NOT WITH_BOOST)
417         # Explicitly disabled. so disable all deps.
418         set(WITH_CYCLES         OFF)
419         set(WITH_MOD_BOOLEAN    OFF)
420         set(WITH_AUDASPACE      OFF)
421         set(WITH_INTERNATIONAL  OFF)
422
423         set(WITH_OPENAL         OFF)  # depends on AUDASPACE
424         set(WITH_GAMEENGINE     OFF)  # depends on AUDASPACE
425 elseif(WITH_CYCLES OR WITH_MOD_BOOLEAN OR WITH_AUDASPACE OR WITH_INTERNATIONAL)
426         # Keep enabled
427 else()
428         # Enabled but we don't need it
429         set(WITH_BOOST OFF)
430 endif()
431
432 # auto enable openimageio for cycles
433 if(WITH_CYCLES)
434         set(WITH_OPENIMAGEIO ON)
435 endif()
436
437 # auto enable openimageio linking dependencies
438 if(WITH_OPENIMAGEIO)
439         set(WITH_IMAGE_OPENEXR ON)
440         set(WITH_IMAGE_TIFF ON)
441 endif()
442
443 # auto enable llvm for cycles_osl
444 if(WITH_CYCLES_OSL)
445         set(WITH_LLVM ON CACHE BOOL "ON" FORCE)
446 endif()
447
448 # don't store paths to libs for portable distribution
449 if(WITH_INSTALL_PORTABLE)
450         set(CMAKE_SKIP_BUILD_RPATH TRUE)
451 endif()
452
453 if(WITH_GHOST_SDL OR WITH_HEADLESS)
454         set(WITH_GHOST_XDND OFF)
455         set(WITH_X11_XF86VMODE OFF)
456         set(WITH_X11_XINPUT OFF)
457 endif()
458
459 if(MINGW)
460         if(WITH_CODEC_QUICKTIME)
461                 message(FATAL_ERROR "MINGW requires WITH_CODEC_QUICKTIME to be OFF "
462                                     "because it is currently unsupported, remove this "
463                                     "line if youre a developer who wants to add support.")
464         endif()
465 endif()
466
467 TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
468
469 TEST_STDBOOL_SUPPORT()
470 if(HAVE_STDBOOL_H)
471         add_definitions(-DHAVE_STDBOOL_H)
472 endif()
473 if(WITH_BOOL_COMPAT)
474         add_definitions(-DWITH_BOOL_COMPAT)
475 endif()
476
477 #-----------------------------------------------------------------------------
478 # Check for valid directories
479 # ... svn extern paths can be missing because of svn-git.
480
481 if(WITH_INTERNATIONAL)
482         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/datafiles/locale")
483                 message(WARNING "Translation path '${CMAKE_SOURCE_DIR}/release/datafiles/locale' is missing, "
484                                                 "This is an 'svn external', which are known not to work with bridges to other version "
485                                                 "control systems, disabling 'WITH_INTERNATIONAL'.")
486                 set(WITH_INTERNATIONAL OFF)
487         endif()
488 endif()
489
490 if(WITH_PYTHON)
491         if(NOT EXISTS "${CMAKE_SOURCE_DIR}/release/scripts/addons")
492                 message(WARNING "Addons path '${CMAKE_SOURCE_DIR}/release/scripts/addons' is missing, "
493                                                 "This is an 'svn external', which are known not to work with bridges to other version "
494                                                 "control systems: * CONTINUING WITHOUT ADDONS *")
495         endif()
496 endif()
497
498 #-----------------------------------------------------------------------------
499 # Initialize un-cached vars, avoid unused warning
500
501 # linux only, not cached
502 set(WITH_BINRELOC OFF)
503
504 # MAXOSX only, set to avoid uninitialized
505 set(EXETYPE "")
506
507 # C/C++ flags
508 set(PLATFORM_CFLAGS)
509
510 # these are added to later on.
511 set(C_WARNINGS)
512 set(CXX_WARNINGS)
513
514 # for gcc -Wno-blah-blah
515 set(CC_REMOVE_STRICT_FLAGS)
516
517 # libraries to link the binary with passed to target_link_libraries()
518 # known as LLIBS to scons
519 set(PLATFORM_LINKLIBS "")
520
521 # Added to linker flags in setup_liblinks
522 # - CMAKE_EXE_LINKER_FLAGS
523 # - CMAKE_EXE_LINKER_FLAGS_DEBUG
524 set(PLATFORM_LINKFLAGS "")
525 set(PLATFORM_LINKFLAGS_DEBUG "")
526
527
528 # disabled for now, not supported
529 # option(WITH_WEBPLUGIN     "Enable Web Plugin (Unix only)" OFF)
530
531 # For alternate Python locations the commandline can be used to override detected/default cache settings, e.g:
532 # On Unix:
533 #   cmake ../blender \
534 #         -D PYTHON_VERSION=3.3 \
535 #         -D PYTHON_INCLUDE_DIR=/opt/py33/include/python3.3d \
536 #         -D PYTHON_LIBRARY=/opt/py33/lib/libpython3.3d.so
537 #
538 # On Macs:
539 #   cmake ../blender \
540 #         -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.3/include/python3.3 \
541 #         -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/config \
542 #         -G Xcode
543 #
544 # When changing any of this remember to update the notes in doc/build_systems/cmake.txt
545
546 #-----------------------------------------------------------------------------
547 #Platform specifics
548
549 if(UNIX AND NOT APPLE)
550         macro(find_package_wrapper)
551                 string(TOUPPER ${ARGV0} _NAME_UPPER)
552                 if(${WITH_STATIC_LIBS})
553                         set(_cmake_find_library_suffixes_back ${CMAKE_FIND_LIBRARY_SUFFIXES})
554                         set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
555                 endif()
556                 find_package(${ARGV})
557                 if(${WITH_STATIC_LIBS})
558                         set(CMAKE_FIND_LIBRARY_SUFFIXES ${_cmake_find_library_suffixes_back})
559                         unset(_cmake_find_library_suffixes_back)
560                 endif()
561         endmacro()
562
563         find_package_wrapper(JPEG REQUIRED)
564         find_package_wrapper(PNG REQUIRED)
565         find_package_wrapper(ZLIB REQUIRED)
566         find_package_wrapper(Freetype REQUIRED)
567
568         if(WITH_PYTHON)
569                 # No way to set py33. remove for now.
570                 # find_package(PythonLibs)
571
572                 # Use our own instead, since wothout py is such a rare case,
573                 # require this package
574                 # XXX Linking errors with debian static python :/
575 #               find_package_wrapper(PythonLibsUnix REQUIRED)
576                 find_package(PythonLibsUnix REQUIRED)
577         endif()
578
579         if(WITH_IMAGE_OPENEXR)
580                 find_package_wrapper(OpenEXR)  # our own module
581                 if(NOT OPENEXR_FOUND)
582                         set(WITH_IMAGE_OPENEXR OFF)
583                 endif()
584         endif()
585
586         if(WITH_IMAGE_OPENJPEG)
587                 find_package_wrapper(OpenJPEG)
588                 if(NOT OPENJPEG_FOUND)
589                         set(WITH_IMAGE_OPENJPEG OFF)
590                 endif()
591         endif()
592
593         if(WITH_IMAGE_TIFF)
594                 # XXX Linking errors with debian static tiff :/
595 #               find_package_wrapper(TIFF)
596                 find_package(TIFF)
597                 if(NOT TIFF_FOUND)
598                         set(WITH_IMAGE_TIFF OFF)
599                 endif()
600         endif()
601
602         # Audio IO
603         if(WITH_OPENAL)
604                 find_package_wrapper(OpenAL)
605                 if(NOT OPENAL_FOUND)
606                         set(WITH_OPENAL OFF)
607                 endif()
608         endif()
609
610         if(WITH_SDL)
611                 find_package_wrapper(SDL)
612                 mark_as_advanced(
613                         SDLMAIN_LIBRARY
614                         SDL_INCLUDE_DIR
615                         SDL_LIBRARY
616                         SDL_LIBRARY_TEMP
617                 )
618                 # unset(SDLMAIN_LIBRARY CACHE)
619                 if(NOT SDL_FOUND)
620                         set(WITH_SDL OFF)
621                 endif()
622         endif()
623
624         if(WITH_JACK)
625                 find_package_wrapper(Jack)
626                 if(NOT JACK_FOUND)
627                         set(WITH_JACK OFF)
628                 endif()
629         endif()
630
631         # Codecs
632         if(WITH_CODEC_SNDFILE)
633                 find_package_wrapper(SndFile)
634                 if(NOT SNDFILE_FOUND)
635                         set(WITH_CODEC_SNDFILE OFF)
636                 endif()
637         endif()
638
639         if(WITH_CODEC_FFMPEG)
640                 set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
641                 set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
642
643                 mark_as_advanced(FFMPEG)
644
645                 # lame, but until we have proper find module for ffmpeg
646                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
647                 if(EXISTS "${FFMPEG}/include/ffmpeg/")
648                         list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
649                 endif()
650                 # end lameness
651
652                 mark_as_advanced(FFMPEG_LIBRARIES)
653                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
654                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
655         endif()
656
657         if(WITH_FFTW3)
658                 find_package_wrapper(Fftw3)
659                 if(NOT FFTW3_FOUND)
660                         set(WITH_FFTW3 OFF)
661                 endif()
662         endif()
663
664         if(WITH_OPENCOLLADA)
665                 find_package_wrapper(OpenCOLLADA)
666                 if(OPENCOLLADA_FOUND)
667                         find_package_wrapper(XML2)
668                         find_package_wrapper(PCRE)
669                 else()
670                         set(WITH_OPENCOLLADA OFF)
671                 endif()
672         endif()
673
674         if(WITH_MEM_JEMALLOC)
675                 find_package_wrapper(JeMalloc)
676                 if(NOT JEMALLOC_FOUND)
677                         set(WITH_MEM_JEMALLOC OFF)
678                 endif()
679         endif()
680
681         if(WITH_INPUT_NDOF)
682                 find_package_wrapper(Spacenav)
683                 if(NOT SPACENAV_FOUND)
684                         set(WITH_INPUT_NDOF OFF)
685                 endif()
686
687                 # use generic names within blenders buildsystem.
688                 if(SPACENAV_FOUND)
689                         set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
690                         set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
691                 endif()
692         endif()
693
694         if(WITH_BOOST)
695                 # uses in build instructions to override include and library variables
696                 if(NOT BOOST_CUSTOM)
697                         if(${WITH_STATIC_LIBS})
698                                 set(Boost_USE_STATIC_LIBS ON)
699                         endif()
700                         set(Boost_USE_MULTITHREADED ON)
701                         set(__boost_packages filesystem regex system thread date_time)
702                         if(WITH_INTERNATIONAL)
703                                 list(APPEND __boost_packages locale)
704                         endif()
705                         find_package(Boost 1.48 COMPONENTS ${__boost_packages})
706                         unset(__boost_packages)
707                         if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
708                                 find_package(IcuLinux)
709                         endif()
710                         mark_as_advanced(Boost_DIR)  # why doesnt boost do this?
711                 endif()
712
713                 set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
714                 set(BOOST_LIBRARIES ${Boost_LIBRARIES})
715                 set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
716                 set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
717         endif()
718
719         if(WITH_OPENIMAGEIO)
720                 find_package_wrapper(OpenImageIO)
721
722                 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${ZLIB_LIBRARIES} ${BOOST_LIBRARIES})
723                 set(OPENIMAGEIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
724                 set(OPENIMAGEIO_DEFINITIONS "")
725
726                 if(WITH_IMAGE_TIFF)
727                         list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
728                 endif()
729                 if(WITH_IMAGE_OPENEXR)
730                         list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
731                 endif()
732
733                 if(NOT OPENIMAGEIO_FOUND)
734                         set(WITH_OPENIMAGEIO OFF)
735                         message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
736                 endif()
737         endif()
738
739         if(WITH_OPENCOLORIO)
740                 find_package_wrapper(OpenColorIO)
741
742                 set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
743                 set(OPENCOLORIO_LIBPATH)  # TODO, remove and reference the absolute path everywhere
744                 set(OPENCOLORIO_DEFINITIONS)
745
746                 if(NOT OPENCOLORIO_FOUND)
747                         set(WITH_OPENCOLORIO OFF)
748                         message(STATUS "OpenColorIO not found")
749                 endif()
750         endif()
751
752         # XXX Maybe most of this section should go into an llvm module?
753         if(WITH_LLVM)
754                 # Set llvm version if not specified
755                 if(NOT LLVM_VERSION)
756                         set(LLVM_VERSION "3.0")
757                 endif()
758                 set(LLVM_STATIC YES)
759                 if(LLVM_DIRECTORY)
760                         FIND_PROGRAM(LLVM_CONFIG llvm-config-${LLVM_VERSION} HINTS ${LLVM_DIRECTORY}/bin NO_CMAKE_PATH)
761                         if(NOT LLVM_CONFIG)
762                                 FIND_PROGRAM(LLVM_CONFIG llvm-config HINTS ${LLVM_DIRECTORY}/bin NO_CMAKE_PATH)
763                         endif()
764                 else()
765                         FIND_PROGRAM(LLVM_CONFIG llvm-config-${LLVM_VERSION})
766                         if(NOT LLVM_CONFIG)
767                                 FIND_PROGRAM(LLVM_CONFIG llvm-config)
768                         endif()
769                 endif()
770                 execute_process(COMMAND ${LLVM_CONFIG} --version
771                                 OUTPUT_VARIABLE LLVM_VERSION
772                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
773                 execute_process(COMMAND ${LLVM_CONFIG} --prefix
774                                 OUTPUT_VARIABLE LLVM_DIRECTORY
775                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
776                 execute_process(COMMAND ${LLVM_CONFIG} --libdir
777                                 OUTPUT_VARIABLE LLVM_LIB_DIR
778                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
779                 find_library(LLVM_LIBRARY
780                              NAMES LLVMAnalysis # first of a whole bunch of libs to get
781                              PATHS ${LLVM_LIB_DIR})
782                 message(STATUS "LLVM version  = ${LLVM_VERSION}")
783                 message(STATUS "LLVM dir      = ${LLVM_DIRECTORY}")
784                 message(STATUS "LLVM lib dir  = ${LLVM_LIB_DIR}")
785                 set(LLVM_VERSION ${LLVM_VERSION} CACHE STRING "Version of LLVM to use")
786                 set(LLVM_DIRECTORY ${LLVM_DIRECTORY} CACHE PATH "Path to the LLVM installation")
787
788                 if(LLVM_LIBRARY AND LLVM_DIRECTORY AND LLVM_LIB_DIR)
789                         if(LLVM_STATIC)
790                                 # if static LLVM libraries were requested, use llvm-config to generate
791                                 # the list of what libraries we need, and substitute that in the right
792                                 # way for LLVM_LIBRARY.
793                                 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
794                                                 OUTPUT_VARIABLE LLVM_LIBRARY
795                                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
796                                 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
797                         endif()
798                 else()
799                         message(FATAL_ERROR "LLVM not found.")
800                 endif()
801
802                 # Fix for conflict with Mesa llvmpipe
803                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/source/creator/blender.map")
804         endif()
805
806         if(WITH_CYCLES_OSL)
807                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
808         
809                 message(STATUS "CYCLES_OSL = ${CYCLES_OSL}")
810         
811                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
812                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
813                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
814                 # Note: --whole-archive is needed to force loading of all symbols in liboslexec,
815                 # otherwise LLVM is missing the osl_allocate_closure_component function
816                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -Wl,--whole-archive ${OSL_LIB_EXEC} -Wl,--no-whole-archive ${OSL_LIB_QUERY})
817                 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
818                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
819         
820                 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
821                         set(OSL_FOUND TRUE)
822                         message(STATUS "OSL includes = ${OSL_INCLUDES}")
823                         message(STATUS "OSL library = ${OSL_LIBRARIES}")
824                         message(STATUS "OSL compiler = ${OSL_COMPILER}")
825                 else()
826                         message(STATUS "OSL not found")
827                 endif()
828         endif()
829
830         # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
831         set(PLATFORM_LINKLIBS "-lutil -lc -lm -lpthread -lstdc++")
832
833         if((NOT WITH_HEADLESS) AND (NOT WITH_GHOST_SDL))
834                 find_package(X11 REQUIRED)
835                 find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
836                 mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
837
838                 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_X11_LIB}")
839
840                 if(WITH_X11_XINPUT)
841                         if(X11_Xinput_LIB)
842                                 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_Xinput_LIB}")
843                         else()
844                                 set(WITH_X11_XINPUT OFF)
845                         endif()
846                 endif()
847
848                 if(WITH_X11_XF86VMODE)
849                         # XXX, why dont cmake make this available?
850                         FIND_LIBRARY(X11_Xxf86vmode_LIB Xxf86vm   ${X11_LIB_SEARCH_PATH})
851                         mark_as_advanced(X11_Xxf86vmode_LIB)
852                         if(X11_Xxf86vmode_LIB)
853                                 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} ${X11_Xxf86vmode_LIB}")
854                         else()
855                                 set(WITH_X11_XF86VMODE OFF)
856                         endif()
857                 endif()
858         endif()
859
860         if(CMAKE_SYSTEM_NAME MATCHES "Linux")
861                 if(NOT WITH_PYTHON_MODULE)
862                         # BSD's dont use libdl.so
863                 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -ldl")
864                         # binreloc is linux only
865                         set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
866                         set(WITH_BINRELOC ON)
867                 endif()
868         endif()
869
870         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -pthread")
871
872         # lfs on glibc, all compilers should use
873         add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
874
875         # GNU Compiler
876         if(CMAKE_COMPILER_IS_GNUCC)
877                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
878         # CLang is the same as GCC for now.
879         elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
880                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
881         # Solaris CC
882         elseif(CMAKE_CXX_COMPILER_ID MATCHES "SunPro")
883                 set(PLATFORM_CFLAGS "-pipe -features=extensions -fPIC -D__FUNCTION__=__func__")
884                 
885         # Intel C++ Compiler
886         elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
887                 # think these next two are broken
888                 find_program(XIAR xiar)
889                 if(XIAR)
890                         set(CMAKE_AR "${XIAR}")
891                 endif()
892                 mark_as_advanced(XIAR)
893
894                 find_program(XILD xild)
895                 if(XILD)
896                         set(CMAKE_LINKER "${XILD}")
897                 endif()
898                 mark_as_advanced(XILD)
899
900                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
901                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
902
903                 # set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
904                 set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
905                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
906         endif()
907
908 elseif(WIN32)
909
910         # this file is included anyway when building under Windows with cl.exe
911         #  include(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake)
912
913         if(CMAKE_COMPILER_IS_GNUCC)
914                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)
915                 include(CheckCSourceCompiles)
916                 # Setup 64bit and 64bit windows systems
917                 CHECK_C_SOURCE_COMPILES("
918                         #ifndef __MINGW64__
919                         #error
920                         #endif
921                         main(){}
922                         " 
923                         WITH_MINGW64)
924                 
925                 if(WITH_MINGW64)
926                         message("Compiling for 64 bit with MinGW-w64.")
927                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
928                 endif()
929         else()
930                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/windows)
931
932                 # Setup 64bit and 64bit windows systems
933                 if(CMAKE_CL_64)
934                         message("64 bit compiler detected.")
935                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/win64)
936                 endif()
937         endif()
938                 
939         add_definitions(-DWIN32)
940
941         set(JPEG "${LIBDIR}/jpeg")
942         set(JPEG_INCLUDE_DIR "${JPEG}/include")
943         set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined
944
945         set(WINTAB_INC ${LIBDIR}/wintab/include)
946
947         if(WITH_OPENAL)
948                 set(OPENAL ${LIBDIR}/openal)
949                 set(OPENAL_INCLUDE_DIR ${OPENAL}/include)
950                 set(OPENAL_LIBRARY wrap_oal)
951                 set(OPENAL_LIBPATH ${OPENAL}/lib)
952         endif()
953
954         if(WITH_CODEC_SNDFILE)
955                 set(SNDFILE ${LIBDIR}/sndfile)
956                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
957                 set(SNDFILE_LIBRARIES libsndfile-1)
958                 set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate
959         endif()
960
961         if(WITH_SDL)
962                 set(SDL ${LIBDIR}/sdl)
963                 set(SDL_INCLUDE_DIR ${SDL}/include)
964                 set(SDL_LIBRARY SDL)
965                 set(SDL_LIBPATH ${SDL}/lib)
966         endif()
967
968         if(WITH_CODEC_QUICKTIME)
969                 set(QUICKTIME ${LIBDIR}/QTDevWin)
970                 set(QUICKTIME_INCLUDE_DIRS ${QUICKTIME}/CIncludes)
971                 set(QUICKTIME_LIBRARIES qtmlClient)
972                 set(QUICKTIME_LIBPATH ${QUICKTIME}/Libraries)
973         endif()
974
975         if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
976                 add_definitions(-D__SSE__ -D__MMX__)
977         endif()
978
979         if(WITH_CYCLES_OSL)
980                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
981         
982                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
983                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
984                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
985                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
986                 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
987                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
988         
989                 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
990                         set(OSL_FOUND TRUE)
991                 else()
992                         message(STATUS "OSL not found")
993                 endif()
994         endif()
995
996         if(MSVC)
997                 set(PLATFORM_LINKLIBS ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 advapi32 shfolder shell32 ole32 oleaut32 uuid psapi)
998
999                 add_definitions(/D_CRT_NONSTDC_NO_DEPRECATE /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_CONSOLE /D_LIB)
1000
1001                 set(CMAKE_CXX_FLAGS "/nologo /J /Gd /EHsc" CACHE STRING "MSVC MT C++ flags " FORCE)
1002                 set(CMAKE_C_FLAGS   "/nologo /J /Gd"       CACHE STRING "MSVC MT C++ flags " FORCE)
1003
1004                 if(CMAKE_CL_64)
1005                         set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi" CACHE STRING "MSVC MT flags " FORCE)
1006                 else()
1007                         set(CMAKE_CXX_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI" CACHE STRING "MSVC MT flags " FORCE)
1008                 endif()
1009                 set(CMAKE_CXX_FLAGS_RELEASE "/O2 /Ob2 /MT" CACHE STRING "MSVC MT flags " FORCE)
1010                 set(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Ob1 /MT" CACHE STRING "MSVC MT flags " FORCE)
1011                 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi" CACHE STRING "MSVC MT flags " FORCE)
1012                 if(CMAKE_CL_64)
1013                         set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /Zi" CACHE STRING "MSVC MT flags " FORCE)
1014                 else()
1015                         set(CMAKE_C_FLAGS_DEBUG "/Od /Gm /RTC1 /MTd /ZI" CACHE STRING "MSVC MT flags " FORCE)
1016                 endif()
1017                 set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT" CACHE STRING "MSVC MT flags " FORCE)
1018                 set(CMAKE_C_FLAGS_MINSIZEREL "/O1 /Ob1 /MT" CACHE STRING "MSVC MT flags " FORCE)
1019                 set(CMAKE_C_FLAGS_RELWITHDEBINFO "/O2 /Ob1 /MT /Zi" CACHE STRING "MSVC MT flags " FORCE)
1020
1021                 # most msvc warnings are C & C++
1022                 set(_WARNINGS "/W3 /wd4018 /wd4244 /wd4305 /wd4800 /wd4181 /wd4065 /wd4267 /we4013 /wd4200")
1023                 set(C_WARNINGS "${_WARNINGS}")
1024                 set(CXX_WARNINGS "${_WARNINGS}")
1025                 unset(_WARNINGS)
1026
1027                 if(WITH_MOD_CLOTH_ELTOPO)
1028                         set(LAPACK ${LIBDIR}/lapack)
1029                         # set(LAPACK_INCLUDE_DIR ${LAPACK}/include)
1030                         set(LAPACK_LIBPATH ${LAPACK}/lib)
1031                         set(LAPACK_LIBRARIES
1032                                 ${LIBDIR}/lapack/lib/libf2c.lib
1033                                 ${LIBDIR}/lapack/lib/clapack_nowrap.lib
1034                                 ${LIBDIR}/lapack/lib/BLAS_nowrap.lib
1035                         )
1036                 endif()
1037
1038                 set(PNG_LIBRARIES libpng)
1039                 set(JPEG_LIBRARIES libjpeg)
1040                 
1041                 set(PNG "${LIBDIR}/png")
1042                 set(PNG_INCLUDE_DIR "${PNG}/include")
1043                 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1044
1045                 set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
1046                 if(CMAKE_CL_64)
1047                         set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz.lib)
1048                 else()
1049                         set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/zlib.lib)
1050                 endif()
1051
1052                 set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
1053                 set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC2.lib)
1054
1055                 set(FREETYPE ${LIBDIR}/freetype)
1056                 set(FREETYPE_INCLUDE_DIRS
1057                         ${LIBDIR}/freetype/include
1058                         ${LIBDIR}/freetype/include/freetype2
1059                 )
1060                 set(FREETYPE_LIBRARY ${LIBDIR}/freetype/lib/freetype2ST.lib)
1061
1062                 if(WITH_FFTW3)
1063                         set(FFTW3 ${LIBDIR}/fftw3)
1064                         set(FFTW3_LIBRARIES libfftw)
1065                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1066                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1067                 endif()
1068
1069                 if(WITH_OPENCOLLADA)
1070                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1071
1072                         set(OPENCOLLADA_INCLUDE_DIRS
1073                                 ${LIBDIR}/opencollada/include/COLLADAStreamWriter/include
1074                                 ${LIBDIR}/opencollada/include/COLLADABaseUtils/include
1075                                 ${LIBDIR}/opencollada/include/COLLADAFramework/include
1076                                 ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader/include
1077                                 ${LIBDIR}/opencollada/include/GeneratedSaxParser/include
1078                         )
1079                         set_lib_path(OPENCOLLADA_LIBPATH "opencollada")
1080
1081                         set(OPENCOLLADA_LIBRARIES
1082                                 ${OPENCOLLADA_LIBPATH}/lib/OpenCOLLADASaxFrameworkLoader.lib
1083                                 ${OPENCOLLADA_LIBPATH}/lib/OpenCOLLADAFramework.lib
1084                                 ${OPENCOLLADA_LIBPATH}/lib/OpenCOLLADABaseUtils.lib
1085                                 ${OPENCOLLADA_LIBPATH}/lib/OpenCOLLADAStreamWriter.lib
1086                                 ${OPENCOLLADA_LIBPATH}/lib/MathMLSolver.lib
1087                                 ${OPENCOLLADA_LIBPATH}/lib/GeneratedSaxParser.lib
1088                                 ${OPENCOLLADA_LIBPATH}/lib/xml2.lib
1089                                 ${OPENCOLLADA_LIBPATH}/lib/buffer.lib
1090                                 ${OPENCOLLADA_LIBPATH}/lib/ftoa.lib
1091                                 ${OPENCOLLADA_LIBPATH}/lib/UTF.lib
1092                         )
1093                         set(PCRE_LIBRARIES
1094                                 ${OPENCOLLADA_LIBPATH}/lib/pcre.lib
1095                         )
1096                         
1097                         unset(OPENCOLLADA_LIBPATH)
1098                         
1099                 endif()
1100
1101                 if(WITH_CODEC_FFMPEG)
1102                         set(FFMPEG_INCLUDE_DIRS
1103                                 ${LIBDIR}/ffmpeg/include
1104                                 ${LIBDIR}/ffmpeg/include/msvc
1105                         )
1106                         set(FFMPEG_LIBRARIES
1107                                 ${LIBDIR}/ffmpeg/lib/avcodec-53.lib
1108                                 ${LIBDIR}/ffmpeg/lib/avformat-53.lib
1109                                 ${LIBDIR}/ffmpeg/lib/avdevice-53.lib
1110                                 ${LIBDIR}/ffmpeg/lib/avutil-51.lib
1111                                 ${LIBDIR}/ffmpeg/lib/swscale-2.lib
1112                         )
1113                 endif()
1114
1115                 if(WITH_IMAGE_OPENEXR)
1116                         set_lib_path(OPENEXR "openexr")
1117                         set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1118                         set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1119                         set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1120                         set(OPENEXR_LIBRARIES
1121                                 ${OPENEXR_LIBPATH}/Iex.lib
1122                                 ${OPENEXR_LIBPATH}/Half.lib
1123                                 ${OPENEXR_LIBPATH}/IlmImf.lib
1124                                 ${OPENEXR_LIBPATH}/Imath.lib
1125                                 ${OPENEXR_LIBPATH}/IlmThread.lib
1126                         )
1127                 endif()
1128
1129                 if(WITH_IMAGE_TIFF)
1130                         set(TIFF_LIBRARY ${LIBDIR}/tiff/lib/libtiff.lib)
1131                         set(TIFF_INCLUDE_DIR ${LIBDIR}/tiff/include)
1132                 endif()
1133
1134                 if(WITH_JACK)
1135                         set(JACK_INCLUDE_DIRS
1136                                 ${LIBDIR}/jack/include/jack
1137                                 ${LIBDIR}/jack/include
1138                         )
1139                         set(JACK_LIBRARIES ${LIBDIR}/jack/lib/libjack.lib)
1140                 endif()
1141
1142                 if(WITH_PYTHON)
1143                         # normally cached but not since we include them with blender
1144                         if(MSVC10)
1145                                 set(PYTHON_VERSION 3.3) # CACHE STRING)
1146                         else()
1147                                 set(PYTHON_VERSION 3.3) # CACHE STRING)
1148                         endif()
1149
1150                         set_lib_path(PYTHON "python")
1151                         string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
1152                         # Use shared libs for vc2008 and vc2010 until we actually have vc2010 libs
1153                         set(PYTHON_LIBRARY ${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}.lib)
1154                         # set(PYTHON_LIBRARY ${PYTHON}/lib/python${_PYTHON_VERSION_NO_DOTS}.lib) #CACHE FILEPATH
1155                         unset(_PYTHON_VERSION_NO_DOTS)
1156
1157                         #Shared includes for both vc2008 and vc2010
1158                         set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/include/python${PYTHON_VERSION})
1159
1160                         # uncached vars
1161                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1162                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1163                 endif()
1164
1165                 if(WITH_BOOST)
1166                         set(BOOST ${LIBDIR}/boost)
1167                         set(BOOST_INCLUDE_DIR ${BOOST}/include)
1168                         if(MSVC10)
1169                                 set(BOOST_LIBPATH ${BOOST}/vc2010/lib)
1170                                 set(BOOST_POSTFIX "vc100-mt-s-1_49.lib")
1171                                 set(BOOST_DEBUG_POSTFIX "vc100-mt-sgd-1_49.lib")
1172                         else()
1173                                 set(BOOST_LIBPATH ${BOOST}/lib)
1174                                 set(BOOST_POSTFIX "vc90-mt-s-1_49.lib")
1175                                 set(BOOST_DEBUG_POSTFIX "vc90-mt-sgd-1_49.lib")
1176                         endif()
1177                         set(BOOST_LIBRARIES
1178                                 optimized libboost_date_time-${BOOST_POSTFIX} optimized libboost_filesystem-${BOOST_POSTFIX}
1179                                 optimized libboost_regex-${BOOST_POSTFIX}
1180                                 optimized libboost_system-${BOOST_POSTFIX} optimized libboost_thread-${BOOST_POSTFIX}
1181                                 debug libboost_date_time-${BOOST_DEBUG_POSTFIX} debug libboost_filesystem-${BOOST_DEBUG_POSTFIX}
1182                                 debug libboost_regex-${BOOST_DEBUG_POSTFIX}
1183                                 debug libboost_system-${BOOST_DEBUG_POSTFIX} debug libboost_thread-${BOOST_DEBUG_POSTFIX})
1184                         if(WITH_CYCLES_OSL)
1185                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1186                                         optimized libboost_wave-${BOOST_POSTFIX}
1187                                         debug libboost_wave-${BOOST_DEBUG_POSTFIX})
1188                         endif()
1189                         if(WITH_INTERNATIONAL)
1190                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1191                                         optimized libboost_locale-${BOOST_POSTFIX}
1192                                         debug libboost_locale-${BOOST_DEBUG_POSTFIX})
1193                         endif()
1194                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
1195                 endif()
1196                         
1197                 if(WITH_OPENIMAGEIO)
1198                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1199                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1200                         set(OPENIMAGEIO_LIBRARIES optimized OpenImageIO debug OpenImageIO_d)
1201                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1202                         set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
1203                 endif()
1204
1205                 if(WITH_LLVM)
1206                         set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH    "Path to the LLVM installation")
1207                         file(GLOB LLVM_LIBRARY ${LLVM_DIRECTORY}/lib/*.lib)
1208                         set(LLVM_STATIC YES)
1209                 endif()
1210         
1211                 if(WITH_OPENCOLORIO)
1212                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1213                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1214                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1215                         set(OPENCOLORIO_LIBPATH ${LIBDIR}/opencolorio/lib)
1216                         set(OPENCOLORIO_DEFINITIONS)
1217                 endif()
1218
1219
1220                 set(PLATFORM_LINKFLAGS "/SUBSYSTEM:CONSOLE /STACK:2097152 /INCREMENTAL:NO /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcmrt.lib /NODEFAULTLIB:msvcurt.lib /NODEFAULTLIB:msvcrtd.lib")
1221
1222                 # MSVC only, Mingw doesnt need
1223                 if(CMAKE_CL_64)
1224                         set(PLATFORM_LINKFLAGS "/MACHINE:X64 /OPT:NOREF ${PLATFORM_LINKFLAGS}")
1225                 else()
1226                         set(PLATFORM_LINKFLAGS "/MACHINE:IX86 /LARGEADDRESSAWARE ${PLATFORM_LINKFLAGS}")
1227                 endif()
1228
1229                 set(PLATFORM_LINKFLAGS_DEBUG "/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libc.lib")
1230
1231                 # used in many places so include globally, like OpenGL
1232                 blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
1233
1234         elseif(CMAKE_COMPILER_IS_GNUCC)
1235         # keep GCC specific stuff here
1236                 set(PLATFORM_LINKLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi")
1237                 set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")
1238
1239                 if(WITH_MINGW64)
1240                         #We need to take care though not to have these on debug builds because they may play funky with gdb
1241                         if(CMAKE_BUILD_TYPE MATCHES "Release")
1242                                 set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -mmmx -ftree-vectorize")
1243                         endif()
1244                         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
1245                         set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -lpthread")
1246                         
1247                         add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
1248                         #Turn off OpenMP since it causes crashes on render for subsurfed/multiresolution meshes
1249                         set(WITH_OPENMP OFF)
1250                 endif()
1251
1252                 add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
1253
1254                 add_definitions(-DFREE_WINDOWS)
1255
1256                 set(PNG "${LIBDIR}/png")
1257                 set(PNG_INCLUDE_DIR "${PNG}/include")
1258                 set(PNG_LIBPATH ${PNG}/lib) # not cmake defined
1259
1260                 if(WITH_MINGW64)
1261                         set(JPEG_LIBRARIES jpeg)
1262                 else()
1263                         set(JPEG_LIBRARIES libjpeg)
1264                 endif()
1265                 set(PNG_LIBRARIES png)
1266
1267                 set(ZLIB ${LIBDIR}/zlib)
1268                 set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
1269                 set(ZLIB_LIBPATH ${ZLIB}/lib)
1270                 set(ZLIB_LIBRARIES z)
1271
1272                 #comes with own pthread library
1273                 if(NOT WITH_MINGW64)
1274                         set(PTHREADS ${LIBDIR}/pthreads)
1275                         #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
1276                         set(PTHREADS_LIBPATH ${PTHREADS}/lib)
1277                         set(PTHREADS_LIBRARIES pthreadGC2)
1278                 endif()
1279                 
1280                 set(FREETYPE ${LIBDIR}/freetype)
1281                 set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1282                 set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1283                 set(FREETYPE_LIBRARY freetype)
1284
1285                 if(WITH_FFTW3)
1286                         set(FFTW3 ${LIBDIR}/fftw3)
1287                         set(FFTW3_LIBRARIES fftw3)
1288                         set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1289                         set(FFTW3_LIBPATH ${FFTW3}/lib)
1290                 endif()
1291
1292                 if(WITH_OPENCOLLADA)
1293                         set(OPENCOLLADA ${LIBDIR}/opencollada)
1294                         set(OPENCOLLADA_INCLUDE_DIRS
1295                                 ${LIBDIR}/opencollada/include/COLLADAStreamWriter/include
1296                                 ${LIBDIR}/opencollada/include/COLLADABaseUtils/include
1297                                 ${LIBDIR}/opencollada/include/COLLADAFramework/include
1298                                 ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader/include
1299                                 ${LIBDIR}/opencollada/include/GeneratedSaxParser/include
1300                         )
1301                         set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib ${OPENCOLLADA}/lib)
1302                         if(WITH_MINGW64)
1303                                 set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre buffer ftoa xml)
1304                         else()
1305                                 set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa)
1306                         endif()
1307                         set(PCRE_LIBRARIES pcre)
1308                 endif()
1309
1310                 if(WITH_CODEC_FFMPEG)
1311                         set(FFMPEG ${LIBDIR}/ffmpeg)
1312                         set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1313                         if(WITH_MINGW64)
1314                                 set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
1315                         else()
1316                                 set(FFMPEG_LIBRARIES avcodec-53 avformat-53 avdevice-53 avutil-51 swscale-2)
1317                         endif()
1318                         set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1319                 endif()
1320
1321                 if(WITH_IMAGE_OPENEXR)
1322                         set(OPENEXR ${LIBDIR}/openexr)
1323                         set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1324                         set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1325                         set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
1326                         set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1327                 endif()
1328
1329                 if(WITH_IMAGE_TIFF)
1330                         set(TIFF ${LIBDIR}/tiff)
1331                         set(TIFF_LIBRARY tiff)
1332                         set(TIFF_INCLUDE_DIR ${TIFF}/include)
1333                         set(TIFF_LIBPATH ${TIFF}/lib)
1334                 endif()
1335
1336                 if(WITH_JACK)
1337                         set(JACK ${LIBDIR}/jack)
1338                         set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
1339                         set(JACK_LIBRARIES jack)
1340                         set(JACK_LIBPATH ${JACK}/lib)
1341
1342                         # TODO, gives linking errors, force off
1343                         set(WITH_JACK OFF)
1344                 endif()
1345
1346                 if(WITH_PYTHON)
1347                         # normally cached but not since we include them with blender
1348                         set(PYTHON_VERSION 3.3) #  CACHE STRING)
1349                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")  # CACHE PATH)
1350                         set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python33mw.lib")  # CACHE FILEPATH)
1351
1352                         # uncached vars
1353                         set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1354                         set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1355                 endif()
1356
1357                 if(WITH_BOOST)
1358                         set(BOOST ${LIBDIR}/boost)
1359                         set(BOOST_INCLUDE_DIR ${BOOST}/include)
1360                         if(WITH_MINGW64)
1361                                 set(BOOST_POSTFIX "mgw47-mt-s-1_49")
1362                                 set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
1363                         else()
1364                                 set(BOOST_POSTFIX "mgw46-mt-s-1_49")
1365                                 set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
1366                         endif()
1367                         set(BOOST_LIBRARIES
1368                                 optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
1369                                 boost_regex-${BOOST_POSTFIX}
1370                                 boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
1371                                 debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
1372                                 boost_regex-${BOOST_DEBUG_POSTFIX}
1373                                 boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
1374                         if(WITH_INTERNATIONAL)
1375                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1376                                         optimized boost_locale-${BOOST_POSTFIX}
1377                                         debug boost_locale-${BOOST_DEBUG_POSTFIX}) 
1378                         endif()
1379                         if(WITH_CYCLES_OSL)
1380                                 set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
1381                                         optimized boost_wave-${BOOST_POSTFIX}
1382                                         debug boost_wave-${BOOST_DEBUG_POSTFIX}) 
1383                         endif()
1384                         set(BOOST_LIBPATH ${BOOST}/lib)
1385                         set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
1386                 endif()
1387                         
1388                 if(WITH_OPENIMAGEIO)
1389                         set(OPENIMAGEIO ${LIBDIR}/openimageio)
1390                         set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1391                         set(OPENIMAGEIO_LIBRARIES OpenImageIO)
1392                         set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
1393                         set(OPENIMAGEIO_DEFINITIONS "")
1394                 endif()
1395                 
1396                 if(WITH_LLVM)
1397                         set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH    "Path to the LLVM installation")
1398                         set(LLVM_LIB_DIR ${LLVM_DIRECTORY}/lib)
1399                         #Explicitly set llvm lib order.
1400                         #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
1401                         set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
1402                                 LLVMAsmParser LLVMAsmPrinter
1403                                 LLVMBitReader LLVMBitWriter
1404                                 LLVMDebugInfo LLVMExecutionEngine
1405                                 LLVMInstCombine LLVMInstrumentation
1406                                 LLVMInterpreter LLVMJIT
1407                                 LLVMLinker LLVMMC
1408                                 LLVMMCDisassembler LLVMMCJIT
1409                                 LLVMMCParser LLVMObject
1410                                 LLVMRuntimeDyld 
1411                                 LLVMSupport
1412                                 LLVMTableGen LLVMTarget
1413                                 LLVMTransformUtils LLVMVectorize
1414                                 LLVMX86AsmParser LLVMX86AsmPrinter
1415                                 LLVMX86CodeGen LLVMX86Desc
1416                                 LLVMX86Disassembler LLVMX86Info
1417                                 LLVMX86Utils LLVMipa
1418                                 LLVMipo LLVMCore)
1419                                 #imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
1420                                 set(PLATFORM_LINKLIBS "${PLATFORM_LINKLIBS} -limagehlp")
1421                         set(LLVM_STATIC YES)
1422                 endif()
1423                 
1424                 if(WITH_OPENCOLORIO)
1425                         set(OPENCOLORIO ${LIBDIR}/opencolorio)
1426                         set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1427                         set(OPENCOLORIO_LIBRARIES OpenColorIO)
1428                         set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1429                         set(OPENCOLORIO_DEFINITIONS)
1430                 endif()
1431
1432                 set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")
1433
1434                 ## DISABLE - causes linking errors 
1435                 ## for re-distribution, so users dont need mingw installed
1436                 # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")
1437
1438         endif()
1439
1440 elseif(APPLE)
1441
1442         if(${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.5" OR ${CMAKE_OSX_DEPLOYMENT_TARGET} STRGREATER "10.5")
1443                 set(WITH_LIBS10.5 ON CACHE BOOL "Use 10.5 libs" FORCE) # valid also for 10.6/10.7
1444         endif()
1445
1446         if(WITH_LIBS10.5)
1447                 set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-9.x.universal)
1448         else()
1449                 if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1450                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.x.i386)
1451                 else()
1452                         set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/darwin-8.0.0-powerpc)
1453                 endif()
1454         endif()
1455
1456
1457         if(WITH_OPENAL)
1458                 find_package(OpenAL)
1459                 if(OPENAL_FOUND)
1460                         set(WITH_OPENAL ON)
1461                         set(OPENAL_INCLUDE_DIR "${LIBDIR}/openal/include")
1462                 else()
1463                         set(WITH_OPENAL OFF)
1464                 endif()
1465         endif()
1466
1467         if(WITH_JACK)
1468                 find_library(JACK_FRAMEWORK
1469                         NAMES jackmp
1470                 )
1471                 set(JACK_INCLUDE_DIRS ${JACK_FRAMEWORK}/headers)
1472                 if(NOT JACK_FRAMEWORK)
1473                         set(WITH_JACK OFF)
1474                 endif()
1475         endif()
1476
1477         if(WITH_CODEC_SNDFILE)
1478                 set(SNDFILE ${LIBDIR}/sndfile)
1479                 set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include)
1480                 set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc)
1481                 set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib)  # TODO, deprecate
1482         endif()
1483
1484         if(WITH_PYTHON)
1485                 # we use precompiled libraries for py 3.3 and up by default
1486                 set(PYTHON_VERSION 3.3)
1487                 if(NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
1488                         # normally cached but not since we include them with blender
1489                         set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}m")
1490                         # set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
1491                         set(PYTHON_LIBRARY python${PYTHON_VERSION}m)
1492                         set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
1493                         # set(PYTHON_LINKFLAGS "-u _PyMac_Error")  # won't  build with this enabled
1494                 else()
1495                         # module must be compiled against Python framework
1496                         set(PYTHON_INCLUDE_DIR "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/include/python${PYTHON_VERSION}m")
1497                         set(PYTHON_BINARY "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}")
1498                         #set(PYTHON_LIBRARY python${PYTHON_VERSION})
1499                         set(PYTHON_LIBPATH "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config-${PYTHON_VERSION}m")
1500                         #set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework Python")  # won't  build with this enabled
1501                 endif()
1502                 
1503                 # uncached vars
1504                 set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
1505                 set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
1506         endif()
1507
1508         if(WITH_FFTW3)
1509                 set(FFTW3 ${LIBDIR}/fftw3)
1510                 set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
1511                 set(FFTW3_LIBRARIES fftw3)
1512                 set(FFTW3_LIBPATH ${FFTW3}/lib)
1513         endif()
1514
1515         set(PNG_LIBRARIES png)
1516         set(JPEG_LIBRARIES jpeg)
1517
1518         set(ZLIB /usr)
1519         set(ZLIB_INCLUDE_DIRS "${ZLIB}/include")
1520         set(ZLIB_LIBRARIES z bz2)
1521
1522         set(FREETYPE ${LIBDIR}/freetype)
1523         set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
1524         set(FREETYPE_LIBPATH ${FREETYPE}/lib)
1525         set(FREETYPE_LIBRARY freetype)
1526
1527         if(WITH_IMAGE_OPENEXR)
1528                 set(OPENEXR ${LIBDIR}/openexr)
1529                 set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
1530                 set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
1531                 set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread)
1532                 set(OPENEXR_LIBPATH ${OPENEXR}/lib)
1533         endif()
1534
1535         if(WITH_CODEC_FFMPEG)
1536                 set(FFMPEG ${LIBDIR}/ffmpeg)
1537                 set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
1538                 set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg)
1539                 set(FFMPEG_LIBPATH ${FFMPEG}/lib)
1540                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS")
1541         endif()
1542
1543         find_library(SYSTEMSTUBS_LIBRARY
1544                 NAMES
1545                 SystemStubs
1546                 PATHS
1547         )
1548         mark_as_advanced(SYSTEMSTUBS_LIBRARY)
1549         if(SYSTEMSTUBS_LIBRARY)
1550                 set(PLATFORM_LINKLIBS stdc++ SystemStubs)
1551         else()
1552                 set(PLATFORM_LINKLIBS stdc++)
1553         endif()
1554
1555         if(WITH_COCOA)
1556                 set(PLATFORM_CFLAGS "-pipe -funsigned-char -DGHOST_COCOA")
1557                 set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Cocoa -framework Carbon -framework AudioUnit -framework AudioToolbox -framework CoreAudio")
1558                 if(USE_QTKIT)
1559                         set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -DUSE_QTKIT")
1560                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QTKit")
1561                         if(CMAKE_OSX_ARCHITECTURES MATCHES i386)
1562                                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
1563                                 #libSDL still needs 32bit carbon quicktime
1564                         endif()
1565                 elseif(WITH_CODEC_QUICKTIME)
1566                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -framework QuickTime")
1567                 endif()
1568
1569                 # XXX - SOME MAC DEV PLEASE TEST WITH THE SDK INSTALLED!
1570                 # ALSO SHOULD BE MOVED INTO OWN MODULE WHEN FUNCTIONAL
1571                 if(WITH_INPUT_NDOF)
1572                         # This thread it *should* work and check the framework - campbell
1573                         # http://www.cmake.org/pipermail/cmake/2005-December/007740.html
1574                         find_library(3DCONNEXION_CLIENT_FRAMEWORK
1575                                 NAMES 3DconnexionClient
1576                         )
1577                         if(NOT 3DCONNEXION_CLIENT_FRAMEWORK)
1578                                 set(WITH_INPUT_NDOF OFF)
1579                         endif()
1580
1581                         if(WITH_INPUT_NDOF)
1582                                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -F/Library/Frameworks -weak_framework 3DconnexionClient")
1583                                 set(NDOF_INCLUDE_DIRS /Library/Frameworks/3DconnexionClient.framework/Headers )
1584                         endif()
1585                 endif()
1586
1587         if(WITH_JACK)
1588                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -weak_framework jackmp")
1589         endif()
1590
1591         else()
1592                 set(PLATFORM_CFLAGS "-pipe -funsigned-char")
1593                 set(PLATFORM_LINKFLAGS "-fexceptions -framework CoreServices -framework Foundation -framework IOKit -framework AppKit -framework Carbon -framework AGL -framework AudioUnit -framework AudioToolbox -framework CoreAudio -framework QuickTime")
1594                 set(WITH_INPUT_NDOF OFF)  # unsupported
1595         endif()
1596         
1597         if(WITH_PYTHON_MODULE OR WITH_PYTHON_FRAMEWORK)
1598                 set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")# force cmake to link right framework
1599         endif()
1600         
1601         if(WITH_OPENCOLLADA)
1602                 set(OPENCOLLADA ${LIBDIR}/opencollada)
1603
1604                 set(OPENCOLLADA_INCLUDE_DIRS
1605                         ${LIBDIR}/opencollada/include/COLLADAStreamWriter
1606                         ${LIBDIR}/opencollada/include/COLLADABaseUtils
1607                         ${LIBDIR}/opencollada/include/COLLADAFramework
1608                         ${LIBDIR}/opencollada/include/COLLADASaxFrameworkLoader
1609                         ${LIBDIR}/opencollada/include/GeneratedSaxParser
1610                 )
1611
1612                 set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib)
1613                 set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa")
1614                 #pcre is bundled with openCollada
1615                 #set(PCRE ${LIBDIR}/pcre)
1616                 #set(PCRE_LIBPATH ${PCRE}/lib)
1617                 set(PCRE_LIBRARIES pcre)
1618                 #libxml2 is used
1619                 #set(EXPAT ${LIBDIR}/expat)
1620                 #set(EXPAT_LIBPATH ${EXPAT}/lib)
1621                 set(EXPAT_LIB)
1622         endif()
1623
1624         if(WITH_SDL)
1625                 set(SDL ${LIBDIR}/sdl)
1626                 set(SDL_INCLUDE_DIR ${SDL}/include)
1627                 set(SDL_LIBRARY SDL)
1628                 set(SDL_LIBPATH ${SDL}/lib)
1629         endif()
1630
1631         set(PNG "${LIBDIR}/png")
1632         set(PNG_INCLUDE_DIR "${PNG}/include")
1633         set(PNG_LIBPATH ${PNG}/lib)
1634
1635         set(JPEG "${LIBDIR}/jpeg")
1636         set(JPEG_INCLUDE_DIR "${JPEG}/include")
1637         set(JPEG_LIBPATH ${JPEG}/lib)
1638
1639         if(WITH_IMAGE_TIFF)
1640                 set(TIFF ${LIBDIR}/tiff)
1641                 set(TIFF_INCLUDE_DIR ${TIFF}/include)
1642                 set(TIFF_LIBRARY tiff)
1643                 set(TIFF_LIBPATH ${TIFF}/lib)
1644         endif()
1645
1646         if(WITH_INPUT_NDOF)
1647                 # linker needs "-weak_framework 3DconnexionClient"
1648         endif()
1649
1650         if(WITH_BOOST)
1651                 set(BOOST ${LIBDIR}/boost)
1652                 set(BOOST_INCLUDE_DIR ${BOOST}/include)
1653                 set(BOOST_LIBRARIES boost_date_time-mt boost_filesystem-mt boost_regex-mt boost_system-mt boost_thread-mt boost_wave-mt)
1654                 if(WITH_INTERNATIONAL)
1655                         list(APPEND BOOST_LIBRARIES boost_locale-mt)
1656                         set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -liconv") # boost_locale needs it !
1657                 endif()
1658                 set(BOOST_LIBPATH ${BOOST}/lib)
1659                 set(BOOST_DEFINITIONS)
1660         endif()
1661
1662         if(WITH_OPENIMAGEIO)
1663                 set(OPENIMAGEIO ${LIBDIR}/openimageio)
1664                 set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
1665                 set(OPENIMAGEIO_LIBRARIES ${OPENIMAGEIO}/lib/libOpenImageIO.a ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARY} ${OPENEXR_LIBRARIES} ${ZLIB_LIBRARIES})
1666                 set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib ${JPEG_LIBPATH} ${PNG_LIBPATH} ${TIFF_LIBPATH} ${OPENEXR_LIBPATH} ${ZLIB_LIBPATH})
1667                 set(OPENIMAGEIO_DEFINITIONS "-DOIIO_STATIC_BUILD")
1668         endif()
1669
1670         if(WITH_OPENCOLORIO)
1671                 set(OPENCOLORIO ${LIBDIR}/opencolorio)
1672                 set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
1673                 set(OPENCOLORIO_LIBRARIES OpenColorIO tinyxml yaml-cpp)
1674                 set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
1675                 set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
1676         endif()
1677
1678         if(WITH_LLVM)
1679                 set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH    "Path to the LLVM installation")
1680                 set(LLVM_VERSION "3.1" CACHE STRING     "Version of LLVM to use")
1681                 set(LLVM_STATIC YES)
1682                 if(EXISTS "${LLVM_DIRECTORY}/bin/llvm-config")
1683                         set(LLVM_CONFIG "${LLVM_DIRECTORY}/bin/llvm-config")
1684                 else()
1685                         set(LLVM_CONFIG llvm-config)
1686                 endif()
1687                 execute_process(COMMAND ${LLVM_CONFIG} --version
1688                                 OUTPUT_VARIABLE LLVM_VERSION
1689                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
1690                 execute_process(COMMAND ${LLVM_CONFIG} --prefix
1691                                 OUTPUT_VARIABLE LLVM_DIRECTORY
1692                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
1693                 execute_process(COMMAND ${LLVM_CONFIG} --libdir
1694                                 OUTPUT_VARIABLE LLVM_LIB_DIR
1695                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
1696                 find_library(LLVM_LIBRARY
1697                              NAMES LLVMAnalysis # first of a whole bunch of libs to get
1698                              PATHS ${LLVM_LIB_DIR})
1699
1700                 if(LLVM_LIBRARY AND LLVM_DIRECTORY AND LLVM_LIB_DIR)
1701                         if(LLVM_STATIC)
1702                                 # if static LLVM libraries were requested, use llvm-config to generate
1703                                 # the list of what libraries we need, and substitute that in the right
1704                                 # way for LLVM_LIBRARY.
1705                                 execute_process(COMMAND ${LLVM_CONFIG} --libfiles
1706                                                 OUTPUT_VARIABLE LLVM_LIBRARY
1707                                                 OUTPUT_STRIP_TRAILING_WHITESPACE)
1708                                 string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
1709                         endif()
1710                 else()
1711                         message(FATAL_ERROR "LLVM not found.")
1712                 endif()
1713         endif()
1714
1715         if(WITH_CYCLES_OSL)
1716                 set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
1717         
1718                 find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
1719                 find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
1720                 find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
1721                 # WARNING! depends on correct order of OSL libs linking
1722                 list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
1723                 find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
1724                 find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
1725         
1726                 if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
1727                         set(OSL_FOUND TRUE)
1728                 else()
1729                         message(STATUS "OSL not found")
1730                 endif()
1731         endif()
1732
1733         set(EXETYPE MACOSX_BUNDLE)
1734
1735         set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
1736         set(CMAKE_CXX_FLAGS_DEBUG "-fno-strict-aliasing -g")
1737         if(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" OR CMAKE_OSX_ARCHITECTURES MATCHES "i386")
1738                 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic -msse -msse2 -msse3 -mssse3")
1739                 set(CMAKE_C_FLAGS_RELEASE "-O2 -mdynamic-no-pic  -msse -msse2 -msse3 -mssse3")
1740                 if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1741                         set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
1742                         set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ftree-vectorize  -fvariable-expansion-in-unroller")
1743                 endif()
1744         else()
1745                 set(CMAKE_C_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
1746                 set(CMAKE_CXX_FLAGS_RELEASE "-mdynamic-no-pic -fno-strict-aliasing")
1747         endif()
1748 endif()
1749
1750 #-----------------------------------------------------------------------------
1751 # Common.
1752
1753 if(APPLE OR WIN32)
1754         if(NOT EXISTS "${LIBDIR}/")
1755                 message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'")
1756         endif()
1757 endif()
1758
1759 if(NOT WITH_FFTW3 AND WITH_MOD_OCEANSIM)
1760         message(FATAL_ERROR "WITH_MOD_OCEANSIM requires WITH_FFTW3 to be ON")
1761 endif()
1762
1763 if(WITH_CYCLES)
1764         if(NOT WITH_OPENIMAGEIO)
1765                 message(FATAL_ERROR "Cycles reqires WITH_OPENIMAGEIO, the library may not have been found. Configure OIIO or disable WITH_CYCLES")
1766         endif()
1767         if(NOT WITH_BOOST)
1768                 message(FATAL_ERROR "Cycles reqires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
1769         endif()
1770
1771         if(WITH_CYCLES_OSL)
1772                 if(NOT WITH_LLVM)
1773                         message(FATAL_ERROR "Cycles OSL reqires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
1774                 endif()
1775         endif()
1776 endif()
1777
1778 if(WITH_INTERNATIONAL)
1779         if(NOT WITH_BOOST)
1780                 message(FATAL_ERROR "Internationalization reqires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_INTERNATIONAL")
1781         endif()
1782 endif()
1783
1784 # See TEST_SSE_SUPPORT() for how this is defined.
1785
1786 if(WITH_RAYOPTIMIZATION)
1787         if(SUPPORT_SSE_BUILD)
1788                 set(PLATFORM_CFLAGS " ${COMPILER_SSE_FLAG} ${PLATFORM_CFLAGS}")
1789                 add_definitions(-D__SSE__ -D__MMX__)
1790         endif()
1791         if(SUPPORT_SSE2_BUILD)
1792                 set(PLATFORM_CFLAGS " ${COMPILER_SSE2_FLAG} ${PLATFORM_CFLAGS}")
1793                 add_definitions(-D__SSE2__)
1794                 if(NOT SUPPORT_SSE_BUILD) # dont double up
1795                         add_definitions(-D__MMX__)
1796                 endif()
1797         endif()
1798 endif()
1799
1800
1801 # set the endian define
1802 if(MSVC)
1803         # for some reason this fails on msvc
1804         add_definitions(-D__LITTLE_ENDIAN__)
1805         
1806 # OSX-Note: as we do crosscompiling with specific set architecture,
1807 # endianess-detection and autosetting is counterproductive
1808 # so we just set endianess according CMAKE_OSX_ARCHITECTURES
1809
1810 elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64)
1811         add_definitions(-D__LITTLE_ENDIAN__)
1812 elseif(CMAKE_OSX_ARCHITECTURES MATCHES ppc OR CMAKE_OSX_ARCHITECTURES MATCHES ppc64)            
1813         add_definitions(-D__BIG_ENDIAN__)
1814         
1815 else()
1816         include(TestBigEndian)
1817         test_big_endian(_SYSTEM_BIG_ENDIAN)
1818         if(_SYSTEM_BIG_ENDIAN)
1819                 add_definitions(-D__BIG_ENDIAN__)
1820         else()
1821                 add_definitions(-D__LITTLE_ENDIAN__)
1822         endif()
1823         unset(_SYSTEM_BIG_ENDIAN)
1824 endif()
1825
1826
1827 if(WITH_IMAGE_OPENJPEG)
1828         if(WITH_SYSTEM_OPENJPEG)
1829                 # dealt with above
1830         else()
1831                 set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
1832                 add_definitions(-DOPJ_STATIC)
1833         endif()
1834 endif()
1835
1836 if(WITH_IMAGE_REDCODE)
1837         set(REDCODE ${CMAKE_SOURCE_DIR}/extern)
1838         set(REDCODE_INC ${REDCODE})
1839 endif()
1840
1841 #-----------------------------------------------------------------------------
1842 # Blender WebPlugin
1843
1844 if(WITH_WEBPLUGIN)
1845         set(GECKO_DIR "${CMAKE_SOURCE_DIR}/../gecko-sdk/" CACHE PATH "Gecko SDK path")
1846         set(WEBPLUGIN_SANDBOX_MODE "apparmor" CACHE STRING "WEB Plugin sandbox mode, can be apparmor, privsep, none")
1847
1848         set(WITH_PLAYER ON)
1849 endif()
1850
1851
1852 #-----------------------------------------------------------------------------
1853 # Configure OpenGL.
1854 find_package(OpenGL)
1855 blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
1856 # unset(OPENGL_LIBRARIES CACHE) # not compat with older cmake
1857 # unset(OPENGL_xmesa_INCLUDE_DIR CACHE) # not compat with older cmake
1858
1859 #-----------------------------------------------------------------------------
1860 # Configure OpenMP.
1861 if(WITH_OPENMP)
1862         find_package(OpenMP)
1863         if(OPENMP_FOUND)
1864                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
1865                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
1866
1867                 if(APPLE AND ${CMAKE_GENERATOR} MATCHES "Xcode")
1868                         set(CMAKE_XCODE_ATTRIBUTE_ENABLE_OPENMP_SUPPORT "YES")
1869                 endif()
1870         else()
1871                 set(WITH_OPENMP OFF)
1872         endif()
1873
1874         mark_as_advanced(
1875                 OpenMP_C_FLAGS
1876                 OpenMP_CXX_FLAGS
1877         )
1878 endif()
1879
1880 #-----------------------------------------------------------------------------
1881 # Configure GLEW
1882
1883 if(WITH_SYSTEM_GLEW)
1884         find_package(GLEW)
1885
1886         if(NOT GLEW_FOUND)
1887                 message(FATAL_ERROR "GLEW is required to build blender, install it or disable WITH_SYSTEM_GLEW")
1888         endif()
1889
1890         mark_as_advanced(
1891                 GLEW_LIBRARY
1892                 GLEW_INCLUDE_PATH
1893         )
1894 else()
1895         # set(GLEW_LIBRARY "")  # unused
1896         set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
1897 endif()
1898
1899
1900 #-----------------------------------------------------------------------------
1901 # Configure Bullet
1902
1903 if(WITH_BULLET AND WITH_SYSTEM_BULLET)
1904         find_package(Bullet)
1905         if(NOT BULLET_FOUND)
1906                 set(WITH_BULLET OFF)
1907         endif()
1908 else()
1909         set(BULLET_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/bullet2/src")
1910         # set(BULLET_LIBRARIES "")
1911 endif()
1912
1913 #-----------------------------------------------------------------------------
1914 # Configure Python.
1915
1916 if(WITH_PYTHON_MODULE)
1917         add_definitions(-DPy_ENABLE_SHARED)
1918 endif()
1919
1920 #-----------------------------------------------------------------------------
1921 # Extra compile flags
1922
1923 if(CMAKE_COMPILER_IS_GNUCC)
1924
1925         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1926         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_CAST_ALIGN -Wcast-align)
1927         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
1928         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1929         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1930         # system headers sometimes do this, disable for now, was: -Werror=strict-prototypes
1931         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
1932         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
1933         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
1934         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1935         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
1936         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
1937         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_WRITE_STRINGS -Wwrite-strings)
1938         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_LOGICAL_OP -Wlogical-op)
1939         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNDEF -Wundef)
1940         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1941         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_NULL -Wnonnull)  # C only
1942         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1943         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1944
1945         # gcc 4.2 gives annoying warnings on every file with this
1946         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1947                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNINITIALIZED -Wuninitialized)
1948         endif()
1949
1950         # versions before gcc4.6 give many BLI_math warnings
1951         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.6")
1952                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_REDUNDANT_DECLS       -Wredundant-decls)
1953                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
1954         endif()
1955
1956         # disable because it gives warnings for printf() & friends.
1957         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_DOUBLE_PROMOTION -Wdouble-promotion -Wno-error=double-promotion)
1958
1959         if(NOT APPLE)
1960                 ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1961         endif()
1962
1963         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
1964         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
1965         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
1966         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_LOGICAL_OP -Wlogical-op)
1967         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_INIT_SELF -Winit-self)  # needs -Wuninitialized
1968         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_INCLUDE_DIRS -Wmissing-include-dirs)
1969         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DIV_BY_ZERO -Wno-div-by-zero)
1970
1971         # gcc 4.2 gives annoying warnings on every file with this
1972         if(NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "4.3")
1973                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNINITIALIZED -Wuninitialized)
1974         endif()
1975
1976         # causes too many warnings
1977         if(NOT APPLE)
1978                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNDEF -Wundef)
1979                 ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_MISSING_DECLARATIONS -Wmissing-declarations)
1980         endif()
1981
1982         # flags to undo strict flags
1983         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_DEPRECATED_DECLARATIONS -Wno-deprecated-declarations)
1984         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER        -Wno-unused-parameter)
1985
1986         if(NOT APPLE)
1987                 ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_ERROR_UNUSED_BUT_SET_VARIABLE -Wno-error=unused-but-set-variable)
1988         endif()
1989
1990 elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1991
1992         # strange, clang complains these are not supported, but then yses them.
1993         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
1994         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_DECLARATION_AFTER_STATEMENT -Werror=declaration-after-statement)
1995         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_IMPLICIT_FUNCTION_DECLARATION -Werror=implicit-function-declaration)
1996         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ERROR_RETURN_TYPE  -Werror=return-type)
1997         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
1998         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
1999         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_CHAR_SUBSCRIPTS -Wno-char-subscripts)
2000         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_STRICT_PROTOTYPES  -Wstrict-prototypes)
2001         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_MISSING_PROTOTYPES -Wmissing-prototypes)
2002         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_PARAMETER -Wunused-parameter)
2003
2004         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2005         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_AUTOLOGICAL_COMPARE -Wno-tautological-compare)
2006         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_UNKNOWN_PRAGMAS     -Wno-unknown-pragmas)
2007         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_CHAR_SUBSCRIPTS     -Wno-char-subscripts)
2008         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.
2009         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE        -Wno-sign-compare)
2010         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF    -Wno-invalid-offsetof)
2011
2012         # gives too many unfixable warnings
2013         # ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_UNUSED_MACROS      -Wunused-macros)
2014         # ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_UNUSED_MACROS          -Wunused-macros)
2015
2016         # flags to undo strict flags
2017         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_PARAMETER -Wno-unused-parameter)
2018         ADD_CHECK_C_COMPILER_FLAG(CC_REMOVE_STRICT_FLAGS C_WARN_NO_UNUSED_MACROS    -Wno-unused-macros)
2019
2020 elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
2021
2022         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_ALL -Wall)
2023         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_POINTER_ARITH -Wpointer-arith)
2024         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS C_WARN_NO_UNKNOWN_PRAGMAS -Wno-unknown-pragmas)
2025
2026         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_ALL -Wall)
2027         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_INVALID_OFFSETOF -Wno-invalid-offsetof)
2028         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
2029
2030         # disable numbered, false positives
2031         set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
2032         set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
2033
2034 endif()
2035
2036 # MSVC2010 fails to links C++ libs right
2037 if(MSVC10)
2038         if(WITH_OPENCOLLADA)
2039                 message(WARNING "MSVC 2010 does not support OpenCollada, disabling WITH_OPENCOLLADA. To enable support use Use MSVC 2008")
2040         endif()
2041 endif()
2042
2043 # ensure python header is found since detection can fail, this could happen
2044 # with _any_ library but since we used a fixed python version this tends to
2045 # be most problematic.
2046 if(WITH_PYTHON)
2047         if(NOT EXISTS "${PYTHON_INCLUDE_DIR}/Python.h")
2048                 message(FATAL_ERROR "Missing: \"${PYTHON_INCLUDE_DIR}/Python.h\",\n"
2049                                                         "Set the cache entry 'PYTHON_INCLUDE_DIR' to point "
2050                                                         "to a valid python include path. Containing "
2051                                                         "Python.h for python version \"${PYTHON_VERSION}\"")
2052         endif()
2053
2054         if(WITH_PYTHON_INSTALL AND WITH_PYTHON_INSTALL_NUMPY)
2055                 # set but invalid
2056                 # -- disabled until we make numpy bundled with blender - campbell
2057                 if((NOT ${PYTHON_NUMPY_PATH} STREQUAL "") AND (NOT ${PYTHON_NUMPY_PATH} MATCHES NOTFOUND))
2058 #                       if(NOT EXISTS "${PYTHON_NUMPY_PATH}/numpy")
2059 #                               message(WARNING "PYTHON_NUMPY_PATH is invalid, numpy not found in '${PYTHON_NUMPY_PATH}' "
2060 #                                               "WITH_PYTHON_INSTALL_NUMPY option will be ignored when installing python")
2061 #                               set(WITH_PYTHON_INSTALL_NUMPY OFF)
2062 #                       endif()
2063                 # not set, so initialize
2064                 else()
2065                         string(REPLACE "." ";" _PY_VER_SPLIT "${PYTHON_VERSION}")
2066                         list(GET _PY_VER_SPLIT 0 _PY_VER_MAJOR)
2067
2068                         # re-cache
2069                         unset(PYTHON_NUMPY_PATH CACHE)
2070                         find_path(PYTHON_NUMPY_PATH
2071                           NAMES
2072                             numpy
2073                           HINTS
2074                             "${PYTHON_LIBPATH}/python${PYTHON_VERSION}/"
2075                             "${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/"
2076                           PATH_SUFFIXES
2077                             site-packages
2078                             dist-packages
2079                            NO_DEFAULT_PATH
2080                         )
2081
2082                         if(NOT EXISTS "${PYTHON_NUMPY_PATH}")
2083                                 message(WARNING "'numpy' path could not be found in:\n"
2084                                                 "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/site-packages/numpy', "
2085                                                 "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/site-packages/numpy', "
2086                                                 "'${PYTHON_LIBPATH}/python${PYTHON_VERSION}/dist-packages/numpy', "
2087                                                 "'${PYTHON_LIBPATH}/python${_PY_VER_MAJOR}/dist-packages/numpy', "
2088                                                 "WITH_PYTHON_INSTALL_NUMPY option will be ignored when installing python")
2089                                 set(WITH_PYTHON_INSTALL_NUMPY OFF)
2090                         else()
2091                                 message(STATUS "numpy found at '${PYTHON_NUMPY_PATH}'")
2092                         endif()
2093
2094                         unset(_PY_VER_SPLIT)
2095                         unset(_PY_VER_MAJOR)
2096                 endif()
2097         endif()
2098 endif()
2099
2100 if(WITH_GCC_MUDFLAP)
2101         set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -fmudflapth -funwind-tables")
2102         set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread -lmudflapth -rdynamic")
2103         ADD_CHECK_C_COMPILER_FLAG(C_WARNINGS     C_WARN_NO_ERROR_MUDFLAP   -Wno-error=mudflap)
2104         ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_ERROR_MUDFLAP -Wno-error=mudflap)
2105 endif()
2106
2107 # Include warnings first, so its possible to disable them with user defined flags
2108 # eg: -Wno-uninitialized
2109 set(CMAKE_C_FLAGS "${C_WARNINGS} ${CMAKE_C_FLAGS} ${PLATFORM_CFLAGS}")
2110 set(CMAKE_CXX_FLAGS "${CXX_WARNINGS} ${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS}")
2111
2112 #-------------------------------------------------------------------------------
2113 # Global Defines
2114
2115 # better not set includes here but this debugging option is off by default.
2116 if(WITH_CXX_GUARDEDALLOC)
2117         include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
2118         add_definitions(-DWITH_CXX_GUARDEDALLOC)
2119 endif()
2120
2121 if(WITH_ASSERT_ABORT)
2122         add_definitions(-DWITH_ASSERT_ABORT)
2123 endif()
2124
2125 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
2126 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
2127
2128 #-----------------------------------------------------------------------------
2129 # Libraries
2130
2131 add_subdirectory(source)
2132 add_subdirectory(intern)
2133 add_subdirectory(extern)
2134
2135
2136 #-----------------------------------------------------------------------------
2137 # Blender Application
2138 if(WITH_BLENDER)
2139         add_subdirectory(source/creator)
2140 endif()
2141
2142
2143 #-----------------------------------------------------------------------------
2144 # Blender Player
2145 if(WITH_PLAYER)
2146         add_subdirectory(source/blenderplayer)
2147 endif()
2148
2149 #-----------------------------------------------------------------------------
2150 # CPack for generating packages
2151 include(build_files/cmake/packaging.cmake)
2152
2153
2154 #-----------------------------------------------------------------------------
2155 # Print Final Configuration
2156
2157 if(FIRST_RUN)
2158         set(_config_msg "\n* Blender Configuration *")
2159         macro(info_cfg_option
2160                 _setting)
2161                 set(_msg "   * ${_setting}")
2162                 string(LENGTH "${_msg}" _len)
2163                 while("32" GREATER "${_len}")
2164                         set(_msg "${_msg} ")
2165                          math(EXPR _len "${_len} + 1")
2166                 endwhile()
2167
2168                 set(_config_msg "${_config_msg}\n${_msg}${${_setting}}")
2169         endmacro()
2170
2171         macro(info_cfg_text
2172                 _text)
2173                 set(_config_msg "${_config_msg}\n\n  ${_text}")
2174
2175
2176         endmacro()
2177
2178         info_cfg_text("Build Options:")
2179         info_cfg_option(WITH_GAMEENGINE)
2180         info_cfg_option(WITH_PLAYER)
2181         info_cfg_option(WITH_BULLET)
2182         info_cfg_option(WITH_IK_SOLVER)
2183         info_cfg_option(WITH_IK_ITASC)
2184         info_cfg_option(WITH_OPENCOLLADA)
2185         info_cfg_option(WITH_FFTW3)
2186         info_cfg_option(WITH_INTERNATIONAL)
2187         info_cfg_option(WITH_INPUT_NDOF)
2188         info_cfg_option(WITH_CYCLES)
2189         info_cfg_option(WITH_OPENCOLORIO)
2190
2191         info_cfg_text("Compiler Options:")
2192         info_cfg_option(WITH_BUILDINFO)
2193         info_cfg_option(WITH_OPENMP)
2194         info_cfg_option(WITH_RAYOPTIMIZATION)
2195
2196         info_cfg_text("System Options:")
2197         info_cfg_option(WITH_INSTALL_PORTABLE)
2198         info_cfg_option(WITH_X11_XF86VMODE)
2199         info_cfg_option(WITH_X11_XINPUT)
2200         info_cfg_option(WITH_MEM_JEMALLOC)
2201         info_cfg_option(WITH_SYSTEM_GLEW)
2202         info_cfg_option(WITH_SYSTEM_OPENJPEG)
2203
2204         info_cfg_text("Image Formats:")
2205         info_cfg_option(WITH_IMAGE_CINEON)
2206         info_cfg_option(WITH_IMAGE_DDS)
2207         info_cfg_option(WITH_IMAGE_HDR)
2208         info_cfg_option(WITH_IMAGE_OPENEXR)
2209         info_cfg_option(WITH_IMAGE_OPENJPEG)
2210         info_cfg_option(WITH_IMAGE_REDCODE)
2211         info_cfg_option(WITH_IMAGE_TIFF)
2212
2213         info_cfg_text("Audio:")
2214         info_cfg_option(WITH_OPENAL)
2215         info_cfg_option(WITH_SDL)
2216         info_cfg_option(WITH_JACK)
2217         info_cfg_option(WITH_JACK_DYNLOAD)
2218         info_cfg_option(WITH_CODEC_AVI)
2219         info_cfg_option(WITH_CODEC_FFMPEG)
2220         info_cfg_option(WITH_CODEC_SNDFILE)
2221
2222         info_cfg_text("Compression:")
2223         info_cfg_option(WITH_LZMA)
2224         info_cfg_option(WITH_LZO)
2225
2226         info_cfg_text("Python:")
2227         info_cfg_option(WITH_PYTHON_INSTALL)
2228         info_cfg_option(WITH_PYTHON_INSTALL_NUMPY)
2229         info_cfg_option(WITH_PYTHON_MODULE)
2230         info_cfg_option(WITH_PYTHON_SAFETY)
2231         if(APPLE)
2232                 info_cfg_option(WITH_PYTHON_FRAMEWORK)
2233         endif()
2234
2235         info_cfg_text("Modifiers:")
2236         info_cfg_option(WITH_MOD_BOOLEAN)
2237         info_cfg_option(WITH_MOD_REMESH)
2238         info_cfg_option(WITH_MOD_FLUID)
2239         info_cfg_option(WITH_MOD_OCEANSIM)
2240
2241         # debug
2242         message(STATUS "HAVE_STDBOOL_H = ${HAVE_STDBOOL_H}")
2243
2244         info_cfg_text("")
2245
2246         message("${_config_msg}")
2247 endif()