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