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