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