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