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