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