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