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