diff --git a/CMakeLists.txt b/CMakeLists.txt index 83e6705e498..dc81a726f7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,39 +49,30 @@ endif() cmake_minimum_required(VERSION 2.8) +if(NOT EXECUTABLE_OUTPUT_PATH) + set(FIRST_RUN "TRUE") +endif() + + # this starts out unset -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/build_files/cmake/Modules") # quiet output for Makefiles, 'make -s' helps too # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF) -# ignore system set flag, use our own -# must be before project(...) -# if the user wants to add their own its ok after first run. -if(DEFINED CMAKE_C_STANDARD_LIBRARIES) - set(_reset_standard_libraries OFF) -else() - set(_reset_standard_libraries ON) -endif() +#----------------------------------------------------------------------------- +# Load some macros. +include(build_files/cmake/macros.cmake) +#----------------------------------------------------------------------------- +# Initialize project. + +blender_project_hack_pre() + project(Blender) - -if (_reset_standard_libraries) - # Must come after project(...) - # - # MINGW workaround for -ladvapi32 being included which surprisingly causes - # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender - # with a meaningless stack trace. by overriding this flag we ensure we only - # have libs we define and that cmake & scons builds match. - set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) - set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) - mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES) - mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES) -endif() -unset(_reset_standard_libraries) - +blender_project_hack_post() enable_testing() @@ -91,10 +82,6 @@ enable_testing() set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE ) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE ) -#----------------------------------------------------------------------------- -# Load some macros. -include(build_files/cmake/macros.cmake) - #----------------------------------------------------------------------------- # Set default config options @@ -106,7 +93,7 @@ option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON) option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON) option(WITH_PYTHON_SECURITY "Disables execution of scripts within blend files by default (recommend to leave off)" OFF) mark_as_advanced(WITH_PYTHON) # dont want people disabling this unless they really know what they are doing. -mark_as_advanced(WITH_PYTHON_SECURITY) # some distrobutions see this as a security issue, rather then have them patch it, make a build option. +mark_as_advanced(WITH_PYTHON_SECURITY) # some distrobutions see this as a security issue, rather than have them patch it, make a build option. 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) option(WITH_PYTHON_MODULE "Enable building as a python module (experemental, only enable for development)" OFF) @@ -116,6 +103,13 @@ option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke and audio effect option(WITH_BULLET "Enable Bullet (Physics Engine)" ON) option(WITH_GAMEENGINE "Enable Game Engine" ON) option(WITH_PLAYER "Build Player" OFF) + +option(WITH_AUDASPACE "Build with blenders audio library" ON) +mark_as_advanced(WITH_AUDASPACE) + +option(WITH_HEADLESS "Build without graphical support (renderfarm, server mode only)" OFF) +mark_as_advanced(WITH_HEADLESS) + # (unix defaults to OpenMP On) if(UNIX AND NOT APPLE) option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ON) @@ -202,12 +196,15 @@ if(APPLE) option(WITH_LIBS10.5 "Use 10.5 libs (needed for 64bit builds)" OFF) endif() +#----------------------------------------------------------------------------- +# Check for conflicting/unsupported configurations + if(NOT WITH_GAMEENGINE AND WITH_PLAYER) message(FATAL_ERROR "WITH_PLAYER requires WITH_GAMEENGINE") endif() -if(NOT WITH_SAMPLERATE AND (WITH_OPENAL OR WITH_SDL OR WITH_JACK)) - message(FATAL_ERROR "WITH_OPENAL/WITH_SDL/WITH_JACK require WITH_SAMPLERATE") +if(NOT WITH_AUDASPACE AND (WITH_OPENAL OR WITH_SDL OR WITH_JACK)) + message(FATAL_ERROR "WITH_OPENAL/WITH_SDL/WITH_JACK/WITH_CODEC_FFMPEG require WITH_AUDASPACE") endif() if(NOT WITH_IMAGE_OPENJPEG AND WITH_IMAGE_REDCODE) @@ -223,8 +220,16 @@ if(WITH_PYTHON_MODULE AND WITH_PYTHON_INSTALL) message(FATAL_ERROR "WITH_PYTHON_MODULE requires WITH_PYTHON_INSTALL to be OFF") endif() -# remove old vars -unset(WITH_INSTALL CACHE) +if(WITH_CODEC_QUICKTIME AND MINGW) + message(FATAL_ERROR "MINGW requires WITH_CODEC_QUICKTIME to be OFF " + "because it is currently unsupported, remove this " + "line if youre a developer who wants to add support.") +endif() + +# may as well build python module without a UI +if(WITH_PYTHON_MODULE) + set(WITH_HEADLESS ON) +endif() TEST_SSE_SUPPORT() @@ -234,6 +239,9 @@ TEST_SSE_SUPPORT() # linux only, not cached set(WITH_BINRELOC OFF) +# MAXOSX only, set to avoid uninitialized +set(EXETYPE "") + # these are added to later on. set(C_WARNINGS "") set(CXX_WARNINGS "") @@ -246,13 +254,12 @@ set(CXX_WARNINGS "") # On Unix: # cmake ../blender \ # -D PYTHON_VERSION=3.2 \ -# -D PYTHON_INCLUDE_DIRS=/opt/py32/include/python3.2d \ -# -D PYTHON_LIBPATH=/opt/py32/lib \ -# -D PYTHON_LIBRARY=python3.2d +# -D PYTHON_INCLUDE_DIR=/opt/py32/include/python3.2d \ +# -D PYTHON_LIBRARY=/opt/py32/lib/libpython3.2d.so # # On Macs: # cmake ../blender \ -# -D PYTHON_INCLUDE_DIRS=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \ +# -D PYTHON_INCLUDE_DIR=/System/Library/Frameworks/Python.framework/Versions/3.2/include/python3.2 \ # -D PYTHON_LIBPATH=/System/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/config \ # -G Xcode # @@ -268,6 +275,43 @@ if(UNIX AND NOT APPLE) set(CMAKE_LIBRARY_PATH "/usr/lib/x86_64-linux-gnu;${CMAKE_LIBRARY_PATH}") endif() + find_package(JPEG REQUIRED) + find_package(PNG REQUIRED) + find_package(ZLIB REQUIRED) + find_package(Freetype REQUIRED) + + if(WITH_PYTHON) + # No way to set py32. remove for now. + # find_package(PythonLibs) + + # Use our own instead, since wothout py is such a rare case, + # require this package + find_package(PythonLibsUnix REQUIRED) + endif() + + + if(WITH_IMAGE_OPENEXR) + find_package(OpenEXR) # our own module + if(NOT OPENEXR_FOUND) + set(WITH_IMAGE_OPENEXR OFF) + endif() + endif() + + if(WITH_IMAGE_OPENJPEG) + find_package(OpenJPEG) + if(NOT OPENJPEG_FOUND) + set(WITH_IMAGE_OPENJPEG OFF) + endif() + endif() + + if(WITH_IMAGE_TIFF) + find_package(TIFF) + if(NOT TIFF_FOUND) + set(WITH_IMAGE_TIFF OFF) + endif() + endif() + + # Audio IO if(WITH_OPENAL) find_package(OpenAL) if(NOT OPENAL_FOUND) @@ -275,18 +319,41 @@ if(UNIX AND NOT APPLE) endif() endif() - if(WITH_JACK) - set(JACK /usr) - set(JACK_INC ${JACK}/include/jack) - set(JACK_LIB jack) - set(JACK_LIBPATH ${JACK}/lib) + if(WITH_SDL) + find_package(SDL) + mark_as_advanced(SDLMAIN_LIBRARY) + mark_as_advanced(SDL_INCLUDE_DIR) + mark_as_advanced(SDL_LIBRARY) + mark_as_advanced(SDL_LIBRARY_TEMP) + # unset(SDLMAIN_LIBRARY CACHE) + if(NOT SDL_FOUND) + set(WITH_SDL OFF) + endif() endif() + if(WITH_JACK) + find_package(Jack) + if(NOT JACK_FOUND) + set(WITH_JACK OFF) + endif() + endif() + + # Codecs if(WITH_CODEC_SNDFILE) - set(SNDFILE /usr) - set(SNDFILE_INC ${SNDFILE}/include) - set(SNDFILE_LIB sndfile) - set(SNDFILE_LIBPATH ${SNDFILE}/lib) + find_package(SndFile) + if(NOT SNDFILE_FOUND) + set(WITH_CODEC_SNDFILE OFF) + endif() + endif() + + if(WITH_CODEC_FFMPEG) + set(FFMPEG /usr CACHE FILEPATH "FFMPEG Directory") + mark_as_advanced(FFMPEG) + set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include) + set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries") + mark_as_advanced(FFMPEG_LIBRARIES) + set(FFMPEG_LIBPATH ${FFMPEG}/lib) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS") endif() if(WITH_INTERNATIONAL) @@ -309,103 +376,26 @@ if(UNIX AND NOT APPLE) endif() endif() - find_package(Freetype) - # unset(FREETYPE_INCLUDE_DIRS CACHE) # cant use - - - if(WITH_PYTHON) - # No way to set py32. remove for now. - # find_package(PythonLibs) - - # defines... - - # PYTHON_VERSION - # PYTHON_INCLUDE_DIRS - # PYTHON_LIBRARY - # PYTHON_LIBPATH - # PYTHON_LINKFLAGS - - include(build_files/cmake/FindPythonLibsUnix.cmake) - - endif() - - if(WITH_SDL) - find_package(SDL) - mark_as_advanced(SDLMAIN_LIBRARY) - mark_as_advanced(SDL_INCLUDE_DIR) - mark_as_advanced(SDL_LIBRARY) - mark_as_advanced(SDL_LIBRARY_TEMP) - # unset(SDLMAIN_LIBRARY CACHE) - if(NOT SDL_FOUND) - set(WITH_SDL OFF) - endif() - endif() - - if(WITH_IMAGE_OPENEXR) - set(OPENEXR /usr CACHE FILEPATH "OPENEXR Directory") - mark_as_advanced(OPENEXR) - find_path(OPENEXR_INC - ImfXdr.h - PATHS - ${OPENEXR}/include/OpenEXR - /usr/local/include/OpenEXR - /sw/include/OpenEXR - /opt/local/include/OpenEXR - /opt/csw/include/OpenEXR - /opt/include/OpenEXR - ) - mark_as_advanced(OPENEXR_INC) - - set(OPENEXR_LIB Half IlmImf Iex Imath) - - if(NOT OPENEXR_INC) - set(WITH_IMAGE_OPENEXR OFF) - endif() - endif() - - if(WITH_IMAGE_TIFF) - find_package(TIFF) - if(NOT TIFF_FOUND) - set(WITH_IMAGE_TIFF OFF) - endif() - endif() - - find_package(JPEG REQUIRED) - - find_package(PNG REQUIRED) - - find_package(ZLIB REQUIRED) - - if(WITH_CODEC_FFMPEG) - set(FFMPEG /usr CACHE FILEPATH "FFMPEG Directory") - mark_as_advanced(FFMPEG) - set(FFMPEG_INC ${FFMPEG}/include) - set(FFMPEG_LIB avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries") - mark_as_advanced(FFMPEG_LIB) - set(FFMPEG_LIBPATH ${FFMPEG}/lib) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS") - endif() - if(WITH_FFTW3) - set(FFTW3 /usr) - set(FFTW3_INC ${FFTW3}/include) - set(FFTW3_LIB fftw3) - set(FFTW3_LIBPATH ${FFTW3}/lib) + find_package(Fftw3) + if(NOT FFTW3_FOUND) + set(WITH_FFTW3 OFF) + endif() endif() if(WITH_SAMPLERATE) - set(LIBSAMPLERATE /usr) - set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include) - set(LIBSAMPLERATE_LIB samplerate) - set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib) + find_package(Samplerate) + if(NOT SAMPLERATE_FOUND) + set(WITH_SAMPLERATE OFF) + endif() endif() if(WITH_OPENCOLLADA) set(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory") mark_as_advanced(OPENCOLLADA) set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib) - set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2) - set(OPENCOLLADA_INC ${OPENCOLLADA}) + set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2) + set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}) set(PCRE /usr CACHE FILEPATH "PCRE Directory") mark_as_advanced(PCRE) @@ -419,33 +409,33 @@ if(UNIX AND NOT APPLE) endif() if(WITH_MEM_JEMALLOC) - set(JEMALLOC /usr) - set(JEMALLOC_LIBRARY jemalloc CACHE STRING "JeMalloc library") - set(JEMALLOC_LIBPATH ${JEMALLOC}/lib CACHE FILEPATH "JeMalloc library path") - # no use for this yet. - # set(JEMALLOC_INCLUDE_DIR ${JEMALLOC}/include CACHE FILEPATH "JeMalloc include path") - unset(JEMALLOC) + find_package(JeMalloc) + if(NOT JEMALLOC_FOUND) + set(WITH_MEM_JEMALLOC OFF) + endif() endif() - find_package(X11 REQUIRED) - find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH}) - mark_as_advanced(X11_XF86keysym_INCLUDE_PATH) - # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed - set(LLIBS "-lutil -lc -lm -lpthread -lstdc++ ${X11_X11_LIB}") + set(LLIBS "-lutil -lc -lm -lpthread -lstdc++") - if(WITH_X11_XINPUT) - list(APPEND LLIBS ${X11_Xinput_LIB}) + if(NOT WITH_HEADLESS) + find_package(X11 REQUIRED) + find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH}) + mark_as_advanced(X11_XF86keysym_INCLUDE_PATH) + + list(APPEND LLIBS ${X11_X11_LIB}) + + if(WITH_X11_XINPUT) + list(APPEND LLIBS ${X11_Xinput_LIB}) + endif() endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") if(NOT WITH_PYTHON_MODULE) # BSD's dont use libdl.so list(APPEND LLIBS -ldl) - # binreloc is linux only - set(BINRELOC ${CMAKE_SOURCE_DIR}/extern/binreloc) - set(BINRELOC_INC ${BINRELOC}/include) + set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include) set(WITH_BINRELOC ON) endif() endif() @@ -498,16 +488,16 @@ elseif(WIN32) if(WITH_INTERNATIONAL) set(ICONV ${LIBDIR}/iconv) - set(ICONV_INC ${ICONV}/include) - set(ICONV_LIB iconv) + set(ICONV_INCLUDE_DIRS ${ICONV}/include) + set(ICONV_LIBRARIES iconv) set(ICONV_LIBPATH ${ICONV}/lib) endif() if(WITH_SAMPLERATE) - set(LIBSAMPLERATE ${LIBDIR}/samplerate) - set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include) - set(LIBSAMPLERATE_LIB libsamplerate) - set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib) + set(SAMPLERATE ${LIBDIR}/samplerate) + set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include) + set(SAMPLERATE_LIBRARIES libsamplerate) + set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib) endif() set(PNG "${LIBDIR}/png") @@ -529,9 +519,9 @@ elseif(WIN32) if(WITH_CODEC_SNDFILE) set(SNDFILE ${LIBDIR}/sndfile) - set(SNDFILE_INC ${SNDFILE}/include) - set(SNDFILE_LIB libsndfile-1) - set(SNDFILE_LIBPATH ${SNDFILE}/lib) + set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include) + set(SNDFILE_LIBRARIES libsndfile-1) + set(SNDFILE_LIBPATH ${SNDFILE}/lib) # TODO, deprecate endif() if(WITH_SDL) @@ -543,8 +533,8 @@ elseif(WIN32) if(WITH_CODEC_QUICKTIME) set(QUICKTIME ${LIBDIR}/QTDevWin) - set(QUICKTIME_INC ${QUICKTIME}/CIncludes) - set(QUICKTIME_LIB qtmlClient) + set(QUICKTIME_INCLUDE_DIRS ${QUICKTIME}/CIncludes) + set(QUICKTIME_LIBRARIES qtmlClient) set(QUICKTIME_LIBPATH ${QUICKTIME}/Libraries) endif() @@ -607,9 +597,9 @@ elseif(WIN32) endif() set(PTHREADS ${LIBDIR}/pthreads) - set(PTHREADS_INC ${PTHREADS}/include) + set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include) set(PTHREADS_LIBPATH ${PTHREADS}/lib) - set(PTHREADS_LIB pthreadVC2) + set(PTHREADS_LIBRARIES pthreadVC2) set(FREETYPE ${LIBDIR}/freetype) set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2) @@ -618,31 +608,41 @@ elseif(WIN32) if(WITH_FFTW3) set(FFTW3 ${LIBDIR}/fftw3) - set(FFTW3_LIB libfftw) - set(FFTW3_INC ${FFTW3}/include) + set(FFTW3_LIBRARIES libfftw) + set(FFTW3_INCLUDE_DIRS ${FFTW3}/include) set(FFTW3_LIBPATH ${FFTW3}/lib) endif() if(WITH_OPENCOLLADA) - set(OPENCOLLADA ${LIBDIR}/opencollada) - set(OPENCOLLADA_INC ${OPENCOLLADA}/include) - set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib) - set(OPENCOLLADA_LIB OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils OpenCOLLADAStreamWriter MathMLSolver GeneratedSaxParser xml2 buffer ftoa UTF) - set(PCRE_LIB pcre) + set(OPENCOLLADA_INCLUDE_DIR + ${LIBDIR}/opencollada/include + ) + set(OPENCOLLADA_LIBRARIES + ${LIBDIR}/opencollada/lib/OpenCOLLADASaxFrameworkLoader.lib + ${LIBDIR}/opencollada/lib/OpenCOLLADAFramework.lib + ${LIBDIR}/opencollada/lib/OpenCOLLADABaseUtils.lib + ${LIBDIR}/opencollada/lib/OpenCOLLADAStreamWriter.lib + ${LIBDIR}/opencollada/lib/MathMLSolver.lib + ${LIBDIR}/opencollada/lib/GeneratedSaxParser.lib + ${LIBDIR}/opencollada/lib/xml2.lib + ${LIBDIR}/opencollada/lib/buffer.lib + ${LIBDIR}/opencollada/lib/ftoa.lib + ${LIBDIR}/opencollada/lib/UTF.lib + ) + set(PCRE_LIB + ${LIBDIR}/opencollada/lib/pcre.lib + ) endif() - + if(WITH_CODEC_FFMPEG) set(FFMPEG ${LIBDIR}/ffmpeg) - set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include/msvc) - set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0) + set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include/msvc) + set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0) set(FFMPEG_LIBPATH ${FFMPEG}/lib) endif() if(WITH_IMAGE_OPENEXR) - if(MSVC80) - set(MSVC_LIB _vs2005) - set(MSVC_INC) - elseif(MSVC90) + if(MSVC90) set(MSVC_LIB _vs2008) set(MSVC_INC) elseif(MSVC10) @@ -652,11 +652,24 @@ elseif(WIN32) set(MSVC_LIB msvc) set(MSVC_INC) endif() - set(OPENEXR ${LIBDIR}/openexr) - set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread) + set(OPENEXR ${LIBDIR}/openexr) set(OPENEXR_LIBPATH ${OPENEXR}/lib${MSVC_LIB}) + set(OPENEXR_LIBRARIES + ${OPENEXR_LIBPATH}/Iex.lib + ${OPENEXR_LIBPATH}/Half.lib + ${OPENEXR_LIBPATH}/IlmImf.lib + ${OPENEXR_LIBPATH}/Imath.lib + ${OPENEXR_LIBPATH}/IlmThread.lib + ) set(OPENEXR_INCUDE ${OPENEXR}/include${MSVC_INC}) - set(OPENEXR_INC ${OPENEXR_INCUDE}/ ${OPENEXR_INCUDE}/IlmImf ${OPENEXR_INCUDE}/Iex ${OPENEXR_INCUDE}/Imath) + set(OPENEXR_INCLUDE_DIRS + ${OPENEXR_INCUDE} + ${OPENEXR_INCUDE}/IlmImf + ${OPENEXR_INCUDE}/Iex + ${OPENEXR_INCUDE}/Imath + ) + unset(OPENEXR_INCUDE) + unset(OPENEXR_LIBPATH) endif() if(WITH_IMAGE_TIFF) @@ -668,18 +681,16 @@ elseif(WIN32) if(WITH_JACK) set(JACK ${LIBDIR}/jack) - set(JACK_INC ${JACK}/include/jack ${JACK}/include) - set(JACK_LIB libjack) + set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include) + set(JACK_LIBRARIES libjack) set(JACK_LIBPATH ${JACK}/lib) endif() if(WITH_PYTHON) - set(PYTHON ${LIBDIR}/python) set(PYTHON_VERSION 3.2) - set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}") + set(PYTHON_INCLUDE_DIRS "${LIBDIR}/python/include/python${PYTHON_VERSION}") # set(PYTHON_BINARY python) # not used yet - set(PYTHON_LIBRARY python32) - set(PYTHON_LIBPATH ${PYTHON}/lib) + set(PYTHON_LIBRARIES ${LIBDIR}/python/lib/python32.lib) endif() # MSVC only, Mingw doesnt need @@ -722,9 +733,9 @@ elseif(WIN32) set(ZLIB_LIBRARIES z) set(PTHREADS ${LIBDIR}/pthreads) - set(PTHREADS_INC ${PTHREADS}/include) + set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include) set(PTHREADS_LIBPATH ${PTHREADS}/lib) - set(PTHREADS_LIB pthreadGC2) + set(PTHREADS_LIBRARIES pthreadGC2) set(FREETYPE ${LIBDIR}/gcc/freetype) set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2) @@ -733,30 +744,30 @@ elseif(WIN32) if(WITH_FFTW3) set(FFTW3 ${LIBDIR}/gcc/fftw3) - set(FFTW3_LIB fftw3) - set(FFTW3_INC ${FFTW3}/include) + set(FFTW3_LIBRARIES fftw3) + set(FFTW3_INCLUDE_DIRS ${FFTW3}/include) set(FFTW3_LIBPATH ${FFTW3}/lib) endif() if(WITH_OPENCOLLADA) set(OPENCOLLADA ${LIBDIR}/gcc/opencollada) - set(OPENCOLLADA_INC ${OPENCOLLADA}/include) + set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include) set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib ${OPENCOLLADA}/lib) - set(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa) + set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver expat pcre buffer ftoa) set(PCRE_LIB pcre) endif() if(WITH_CODEC_FFMPEG) set(FFMPEG ${LIBDIR}/ffmpeg) - set(FFMPEG_INC ${FFMPEG}/include ${FFMPEG}/include) - set(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0) + set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include ${FFMPEG}/include) + set(FFMPEG_LIBRARIES avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0) set(FFMPEG_LIBPATH ${FFMPEG}/lib) endif() if(WITH_IMAGE_OPENEXR) set(OPENEXR ${LIBDIR}/gcc/openexr) - set(OPENEXR_INC ${OPENEXR}/include ${OPENEXR}/include/OpenEXR) - set(OPENEXR_LIB Half IlmImf Imath IlmThread) + set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR) + set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread) set(OPENEXR_LIBPATH ${OPENEXR}/lib) # TODO, gives linking errors, force off @@ -772,8 +783,8 @@ elseif(WIN32) if(WITH_JACK) set(JACK ${LIBDIR}/jack) - set(JACK_INC ${JACK}/include/jack ${JACK}/include) - set(JACK_LIB jack) + set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include) + set(JACK_LIBRARIES jack) set(JACK_LIBPATH ${JACK}/lib) # TODO, gives linking errors, force off @@ -785,7 +796,7 @@ elseif(WIN32) set(PYTHON_VERSION 3.2) set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}") # set(PYTHON_BINARY python) # not used yet - set(PYTHON_LIBRARY python32mw) + set(PYTHON_LIBRARIES ${PYTHON}/lib/python32mw.lib) set(PYTHON_LIBPATH ${PYTHON}/lib) endif() @@ -794,7 +805,7 @@ elseif(WIN32) endif() # used in many places so include globally, like OpenGL - blender_include_dirs("${PTHREADS_INC}") + blender_include_dirs("${PTHREADS_INCLUDE_DIRS}") elseif(APPLE) @@ -825,16 +836,16 @@ elseif(APPLE) if(WITH_JACK) set(JACK /usr) - set(JACK_INC ${JACK}/include/jack) - set(JACK_LIB jack) + set(JACK_INCLUDE_DIRS ${JACK}/include/jack) + set(JACK_LIBRARIES jack) set(JACK_LIBPATH ${JACK}/lib) endif() if(WITH_CODEC_SNDFILE) set(SNDFILE ${LIBDIR}/sndfile) - set(SNDFILE_INC ${SNDFILE}/include) - set(SNDFILE_LIB sndfile FLAC ogg vorbis vorbisenc) - set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) + set(SNDFILE_INCLUDE_DIRS ${SNDFILE}/include) + set(SNDFILE_LIBRARIES sndfile FLAC ogg vorbis vorbisenc) + set(SNDFILE_LIBPATH ${SNDFILE}/lib ${FFMPEG}/lib) # TODO, deprecate endif() set(PYTHON_VERSION 3.2) @@ -845,7 +856,7 @@ elseif(APPLE) set(PYTHON ${LIBDIR}/python) set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}") # set(PYTHON_BINARY "${PYTHON}/bin/python${PYTHON_VERSION}") # not used yet - set(PYTHON_LIBRARY python${PYTHON_VERSION}) + set(PYTHON_LIBRARIES python${PYTHON_VERSION}) set(PYTHON_LIBPATH "${PYTHON}/lib/python${PYTHON_VERSION}") # set(PYTHON_LINKFLAGS "-u _PyMac_Error") # won't build with this enabled else() @@ -855,7 +866,7 @@ elseif(APPLE) set(PYTHON_VERSION 3.2) set(PYTHON_INCLUDE_DIRS "${PYTHON}${PYTHON_VERSION}/include/python${PYTHON_VERSION}") # set(PYTHON_BINARY ${PYTHON}${PYTHON_VERSION}/bin/python${PYTHON_VERSION}) # not used yet - set(PYTHON_LIBRARY "") + set(PYTHON_LIBRARIES "") set(PYTHON_LIBPATH ${PYTHON}${PYTHON_VERSION}/lib/python${PYTHON_VERSION}/config) set(PYTHON_LINKFLAGS "-u _PyMac_Error -framework System -framework Python") endif() @@ -869,8 +880,8 @@ elseif(APPLE) if(WITH_FFTW3) set(FFTW3 ${LIBDIR}/fftw3) - set(FFTW3_INC ${FFTW3}/include) - set(FFTW3_LIB fftw3) + set(FFTW3_INCLUDE_DIRS ${FFTW3}/include) + set(FFTW3_LIBRARIES fftw3) set(FFTW3_LIBPATH ${FFTW3}/lib) endif() @@ -888,24 +899,24 @@ elseif(APPLE) if(WITH_IMAGE_OPENEXR) set(OPENEXR ${LIBDIR}/openexr) - set(OPENEXR_INC ${OPENEXR}/include/OpenEXR ${OPENEXR}/include) - set(OPENEXR_LIB Iex Half IlmImf Imath IlmThread) + set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR) + set(OPENEXR_LIBRARIES Iex Half IlmImf Imath IlmThread) set(OPENEXR_LIBPATH ${OPENEXR}/lib) endif() if(WITH_CODEC_FFMPEG) set(FFMPEG ${LIBDIR}/ffmpeg) - set(FFMPEG_INC ${FFMPEG}/include) - set(FFMPEG_LIB avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg) + set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include) + set(FFMPEG_LIBRARIES avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg) set(FFMPEG_LIBPATH ${FFMPEG}/lib) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_CONSTANT_MACROS") endif() if(WITH_SAMPLERATE) - set(LIBSAMPLERATE ${LIBDIR}/samplerate) - set(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include) - set(LIBSAMPLERATE_LIB samplerate) - set(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib) + set(SAMPLERATE ${LIBDIR}/samplerate) + set(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE}/include) + set(SAMPLERATE_LIBRARIES samplerate) + set(SAMPLERATE_LIBPATH ${SAMPLERATE}/lib) endif() set(LLIBS stdc++ SystemStubs) @@ -930,9 +941,9 @@ elseif(APPLE) if(WITH_OPENCOLLADA) set(OPENCOLLADA ${LIBDIR}/opencollada) - set(OPENCOLLADA_INC ${OPENCOLLADA}/include) + set(OPENCOLLADA_INCLUDE_DIR ${OPENCOLLADA}/include) set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib) - set(OPENCOLLADA_LIB "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" ) + set(OPENCOLLADA_LIBRARIES "OpenCOLLADASaxFrameworkLoader -lOpenCOLLADAFramework -lOpenCOLLADABaseUtils -lOpenCOLLADAStreamWriter -lMathMLSolver -lGeneratedSaxParser -lUTF -lxml2 -lbuffer -lftoa" ) #pcre is bundled with openCollada #set(PCRE ${LIBDIR}/pcre) #set(PCRE_LIBPATH ${PCRE}/lib) @@ -984,6 +995,12 @@ endif() #----------------------------------------------------------------------------- # Common. +if(APPLE OR WIN32) + if(NOT IS_DIRECTORY "${LIBDIR}") + message(FATAL_ERROR "Apple and Windows require pre-compiled libs at: '${LIBDIR}'") + endif() +endif() + if(WITH_RAYOPTIMIZATION) if(CMAKE_COMPILER_IS_GNUCC) if(SUPPORT_SSE_BUILD) @@ -1002,13 +1019,9 @@ endif() if(WITH_IMAGE_OPENJPEG) if(UNIX AND NOT APPLE) - set(OPENJPEG /usr) - set(OPENJPEG_INC ${OPENJPEG}/include) - set(OPENJPEG_LIB openjpeg) - set(OPENJPEG_LIBPATH ${OPENJPEG}/lib) + # dealt with above else() - set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg) - set(OPENJPEG_INC ${OPENJPEG}) + set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg") endif() endif() @@ -1031,7 +1044,7 @@ endif() #----------------------------------------------------------------------------- # Configure OpenGL. find_package(OpenGL) -blender_include_dirs("${OPENGL_INCLUDE_DIR}") +blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}") # unset(OPENGL_LIBRARIES CACHE) # not compat with older cmake # unset(OPENGL_xmesa_INCLUDE_DIR CACHE) # not compat with older cmake @@ -1144,9 +1157,9 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PLATFORM_CFLAGS} ${CXX_WARNINGS}") #------------------------------------------------------------------------------- # Global Defines -# better not define flags here but this is a debugging option thats off by default. +# better not set includes here but this debugging option is off by default. if(WITH_CXX_GUARDEDALLOC) - set(CMAKE_CXX_FLAGS " -DWITH_CXX_GUARDEDALLOC -I${CMAKE_SOURCE_DIR}/intern/guardedalloc ${CMAKE_CXX_FLAGS}") + include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc) endif() if(WITH_ASSERT_ABORT) @@ -1178,3 +1191,83 @@ endif() #----------------------------------------------------------------------------- # CPack for generating packages include(build_files/cmake/packaging.cmake) + + +#----------------------------------------------------------------------------- +# Print Final Configuration + +if(FIRST_RUN) + set(_config_msg "\n* Blender Configuration *") + macro(info_cfg_option + _setting) + set(_msg " * ${_setting}") + string(LENGTH "${_msg}" _len) + while("28" GREATER "${_len}") + set(_msg "${_msg} ") + math(EXPR _len "${_len} + 1") + endwhile() + + set(_config_msg "${_config_msg}\n${_msg}${${_setting}}") + endmacro() + + macro(info_cfg_text + _text) + set(_config_msg "${_config_msg}\n\n ${_text}") + + + endmacro() + + info_cfg_text("Build Options:") + info_cfg_option(WITH_GAMEENGINE) + info_cfg_option(WITH_PLAYER) + info_cfg_option(WITH_BULLET) + info_cfg_option(WITH_IK_ITASC) + info_cfg_option(WITH_OPENCOLLADA) + info_cfg_option(WITH_FFTW3) + info_cfg_option(WITH_INTERNATIONAL) + + info_cfg_text("Compiler Options:") + info_cfg_option(WITH_BUILDINFO) + info_cfg_option(WITH_OPENMP) + info_cfg_option(WITH_RAYOPTIMIZATION) + + info_cfg_text("System Options:") + info_cfg_option(WITH_INSTALL_PORTABLE) + info_cfg_option(WITH_X11_XINPUT) + info_cfg_option(WITH_BUILTIN_GLEW) + + info_cfg_text("Image Formats:") + info_cfg_option(WITH_IMAGE_CINEON) + info_cfg_option(WITH_IMAGE_DDS) + info_cfg_option(WITH_IMAGE_HDR) + info_cfg_option(WITH_IMAGE_OPENEXR) + info_cfg_option(WITH_IMAGE_OPENJPEG) + info_cfg_option(WITH_IMAGE_REDCODE) + info_cfg_option(WITH_IMAGE_TIFF) + + info_cfg_text("Audio:") + info_cfg_option(WITH_OPENAL) + info_cfg_option(WITH_SDL) + info_cfg_option(WITH_JACK) + info_cfg_option(WITH_CODEC_FFMPEG) + info_cfg_option(WITH_CODEC_SNDFILE) + info_cfg_option(WITH_SAMPLERATE) + + info_cfg_text("Compression:") + info_cfg_option(WITH_LZMA) + info_cfg_option(WITH_LZO) + + info_cfg_text("Python:") + info_cfg_option(WITH_PYTHON_INSTALL) + info_cfg_option(WITH_PYTHON_MODULE) + info_cfg_option(WITH_PYTHON_SAFETY) + + info_cfg_text("Modifiers:") + info_cfg_option(WITH_MOD_BOOLEAN) + info_cfg_option(WITH_MOD_DECIMATE) + info_cfg_option(WITH_MOD_FLUID) + + info_cfg_text("") + + message("${_config_msg}") +endif() diff --git a/GNUmakefile b/GNUmakefile index 008dfe77eae..47073bf5734 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -64,21 +64,19 @@ endif # Build Blender all: - @echo + @echo @echo Configuring Blender ... if test ! -f $(BUILD_DIR)/CMakeCache.txt ; then \ - mkdir -p $(BUILD_DIR) ; \ - cd $(BUILD_DIR) ; \ - cmake $(BLENDER_DIR) -DCMAKE_BUILD_TYPE:STRING=$(BUILD_TYPE) ; \ + cmake -H$(BLENDER_DIR) -B$(BUILD_DIR) -DCMAKE_BUILD_TYPE:STRING=$(BUILD_TYPE) ; \ fi - @echo + @echo @echo Building Blender ... - cd $(BUILD_DIR) ; make -s -j $(NPROCS) install - @echo + make -C $(BUILD_DIR) -s -j $(NPROCS) install + @echo @echo run blender from "$(BUILD_DIR)/bin/blender" - @echo + @echo debug: all # pass @@ -91,7 +89,7 @@ package_pacman: cd build_files/package_spec/pacman ; MAKEFLAGS="-j$(NPROCS)" makepkg --asroot package_archive: - cd $(BUILD_DIR) ; make -s package_archive + make -C $(BUILD_DIR) -s package_archive @echo archive in "$(BUILD_DIR)/release" # forward build targets @@ -109,6 +107,6 @@ test_cmake: @echo "written: test_cmake_consistency.log" clean: - cd $(BUILD_DIR) ; make clean + make -C $(BUILD_DIR) clean .PHONY: all diff --git a/SConstruct b/SConstruct index e928970f6b8..29146018704 100644 --- a/SConstruct +++ b/SConstruct @@ -306,9 +306,10 @@ if env['BF_NO_ELBEEM'] == 1: env['CXXFLAGS'].append('-DDISABLE_ELBEEM') env['CCFLAGS'].append('-DDISABLE_ELBEEM') -if env['WITH_BF_SDL'] == False and env['OURPLATFORM'] in ('win32-vc', 'win32-ming', 'win64-vc'): - env['PLATFORM_LINKFLAGS'].remove('/ENTRY:mainCRTStartup') - env['PLATFORM_LINKFLAGS'].append('/ENTRY:main') +# TODO, make optional +env['CPPFLAGS'].append('-DWITH_AUDASPACE') +env['CXXFLAGS'].append('-DWITH_AUDASPACE') +env['CCFLAGS'].append('-DWITH_AUDASPACE') # lastly we check for root_build_dir ( we should not do before, otherwise we might do wrong builddir B.root_build_dir = env['BF_BUILDDIR'] @@ -409,17 +410,18 @@ if B.arguments.get('BF_PRIORITYLIST', '0')=='1': B.propose_priorities() dobj = B.buildinfo(env, "dynamic") + B.resources +creob = B.creator(env) thestatlibs, thelibincs = B.setup_staticlibs(env) thesyslibs = B.setup_syslibs(env) if 'blender' in B.targets or not env['WITH_BF_NOBLENDER']: - env.BlenderProg(B.root_build_dir, "blender", mainlist + thestatlibs + dobj, thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender') + env.BlenderProg(B.root_build_dir, "blender", creob + mainlist + thestatlibs + dobj, thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blender') if env['WITH_BF_PLAYER']: playerlist = B.create_blender_liblist(env, 'player') playerlist += B.create_blender_liblist(env, 'player2') playerlist += B.create_blender_liblist(env, 'intern') playerlist += B.create_blender_liblist(env, 'extern') - env.BlenderProg(B.root_build_dir, "blenderplayer", playerlist + thestatlibs + dobj, thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer') + env.BlenderProg(B.root_build_dir, "blenderplayer", dobj + playerlist + thestatlibs, thesyslibs, [B.root_build_dir+'/lib'] + thelibincs, 'blenderplayer') ##### Now define some targets diff --git a/build_files/buildbot/master.cfg b/build_files/buildbot/master.cfg index 6913ed2dab0..fd712f1b832 100644 --- a/build_files/buildbot/master.cfg +++ b/build_files/buildbot/master.cfg @@ -53,7 +53,7 @@ c['builders'] = [] buildernames = [] -def add_builder(c, name, libdir, factory): +def add_builder(c, name, libdir, factory, branch=''): slavenames = [] for slave in master_private.slaves: @@ -61,15 +61,18 @@ def add_builder(c, name, libdir, factory): slavenames.append(slave['name']) if len(slavenames) > 0: - f = factory(name, libdir) + f = factory(name, libdir, branch) c['builders'].append(BuilderConfig(name=name, slavenames=slavenames, factory=f, category='blender')) buildernames.append(name) # common steps -def svn_step(): - return SVN(baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/blender', mode='update', defaultBranch='trunk', workdir='blender') +def svn_step(branch=''): + if branch: + return SVN(baseURL='https://svn.blender.org/svnroot/bf-blender/branches/%%BRANCH%%', mode='update', defaultBranch=branch, workdir='blender') + else: + return SVN(baseURL='https://svn.blender.org/svnroot/bf-blender/%%BRANCH%%/blender', mode='update', defaultBranch='trunk', workdir='blender') def lib_svn_step(dir): @@ -78,7 +81,7 @@ def lib_svn_step(dir): # generic builder -def generic_builder(id, libdir=""): +def generic_builder(id, libdir='', branch=''): filename = 'buildbot_upload_' + id + '.zip' compile_script = '../blender/build_files/buildbot/slave_compile.py' test_script = '../blender/build_files/buildbot/slave_test.py' @@ -86,13 +89,13 @@ def generic_builder(id, libdir=""): unpack_script = 'master_unpack.py' f = BuildFactory() - f.addStep(svn_step()) + f.addStep(svn_step(branch)) if libdir != '': f.addStep(lib_svn_step(libdir)) f.addStep(Compile(command=['python', compile_script, id])) f.addStep(Test(command=['python', test_script, id])) - f.addStep(ShellCommand(name='package', command=['python', pack_script, id], description='packaging', descriptionDone='packaged')) + f.addStep(ShellCommand(name='package', command=['python', pack_script, id, branch], description='packaging', descriptionDone='packaged')) if id.find('cmake') != -1: f.addStep(FileUpload(name='upload', slavesrc='buildbot_upload.zip', masterdest=filename, maxsize=100 * 1024 * 1024)) else: @@ -102,12 +105,19 @@ def generic_builder(id, libdir=""): # builders -add_builder(c, 'mac_x86_64_cmake', 'darwin-9.x.universal', generic_builder) -add_builder(c, 'mac_i386_cmake', 'darwin-9.x.universal', generic_builder) -add_builder(c, 'mac_ppc_cmake', 'darwin-9.x.universal', generic_builder) -add_builder(c, 'linux_x86_64_cmake', '', generic_builder) +add_builder(c, 'mac_x86_64_scons', 'darwin-9.x.universal', generic_builder) +add_builder(c, 'salad_mac_x86_64_scons', 'darwin-9.x.universal', generic_builder, 'soc-2011-salad') +add_builder(c, 'mac_i386_scons', 'darwin-9.x.universal', generic_builder) +add_builder(c, 'mac_ppc_scons', 'darwin-9.x.universal', generic_builder) +#add_builder(c, 'linux_x86_64_cmake', '', generic_builder) +add_builder(c, 'linux_i386_scons', '', generic_builder) +add_builder(c, 'salad_linux_i386_scons', '', generic_builder, 'soc-2011-salad') add_builder(c, 'linux_x86_64_scons', '', generic_builder) +add_builder(c, 'salad_linux_x86_64_scons', '', generic_builder, 'soc-2011-salad') add_builder(c, 'win32_scons', 'windows', generic_builder) +add_builder(c, 'salad_win32_scons', 'windows', generic_builder, 'soc-2011-salad') +#add_builder(c, 'freebsd_i386_cmake', '', generic_builder) +#add_builder(c, 'freebsd_x86_64_cmake', '', generic_builder) # SCHEDULERS # @@ -149,7 +159,7 @@ authz_cfg = authz.Authz( pingBuilder=False, stopBuild=False, stopAllBuilds=False, - cancelPendingBuild=False, + cancelPendingBuild=True, ) c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg)) diff --git a/build_files/buildbot/master_unpack.py b/build_files/buildbot/master_unpack.py index 06c11b368b0..ad7c09933c6 100644 --- a/build_files/buildbot/master_unpack.py +++ b/build_files/buildbot/master_unpack.py @@ -43,6 +43,7 @@ def get_platform(filename): # platform out, but there may be some variations, so we fiddle a # bit to handle current and hopefully future names filename = strip_extension(filename) + filename = strip_extension(filename) tokens = filename.split("-") platforms = ('osx', 'mac', 'bsd', @@ -63,6 +64,22 @@ def get_platform(filename): return '-'.join(platform_tokens) + +def get_branch(filename): + tokens = filename.split("-") + branch = "" + + for token in tokens: + if branch == "": + branch = token + else: + branch = branch + "-" + token + + if token == "blender": + return branch + + return "" + # get filename if len(sys.argv) < 2: sys.stderr.write("Not enough arguments, expecting file to unpack\n") @@ -88,8 +105,9 @@ if len(z.namelist()) != 1: package = z.namelist()[0] packagename = os.path.basename(package) -# detect platform +# detect platform and branch platform = get_platform(packagename) +branch = get_branch(packagename) if platform == '': sys.stderr.write('Failed to detect platform ' + @@ -113,10 +131,10 @@ except Exception, ex: sys.stderr.write('Failed to unzip package: %s\n' % str(ex)) sys.exit(1) -# remove other files from the same platform +# remove other files from the same platform and branch try: for f in os.listdir(directory): - if platform.lower() in f.lower(): + if get_platform(f) == platform and get_branch(f) == branch: if f != packagename: os.remove(os.path.join(directory, f)) except Exception, ex: diff --git a/build_files/buildbot/slave_compile.py b/build_files/buildbot/slave_compile.py index 2a1af0578a9..e74d889c243 100644 --- a/build_files/buildbot/slave_compile.py +++ b/build_files/buildbot/slave_compile.py @@ -38,11 +38,11 @@ if builder.find('cmake') != -1: # set build options cmake_options = ['-DCMAKE_BUILD_TYPE:STRING=Release'] - if builder == 'mac_x86_64_cmake': + if builder.endswith('mac_x86_64_cmake'): cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=x86_64') - elif builder == 'mac_i386_cmake': + elif builder.endswith('mac_i386_cmake'): cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=i386') - elif builder == 'mac_ppc_cmake': + elif builder.endswith('mac_ppc_cmake'): cmake_options.append('-DCMAKE_OSX_ARCHITECTURES:STRING=ppc') # configure and make @@ -57,7 +57,7 @@ else: scons_cmd = ['python', 'scons/scons.py'] scons_options = [] - if builder.startswith('linux'): + if builder.find('linux') != -1: import shutil # We're using the same rules as release builder, so tweak @@ -75,10 +75,10 @@ else: config_dir = os.path.join(buildbot_dir, 'config') configs = [] - if builder == 'linux_x86_64_scons': + if builder.endswith('linux_x86_64_scons'): configs = ['user-config-player-x86_64.py', 'user-config-x86_64.py'] - elif builder == 'linux_i386_scons': + elif builder.endswith('linux_i386_scons'): configs = ['user-config-player-i686.py', 'user-config-i686.py'] diff --git a/build_files/buildbot/slave_pack.py b/build_files/buildbot/slave_pack.py index 81402b3aca4..4c19b723fc8 100644 --- a/build_files/buildbot/slave_pack.py +++ b/build_files/buildbot/slave_pack.py @@ -33,13 +33,17 @@ if len(sys.argv) < 2: sys.exit(1) builder = sys.argv[1] +branch = '' + +if len(sys.argv) >= 3: + branch = sys.argv[2] # scons does own packaging if builder.find('scons') != -1: os.chdir('../blender') - scons_options = ['BF_QUICK=slnt', 'buildslave'] + scons_options = ['BF_QUICK=slnt', 'BUILDBOT_BRANCH=' + branch, 'buildslave'] - if builder.startswith('linux'): + if builder.find('linux') != -1: buildbot_dir = os.path.dirname(os.path.realpath(__file__)) config_dir = os.path.join(buildbot_dir, 'config') build_dir = os.path.join('..', 'build', builder) @@ -52,9 +56,9 @@ if builder.find('scons') != -1: config = None - if builder == 'linux_x86_64_scons': + if builder.endswith('linux_x86_64_scons'): config = 'user-config-x86_64.py' - elif builder == 'linux_i386_scons': + elif builder.endswith('linux_i386_scons'): config = 'user-config-x86_64.py' if config is not None: diff --git a/build_files/cmake/FindPythonLibsUnix.cmake b/build_files/cmake/FindPythonLibsUnix.cmake deleted file mode 100644 index 0752de4ce3c..00000000000 --- a/build_files/cmake/FindPythonLibsUnix.cmake +++ /dev/null @@ -1,72 +0,0 @@ -# - Find python libraries -# -# PYTHON_VERSION -# PYTHON_INCLUDE_DIRS -# PYTHON_LIBRARY -# PYTHON_LIBPATH -# PYTHON_LINKFLAGS - -#============================================================================= - -set(PYTHON_VERSION 3.2 CACHE STRING "") -mark_as_advanced(PYTHON_VERSION) - -set(PYTHON_LINKFLAGS "-Xlinker -export-dynamic") -mark_as_advanced(PYTHON_LINKFLAGS) - -set(_Python_ABI_FLAGS - "m;mu;u; ") - -string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) -set(_Python_PATHS - "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" "/opt/py${_PYTHON_VERSION_NO_DOTS}" "/usr" "/usr/local") - -if(NOT DEFINED PYTHON_INCLUDE_DIRS) - message(STATUS "Looking for include Python.h") - set(_Found_PYTHON_H OFF) - - foreach(_CURRENT_PATH ${_Python_PATHS}) - foreach(_CURRENT_ABI_FLAGS ${_Python_ABI_FLAGS}) - if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") - endif() - string(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) - - set(_Python_HEADER "${_CURRENT_PATH}/include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}/Python.h") - - if(EXISTS ${_Python_HEADER}) - message(STATUS "Checking for header: ${_Python_HEADER} - found") - set(_Found_PYTHON_H ON) - set(PYTHON ${_CURRENT_PATH}) - set(PYTHON_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) - break() - else() - message(STATUS "Checking for header: ${_Python_HEADER}") - endif() - endforeach() - - if(_Found_PYTHON_H) - break() - endif() - endforeach() - - if(NOT _Found_PYTHON_H) - message(FATAL_ERROR "Python.h not found") - endif() -endif() - -#============================================================================= -# now the python versions are found - - -set(PYTHON_INCLUDE_DIRS "${PYTHON}/include/python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "") -mark_as_advanced(PYTHON_INCLUDE_DIRS) -set(PYTHON_LIBRARY "python${PYTHON_VERSION}${PYTHON_ABI_FLAGS}" CACHE STRING "") -mark_as_advanced(PYTHON_LIBRARY) -set(PYTHON_LIBPATH ${PYTHON}/lib CACHE STRING "") -mark_as_advanced(PYTHON_LIBPATH) -# set(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") - -if(NOT EXISTS "${PYTHON_INCLUDE_DIRS}/Python.h") - message(FATAL_ERROR " Missing python header: ${PYTHON_INCLUDE_DIRS}/Python.h") -endif() diff --git a/build_files/cmake/Modules/FindFftw3.cmake b/build_files/cmake/Modules/FindFftw3.cmake new file mode 100644 index 00000000000..197d4aab7b6 --- /dev/null +++ b/build_files/cmake/Modules/FindFftw3.cmake @@ -0,0 +1,70 @@ +# - Find Fftw3 library +# Find the native Fftw3 includes and library +# This module defines +# FFTW3_INCLUDE_DIRS, where to find fftw3.h, Set when +# FFTW3_INCLUDE_DIR is found. +# FFTW3_LIBRARIES, libraries to link against to use Fftw3. +# FFTW3_ROOT_DIR, The base directory to search for Fftw3. +# This can also be an environment variable. +# FFTW3_FOUND, If false, do not try to use Fftw3. +# +# also defined, but not for general use are +# FFTW3_LIBRARY, where to find the Fftw3 library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If FFTW3_ROOT_DIR was defined in the environment, use it. +IF(NOT FFTW3_ROOT_DIR AND NOT $ENV{FFTW3_ROOT_DIR} STREQUAL "") + SET(FFTW3_ROOT_DIR $ENV{FFTW3_ROOT_DIR}) +ENDIF() + +SET(_fftw3_SEARCH_DIRS + ${FFTW3_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(FFTW3_INCLUDE_DIR + NAMES + fftw3.h + HINTS + ${_fftw3_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(FFTW3_LIBRARY + NAMES + fftw3 + HINTS + ${_fftw3_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fftw3 DEFAULT_MSG + FFTW3_LIBRARY FFTW3_INCLUDE_DIR) + +IF(FFTW3_FOUND) + SET(FFTW3_LIBRARIES ${FFTW3_LIBRARY}) + SET(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR}) +ENDIF(FFTW3_FOUND) + +MARK_AS_ADVANCED( + FFTW3_INCLUDE_DIR + FFTW3_LIBRARY +) diff --git a/build_files/cmake/Modules/FindJack.cmake b/build_files/cmake/Modules/FindJack.cmake new file mode 100644 index 00000000000..9a847fabf70 --- /dev/null +++ b/build_files/cmake/Modules/FindJack.cmake @@ -0,0 +1,70 @@ +# - Find Jack library +# Find the native Jack includes and library +# This module defines +# JACK_INCLUDE_DIRS, where to find jack.h, Set when +# JACK_INCLUDE_DIR is found. +# JACK_LIBRARIES, libraries to link against to use Jack. +# JACK_ROOT_DIR, The base directory to search for Jack. +# This can also be an environment variable. +# JACK_FOUND, If false, do not try to use Jack. +# +# also defined, but not for general use are +# JACK_LIBRARY, where to find the Jack library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If JACK_ROOT_DIR was defined in the environment, use it. +IF(NOT JACK_ROOT_DIR AND NOT $ENV{JACK_ROOT_DIR} STREQUAL "") + SET(JACK_ROOT_DIR $ENV{JACK_ROOT_DIR}) +ENDIF() + +SET(_jack_SEARCH_DIRS + ${JACK_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(JACK_INCLUDE_DIR + NAMES + jack.h + HINTS + ${_jack_SEARCH_DIRS} + PATH_SUFFIXES + include/jack +) + +FIND_LIBRARY(JACK_LIBRARY + NAMES + jack + HINTS + ${_jack_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set JACK_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jack DEFAULT_MSG + JACK_LIBRARY JACK_INCLUDE_DIR) + +IF(JACK_FOUND) + SET(JACK_LIBRARIES ${JACK_LIBRARY}) + SET(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR}) +ENDIF(JACK_FOUND) + +MARK_AS_ADVANCED( + JACK_INCLUDE_DIR + JACK_LIBRARY +) diff --git a/build_files/cmake/Modules/FindJeMalloc.cmake b/build_files/cmake/Modules/FindJeMalloc.cmake new file mode 100644 index 00000000000..5c7aa2cf1e1 --- /dev/null +++ b/build_files/cmake/Modules/FindJeMalloc.cmake @@ -0,0 +1,70 @@ +# - Find JeMalloc library +# Find the native JeMalloc includes and library +# This module defines +# JEMALLOC_INCLUDE_DIRS, where to find jemalloc.h, Set when +# JEMALLOC_INCLUDE_DIR is found. +# JEMALLOC_LIBRARIES, libraries to link against to use JeMalloc. +# JEMALLOC_ROOT_DIR, The base directory to search for JeMalloc. +# This can also be an environment variable. +# JEMALLOC_FOUND, If false, do not try to use JeMalloc. +# +# also defined, but not for general use are +# JEMALLOC_LIBRARY, where to find the JeMalloc library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If JEMALLOC_ROOT_DIR was defined in the environment, use it. +IF(NOT JEMALLOC_ROOT_DIR AND NOT $ENV{JEMALLOC_ROOT_DIR} STREQUAL "") + SET(JEMALLOC_ROOT_DIR $ENV{JEMALLOC_ROOT_DIR}) +ENDIF() + +SET(_jemalloc_SEARCH_DIRS + ${JEMALLOC_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(JEMALLOC_INCLUDE_DIR + NAMES + jemalloc.h + HINTS + ${_jemalloc_SEARCH_DIRS} + PATH_SUFFIXES + include/jemalloc +) + +FIND_LIBRARY(JEMALLOC_LIBRARY + NAMES + jemalloc + HINTS + ${_jemalloc_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set JEMALLOC_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(JeMalloc DEFAULT_MSG + JEMALLOC_LIBRARY JEMALLOC_INCLUDE_DIR) + +IF(JEMALLOC_FOUND) + SET(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY}) + SET(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR}) +ENDIF(JEMALLOC_FOUND) + +MARK_AS_ADVANCED( + JEMALLOC_INCLUDE_DIR + JEMALLOC_LIBRARY +) diff --git a/build_files/cmake/Modules/FindOpenEXR.cmake b/build_files/cmake/Modules/FindOpenEXR.cmake new file mode 100644 index 00000000000..546f690dbf6 --- /dev/null +++ b/build_files/cmake/Modules/FindOpenEXR.cmake @@ -0,0 +1,92 @@ +# - Find OpenEXR library +# Find the native OpenEXR includes and library +# This module defines +# OPENEXR_INCLUDE_DIRS, where to find ImfXdr.h, etc. Set when +# OPENEXR_INCLUDE_DIR is found. +# OPENEXR_LIBRARIES, libraries to link against to use OpenEXR. +# OPENEXR_ROOT_DIR, The base directory to search for OpenEXR. +# This can also be an environment variable. +# OPENEXR_FOUND, If false, do not try to use OpenEXR. +# +# For indervidual library access these advanced settings are available +# OPENEXR_HALF_LIBRARY, Path to Half library +# OPENEXR_IEX_LIBRARY, Path to Half library +# OPENEXR_ILMIMF_LIBRARY, Path to Ilmimf library +# OPENEXR_ILMTHREAD_LIBRARY, Path to IlmThread library +# OPENEXR_IMATH_LIBRARY, Path to Imath library +# +# also defined, but not for general use are +# OPENEXR_LIBRARY, where to find the OpenEXR library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If OPENEXR_ROOT_DIR was defined in the environment, use it. +IF(NOT OPENEXR_ROOT_DIR AND NOT $ENV{OPENEXR_ROOT_DIR} STREQUAL "") + SET(OPENEXR_ROOT_DIR $ENV{OPENEXR_ROOT_DIR}) +ENDIF() + +SET(_openexr_FIND_COMPONENTS + Half + Iex + IlmImf + IlmThread + Imath +) + +SET(_openexr_SEARCH_DIRS + ${OPENEXR_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(OPENEXR_INCLUDE_DIR + NAMES + ImfXdr.h + HINTS + ${_openexr_SEARCH_DIRS} + PATH_SUFFIXES + include/OpenEXR +) + +SET(_openexr_LIBRARIES) +FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) + + FIND_LIBRARY(OPENEXR_${UPPERCOMPONENT}_LIBRARY + NAMES + ${COMPONENT} + HINTS + ${_openexr_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + LIST(APPEND _openexr_LIBRARIES "${OPENEXR_${UPPERCOMPONENT}_LIBRARY}") +ENDFOREACH() + +# handle the QUIETLY and REQUIRED arguments and set OPENEXR_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR DEFAULT_MSG + _openexr_LIBRARIES OPENEXR_INCLUDE_DIR) + +IF(OPENEXR_FOUND) + SET(OPENEXR_LIBRARIES ${_openexr_LIBRARIES}) + SET(OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR}) +ENDIF() + +MARK_AS_ADVANCED(OPENEXR_INCLUDE_DIR) +FOREACH(COMPONENT ${_openexr_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) + MARK_AS_ADVANCED(OPENEXR_${UPPERCOMPONENT}_LIBRARY) +ENDFOREACH() diff --git a/build_files/cmake/Modules/FindOpenJPEG.cmake b/build_files/cmake/Modules/FindOpenJPEG.cmake new file mode 100644 index 00000000000..8d901ed633c --- /dev/null +++ b/build_files/cmake/Modules/FindOpenJPEG.cmake @@ -0,0 +1,70 @@ +# - Find OpenJPEG library +# Find the native OpenJPEG includes and library +# This module defines +# OPENJPEG_INCLUDE_DIRS, where to find openjpeg.h, Set when +# OPENJPEG_INCLUDE_DIR is found. +# OPENJPEG_LIBRARIES, libraries to link against to use OpenJPEG. +# OPENJPEG_ROOT_DIR, The base directory to search for OpenJPEG. +# This can also be an environment variable. +# OPENJPEG_FOUND, If false, do not try to use OpenJPEG. +# +# also defined, but not for general use are +# OPENJPEG_LIBRARY, where to find the OpenJPEG library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If OPENJPEG_ROOT_DIR was defined in the environment, use it. +IF(NOT OPENJPEG_ROOT_DIR AND NOT $ENV{OPENJPEG_ROOT_DIR} STREQUAL "") + SET(OPENJPEG_ROOT_DIR $ENV{OPENJPEG_ROOT_DIR}) +ENDIF() + +SET(_openjpeg_SEARCH_DIRS + ${OPENJPEG_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(OPENJPEG_INCLUDE_DIR + NAMES + openjpeg.h + HINTS + ${_openjpeg_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(OPENJPEG_LIBRARY + NAMES + openjpeg + HINTS + ${_openjpeg_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set OPENJPEG_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenJPEG DEFAULT_MSG + OPENJPEG_LIBRARY OPENJPEG_INCLUDE_DIR) + +IF(OPENJPEG_FOUND) + SET(OPENJPEG_LIBRARIES ${OPENJPEG_LIBRARY}) + SET(OPENJPEG_INCLUDE_DIRS ${OPENJPEG_INCLUDE_DIR}) +ENDIF(OPENJPEG_FOUND) + +MARK_AS_ADVANCED( + OPENJPEG_INCLUDE_DIR + OPENJPEG_LIBRARY +) diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake new file mode 100644 index 00000000000..882f1e2ea77 --- /dev/null +++ b/build_files/cmake/Modules/FindPythonLibsUnix.cmake @@ -0,0 +1,121 @@ +# - Find Python libraries +# Find the native Python includes and library +# +# Note:, This is not _yet_ intended to be a general python module for other +# projects to use since its hard coded to python 3.2 as blender only supports +# a single python version. +# This is for blender/unix python only. +# +# This module defines +# PYTHON_VERSION +# PYTHON_INCLUDE_DIRS +# PYTHON_LIBRARIES +# PYTHON_LIBPATH, Used for installation +# PYTHON_LINKFLAGS +# PYTHON_ROOT_DIR, The base directory to search for Python. +# This can also be an environment variable. +# +# also defined, but not for general use are +# PYTHON_LIBRARY, where to find the python library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If PYTHON_ROOT_DIR was defined in the environment, use it. +IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "") + SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR}) +ENDIF() + +IF(DEFINED PYTHON_VERSION) + SET(PYTHON_VERSION "${PYTHON_VERSION}" CACHE STRING "") +ELSE() + SET(PYTHON_VERSION 3.2 CACHE STRING "") +ENDIF() +MARK_AS_ADVANCED(PYTHON_VERSION) + +SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic") +MARK_AS_ADVANCED(PYTHON_LINKFLAGS) + +SET(_python_ABI_FLAGS + "m;mu;u; " # release + "md;mud;ud;d" # debug +) + +STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) + +SET(_python_SEARCH_DIRS + ${PYTHON_ROOT_DIR} + "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" + "/opt/py${_PYTHON_VERSION_NO_DOTS}" +) + +FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS}) + #IF(CMAKE_BUILD_TYPE STREQUAL Debug) + # SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") + #ENDIF() + STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) + + FIND_PATH(PYTHON_INCLUDE_DIR + NAMES + Python.h + HINTS + ${_python_SEARCH_DIRS} + PATH_SUFFIXES + include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS} + ) + + FIND_LIBRARY(PYTHON_LIBRARY + NAMES + "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}" + HINTS + ${_python_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + + IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR) + break() + ELSE() + # ensure we dont find values from 2 different ABI versions + UNSET(PYTHON_INCLUDE_DIR CACHE) + UNSET(PYTHON_LIBRARY CACHE) + ENDIF() +ENDFOREACH() + +UNSET(_CURRENT_ABI_FLAGS) +UNSET(_CURRENT_PATH) + +UNSET(_python_ABI_FLAGS) +UNSET(_python_SEARCH_DIRS) + +# handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibsUnix DEFAULT_MSG + PYTHON_LIBRARY PYTHON_INCLUDE_DIR) + + +IF(PYTHONLIBSUNIX_FOUND) + # Assign cache items + SET(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR}) + SET(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) + + # we need this for installation + GET_FILENAME_COMPONENT(PYTHON_LIBPATH ${PYTHON_LIBRARY} PATH) + + # not used + # SET(PYTHON_BINARY ${PYTHON_EXECUTABLE} CACHE STRING "") + + MARK_AS_ADVANCED( + PYTHON_INCLUDE_DIR + PYTHON_LIBRARY + ) +ENDIF() diff --git a/build_files/cmake/Modules/FindSamplerate.cmake b/build_files/cmake/Modules/FindSamplerate.cmake new file mode 100644 index 00000000000..ea7a0d7a18c --- /dev/null +++ b/build_files/cmake/Modules/FindSamplerate.cmake @@ -0,0 +1,70 @@ +# - Find Samplerate library +# Find the native Samplerate includes and library +# This module defines +# SAMPLERATE_INCLUDE_DIRS, where to find samplerate.h, Set when +# SAMPLERATE_INCLUDE_DIR is found. +# SAMPLERATE_LIBRARIES, libraries to link against to use Samplerate. +# SAMPLERATE_ROOT_DIR, The base directory to search for Samplerate. +# This can also be an environment variable. +# SAMPLERATE_FOUND, If false, do not try to use Samplerate. +# +# also defined, but not for general use are +# SAMPLERATE_LIBRARY, where to find the Samplerate library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If SAMPLERATE_ROOT_DIR was defined in the environment, use it. +IF(NOT SAMPLERATE_ROOT_DIR AND NOT $ENV{SAMPLERATE_ROOT_DIR} STREQUAL "") + SET(SAMPLERATE_ROOT_DIR $ENV{SAMPLERATE_ROOT_DIR}) +ENDIF() + +SET(_samplerate_SEARCH_DIRS + ${SAMPLERATE_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(SAMPLERATE_INCLUDE_DIR + NAMES + samplerate.h + HINTS + ${_samplerate_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(SAMPLERATE_LIBRARY + NAMES + samplerate + HINTS + ${_samplerate_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set SAMPLERATE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Samplerate DEFAULT_MSG + SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR) + +IF(SAMPLERATE_FOUND) + SET(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY}) + SET(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR}) +ENDIF(SAMPLERATE_FOUND) + +MARK_AS_ADVANCED( + SAMPLERATE_INCLUDE_DIR + SAMPLERATE_LIBRARY +) diff --git a/build_files/cmake/Modules/FindSndFile.cmake b/build_files/cmake/Modules/FindSndFile.cmake new file mode 100644 index 00000000000..1b685eacfbd --- /dev/null +++ b/build_files/cmake/Modules/FindSndFile.cmake @@ -0,0 +1,68 @@ +# - Find SndFile library +# Find the native SndFile includes and library +# This module defines +# SNDFILE_INCLUDE_DIRS, where to find sndfile.h, Set when +# SNDFILE_INCLUDE_DIR is found. +# SNDFILE_LIBRARIES, libraries to link against to use SndFile. +# SNDFILE_ROOT_DIR, The base directory to search for SndFile. +# This can also be an environment variable. +# SNDFILE_FOUND, If false, do not try to use SndFile. +# +# also defined, but not for general use are +# SNDFILE_LIBRARY, where to find the SndFile library. + +#============================================================================= +# Copyright 2011 Blender Foundation. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If SNDFILE_ROOT_DIR was defined in the environment, use it. +IF(NOT SNDFILE_ROOT_DIR AND NOT $ENV{SNDFILE_ROOT_DIR} STREQUAL "") + SET(SNDFILE_ROOT_DIR $ENV{SNDFILE_ROOT_DIR}) +ENDIF() + +SET(_sndfile_SEARCH_DIRS + ${SNDFILE_ROOT_DIR} + /usr/local + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave +) + +FIND_PATH(SNDFILE_INCLUDE_DIR sndfile.h + HINTS + ${_sndfile_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(SNDFILE_LIBRARY + NAMES + sndfile + HINTS + ${_sndfile_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SndFile DEFAULT_MSG + SNDFILE_LIBRARY SNDFILE_INCLUDE_DIR) + +IF(SNDFILE_FOUND) + SET(SNDFILE_LIBRARIES ${SNDFILE_LIBRARY}) + SET(SNDFILE_INCLUDE_DIRS ${SNDFILE_INCLUDE_DIR}) +ENDIF(SNDFILE_FOUND) + +MARK_AS_ADVANCED( + SNDFILE_INCLUDE_DIR + SNDFILE_LIBRARY +) diff --git a/build_files/cmake/cmake_consistency_check.py b/build_files/cmake/cmake_consistency_check.py index f55b2e95d5e..b0fd242db4a 100755 --- a/build_files/cmake/cmake_consistency_check.py +++ b/build_files/cmake/cmake_consistency_check.py @@ -23,27 +23,16 @@ # -IGNORE = \ - "/test/",\ - "/decimate_glut_test/",\ - "/BSP_GhostTest/",\ - "/release/",\ - "/xembed/",\ - "/decimation/intern/future/",\ - "/TerraplayNetwork/",\ - "/ik_glut_test/" +from cmake_consistency_check_config import IGNORE, UTF8_CHECK, SOURCE_DIR import os from os.path import join, dirname, normpath, abspath, splitext -base = join(os.path.dirname(__file__), "..", "..") -base = normpath(base) -base = abspath(base) - -print("Scanning:", base) +print("Scanning:", SOURCE_DIR) global_h = set() global_c = set() +global_refs = {} def source_list(path, filename_check=None): @@ -104,7 +93,7 @@ def cmake_get_src(f): found = True break - if "list(APPEND SRC" in l: + if "list(APPEND SRC" in l or ('list(APPEND ' in l and l.endswith("SRC")): if l.endswith(")"): raise Exception("strict formatting not kept 'list(APPEND SRC...)' on 1 line %s:%d" % (f, i)) found = True @@ -136,7 +125,9 @@ def cmake_get_src(f): if not l: pass elif l.startswith("$"): - print("Cant use var '%s' %s:%d" % (l, f, i)) + # assume if it ends with SRC we know about it + if not l.split("}")[0].endswith("SRC"): + print("Can't use var '%s' %s:%d" % (l, f, i)) elif len(l.split()) > 1: raise Exception("Multi-line define '%s' %s:%d" % (l, f, i)) else: @@ -144,11 +135,17 @@ def cmake_get_src(f): if is_c_header(new_file): sources_h.append(new_file) + global_refs.setdefault(new_file, []).append((f, i)) elif is_c(new_file): sources_c.append(new_file) + global_refs.setdefault(new_file, []).append((f, i)) elif l in ("PARENT_SCOPE", ): # cmake var, ignore pass + elif new_file.endswith(".list"): + pass + elif new_file.endswith(".def"): + pass else: raise Exception("unknown file type - not c or h %s -> %s" % (f, new_file)) @@ -173,7 +170,7 @@ def cmake_get_src(f): filen.close() -for cmake in source_list(base, is_cmake): +for cmake in source_list(SOURCE_DIR, is_cmake): cmake_get_src(cmake) @@ -183,39 +180,75 @@ def is_ignore(f): return True return False + # First do stupid check, do these files exist? +print("\nChecking for missing references:") +import sys +is_err = False +errs = [] for f in (global_h | global_c): if f.endswith("dna.c"): continue if not os.path.exists(f): - raise Exception("CMake referenced file missing: " + f) + refs = global_refs[f] + if refs: + for cf, i in refs: + errs.append((cf, i)) + else: + raise Exception("CMake referenecs missing, internal error, aborting!") + is_err = True +errs.sort() +errs.reverse() +for cf, i in errs: + print("%s:%d" % (cf, i)) + # Write a 'sed' script, useful if we get a lot of these + # print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf)) + + +if is_err: + raise Exception("CMake referenecs missing files, aborting!") +del is_err +del errs # now check on files not accounted for. print("\nC/C++ Files CMake doesnt know about...") -for cf in sorted(source_list(base, is_c)): +for cf in sorted(source_list(SOURCE_DIR, is_c)): if not is_ignore(cf): if cf not in global_c: print("missing_c: ", cf) + + # check if automake builds a corrasponding .o file. + ''' + if cf in global_c: + out1 = os.path.splitext(cf)[0] + ".o" + out2 = os.path.splitext(cf)[0] + ".Po" + out2_dir, out2_file = out2 = os.path.split(out2) + out2 = os.path.join(out2_dir, ".deps", out2_file) + if not os.path.exists(out1) and not os.path.exists(out2): + print("bad_c: ", cf) + ''' + print("\nC/C++ Headers CMake doesnt know about...") -for hf in sorted(source_list(base, is_c_header)): +for hf in sorted(source_list(SOURCE_DIR, is_c_header)): if not is_ignore(hf): if hf not in global_h: print("missing_h: ", hf) -# test encoding -import traceback -for files in (global_c, global_h): - for f in sorted(files): - if os.path.exists(f): - # ignore outside of our source tree - if "extern" not in f: - i = 1 - try: - for l in open(f, "r", encoding="utf8"): - i += 1 - except: - print("Non utf8: %s:%d" % (f, i)) - if i > 1: - traceback.print_exc() +if UTF8_CHECK: + # test encoding + import traceback + for files in (global_c, global_h): + for f in sorted(files): + if os.path.exists(f): + # ignore outside of our source tree + if "extern" not in f: + i = 1 + try: + for l in open(f, "r", encoding="utf8"): + i += 1 + except: + print("Non utf8: %s:%d" % (f, i)) + if i > 1: + traceback.print_exc() diff --git a/build_files/cmake/cmake_consistency_check_config.py b/build_files/cmake/cmake_consistency_check_config.py new file mode 100644 index 00000000000..60a46d3a1dd --- /dev/null +++ b/build_files/cmake/cmake_consistency_check_config.py @@ -0,0 +1,48 @@ +import os + +IGNORE = ( + "/test/", + "/decimate_glut_test/", + "/BSP_GhostTest/", + "/release/", + "/xembed/", + "/decimation/intern/future/", + "/TerraplayNetwork/", + "/ik_glut_test/", + + # specific source files + "extern/Eigen2/Eigen/src/Cholesky/CholeskyInstantiations.cpp", + "extern/Eigen2/Eigen/src/Core/CoreInstantiations.cpp", + "extern/Eigen2/Eigen/src/QR/QrInstantiations.cpp", + "extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp", + "extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp", + "extern/bullet2/src/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp", + "extern/bullet2/src/BulletCollision/CollisionShapes/btBox2dShape.cpp", + "extern/bullet2/src/BulletCollision/CollisionShapes/btConvex2dShape.cpp", + "extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.cpp", + "extern/bullet2/src/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp", + "extern/bullet2/src/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp", + "extern/eltopo/common/meshes/ObjLoader.cpp", + "extern/eltopo/common/meshes/meshloader.cpp", + "extern/eltopo/common/openglutils.cpp", + "extern/eltopo/eltopo3d/broadphase_blenderbvh.cpp", + "source/blender/imbuf/intern/imbuf_cocoa.m", + + "extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h", + "extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h", + "extern/bullet2/src/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h", + "extern/bullet2/src/BulletCollision/CollisionShapes/btBox2dShape.h", + "extern/bullet2/src/BulletCollision/CollisionShapes/btConvex2dShape.h", + "extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h", + "extern/bullet2/src/BulletDynamics/ConstraintSolver/btHinge2Constraint.h", + "extern/bullet2/src/BulletDynamics/ConstraintSolver/btUniversalConstraint.h", + "extern/eltopo/common/meshes/Edge.hpp", + "extern/eltopo/common/meshes/ObjLoader.hpp", + "extern/eltopo/common/meshes/TriangleIndex.hpp", + "extern/eltopo/common/meshes/meshloader.h", + "extern/eltopo/eltopo3d/broadphase_blenderbvh.h" + ) + +UTF8_CHECK = True + +SOURCE_DIR = os.path.normpath(os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")))) diff --git a/build_files/cmake/cmake_netbeans_project.py b/build_files/cmake/cmake_netbeans_project.py index c8bedb55148..6afca8f3b6a 100755 --- a/build_files/cmake/cmake_netbeans_project.py +++ b/build_files/cmake/cmake_netbeans_project.py @@ -33,7 +33,7 @@ Windows not supported so far from project_info import * import os -from os.path import join, dirname, normpath, abspath, splitext, relpath, exists +from os.path import join, dirname, normpath, relpath, exists def create_nb_project_main(): @@ -50,7 +50,6 @@ def create_nb_project_main(): includes.sort() PROJECT_NAME = "Blender" - FILE_NAME = PROJECT_NAME.lower() # --------------- NB spesific defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines] @@ -76,7 +75,7 @@ def create_nb_project_main(): if not exists(PROJECT_DIR_NB): os.mkdir(PROJECT_DIR_NB) - SOURCE_DIR_REL = relpath(SOURCE_DIR, PROJECT_DIR) + # SOURCE_DIR_REL = relpath(SOURCE_DIR, PROJECT_DIR) f = open(join(PROJECT_DIR_NB, "project.xml"), 'w') diff --git a/build_files/cmake/cmake_qtcreator_project.py b/build_files/cmake/cmake_qtcreator_project.py index e38b2228cca..3de15567727 100755 --- a/build_files/cmake/cmake_qtcreator_project.py +++ b/build_files/cmake/cmake_qtcreator_project.py @@ -34,54 +34,52 @@ example linux usage from project_info import * import os -from os.path import join, dirname, normpath, abspath, splitext, relpath, exists - import sys def create_qtc_project_main(): files = list(source_list(SOURCE_DIR, filename_check=is_project_file)) - files_rel = [relpath(f, start=PROJECT_DIR) for f in files] + files_rel = [os.path.relpath(f, start=PROJECT_DIR) for f in files] files_rel.sort() # --- qtcreator specific, simple format if SIMPLE_PROJECTFILE: # --- qtcreator specific, simple format PROJECT_NAME = "Blender" - f = open(join(PROJECT_DIR, "%s.files" % PROJECT_NAME), 'w') + f = open(os.path.join(PROJECT_DIR, "%s.files" % PROJECT_NAME), 'w') f.write("\n".join(files_rel)) - f = open(join(PROJECT_DIR, "%s.includes" % PROJECT_NAME), 'w') - f.write("\n".join(sorted(list(set(dirname(f) for f in files_rel if is_c_header(f)))))) + f = open(os.path.join(PROJECT_DIR, "%s.includes" % PROJECT_NAME), 'w') + f.write("\n".join(sorted(list(set(os.path.dirname(f) for f in files_rel if is_c_header(f)))))) - qtc_prj = join(PROJECT_DIR, "%s.creator" % PROJECT_NAME) + qtc_prj = os.path.join(PROJECT_DIR, "%s.creator" % PROJECT_NAME) f = open(qtc_prj, 'w') f.write("[General]\n") - qtc_cfg = join(PROJECT_DIR, "%s.config" % PROJECT_NAME) - if not exists(qtc_cfg): + qtc_cfg = os.path.join(PROJECT_DIR, "%s.config" % PROJECT_NAME) + if not os.path.exists(qtc_cfg): f = open(qtc_cfg, 'w') f.write("// ADD PREDEFINED MACROS HERE!\n") else: includes, defines = cmake_advanced_info() # for some reason it doesnt give all internal includes - includes = list(set(includes) | set(dirname(f) for f in files_rel if is_c_header(f))) + includes = list(set(includes) | set(os.path.dirname(f) for f in files_rel if is_c_header(f))) includes.sort() PROJECT_NAME = "Blender" FILE_NAME = PROJECT_NAME.lower() - f = open(join(PROJECT_DIR, "%s.files" % FILE_NAME), 'w') + f = open(os.path.join(PROJECT_DIR, "%s.files" % FILE_NAME), 'w') f.write("\n".join(files_rel)) - f = open(join(PROJECT_DIR, "%s.includes" % FILE_NAME), 'w') + f = open(os.path.join(PROJECT_DIR, "%s.includes" % FILE_NAME), 'w') f.write("\n".join(sorted(includes))) - qtc_prj = join(PROJECT_DIR, "%s.creator" % FILE_NAME) + qtc_prj = os.path.join(PROJECT_DIR, "%s.creator" % FILE_NAME) f = open(qtc_prj, 'w') f.write("[General]\n") - qtc_cfg = join(PROJECT_DIR, "%s.config" % FILE_NAME) + qtc_cfg = os.path.join(PROJECT_DIR, "%s.config" % FILE_NAME) f = open(qtc_cfg, 'w') f.write("// ADD PREDEFINED MACROS HERE!\n") defines_final = [("#define %s %s" % item) for item in defines] @@ -95,21 +93,21 @@ def create_qtc_project_main(): def create_qtc_project_python(): files = list(source_list(SOURCE_DIR, filename_check=is_py)) - files_rel = [relpath(f, start=PROJECT_DIR) for f in files] + files_rel = [os.path.relpath(f, start=PROJECT_DIR) for f in files] files_rel.sort() # --- qtcreator specific, simple format PROJECT_NAME = "Blender_Python" FILE_NAME = PROJECT_NAME.lower() - f = open(join(PROJECT_DIR, "%s.files" % FILE_NAME), 'w') + f = open(os.path.join(PROJECT_DIR, "%s.files" % FILE_NAME), 'w') f.write("\n".join(files_rel)) - qtc_prj = join(PROJECT_DIR, "%s.creator" % FILE_NAME) + qtc_prj = os.path.join(PROJECT_DIR, "%s.creator" % FILE_NAME) f = open(qtc_prj, 'w') f.write("[General]\n") - qtc_cfg = join(PROJECT_DIR, "%s.config" % FILE_NAME) - if not exists(qtc_cfg): + qtc_cfg = os.path.join(PROJECT_DIR, "%s.config" % FILE_NAME) + if not os.path.exists(qtc_cfg): f = open(qtc_cfg, 'w') f.write("// ADD PREDEFINED MACROS HERE!\n") diff --git a/build_files/cmake/example_scripts/cmake_linux_install.sh b/build_files/cmake/example_scripts/cmake_linux_install.sh index 7770efcf392..504218f91a6 100755 --- a/build_files/cmake/example_scripts/cmake_linux_install.sh +++ b/build_files/cmake/example_scripts/cmake_linux_install.sh @@ -17,7 +17,7 @@ cd ~/blender-svn/build-cmake # cmake without copying files for fast rebuilds # the files from svn will be used in place -cmake ../blender -DWITH_INSTALL:BOOL=FALSE +cmake ../blender # make blender, will take some time make diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 14bed8874fa..bb3761d4539 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1,63 +1,127 @@ # -*- mode: cmake; indent-tabs-mode: t; -*- # $Id$ + +# foo_bar.spam --> foo_barMySuffix.spam +macro(file_suffix + file_name_new file_name file_suffix + ) + + get_filename_component(_file_name_PATH ${file_name} PATH) + get_filename_component(_file_name_NAME_WE ${file_name} NAME_WE) + get_filename_component(_file_name_EXT ${file_name} EXT) + set(${file_name_new} "${_file_name_PATH}/${_file_name_NAME_WE}${file_suffix}${_file_name_EXT}") + + unset(_file_name_PATH) + unset(_file_name_NAME_WE) + unset(_file_name_EXT) +endmacro() + +# usefil for adding debug suffix to library lists: +# /somepath/foo.lib --> /somepath/foo_d.lib +macro(file_list_suffix + fp_list_new fp_list fn_suffix + ) + + # incase of empty list + set(_fp) + set(_fp_suffixed) + + set(fp_list_new) + + foreach(_fp ${fp_list}) + file_suffix(_fp_suffixed "${_fp}" "${fn_suffix}") + list(APPEND "${fp_list_new}" "${_fp_suffixed}") + endforeach() + + unset(_fp) + unset(_fp_suffixed) + +endmacro() + # Nicer makefiles with -I/1/foo/ instead of -I/1/2/3/../../foo/ # use it instead of include_directories() macro(blender_include_dirs includes) - - foreach(inc ${ARGV}) - get_filename_component(abs_inc ${inc} ABSOLUTE) - list(APPEND all_incs ${abs_inc}) + set(_ALL_INCS "") + foreach(_INC ${ARGV}) + get_filename_component(_ABS_INC ${_INC} ABSOLUTE) + list(APPEND _ALL_INCS ${_ABS_INC}) endforeach() - include_directories(${all_incs}) + include_directories(${_ALL_INCS}) + unset(_INC) + unset(_ABS_INC) + unset(_ALL_INCS) endmacro() +macro(blender_include_dirs_sys + includes) + set(_ALL_INCS "") + foreach(_INC ${ARGV}) + get_filename_component(_ABS_INC ${_INC} ABSOLUTE) + list(APPEND _ALL_INCS ${_ABS_INC}) + endforeach() + include_directories(SYSTEM ${_ALL_INCS}) + unset(_INC) + unset(_ABS_INC) + unset(_ALL_INCS) +endmacro() + +macro(blender_source_group + sources) + + # Group by location on disk + source_group("Source Files" FILES CMakeLists.txt) + + foreach(_SRC ${sources}) + get_filename_component(_SRC_EXT ${_SRC} EXT) + if((${_SRC_EXT} MATCHES ".h") OR (${_SRC_EXT} MATCHES ".hpp")) + source_group("Header Files" FILES ${_SRC}) + else() + source_group("Source Files" FILES ${_SRC}) + endif() + endforeach() + + unset(_SRC) + unset(_SRC_EXT) +endmacro() + + # only MSVC uses SOURCE_GROUP macro(blender_add_lib_nolist name sources - includes) + includes + includes_sys) # message(STATUS "Configuring library ${name}") + # include_directories(${includes}) + # include_directories(SYSTEM ${includes_sys}) blender_include_dirs("${includes}") + blender_include_dirs_sys("${includes_sys}") + add_library(${name} ${sources}) - # Group by location on disk - source_group("Source Files" FILES CMakeLists.txt) - foreach(SRC ${sources}) - get_filename_component(SRC_EXT ${SRC} EXT) - if(${SRC_EXT} MATCHES ".h" OR ${SRC_EXT} MATCHES ".hpp") - source_group("Header Files" FILES ${SRC}) - else() - source_group("Source Files" FILES ${SRC}) - endif() - endforeach() + # works fine without having the includes + # listed is helpful for IDE's (QtCreator/MSVC) + blender_source_group("${sources}") + endmacro() -# # works fine but having the includes listed is helpful for IDE's (QtCreator/MSVC) -# macro(blender_add_lib_nolist -# name -# sources -# includes) -# -# message(STATUS "Configuring library ${name}") -# include_directories(${includes}) -# add_library(${name} ${sources}) -# endmacro() macro(blender_add_lib name sources - includes) + includes + includes_sys) - blender_add_lib_nolist(${name} "${sources}" "${includes}") + blender_add_lib_nolist(${name} "${sources}" "${includes}" "${includes_sys}") set_property(GLOBAL APPEND PROPERTY BLENDER_LINK_LIBS ${name}) - endmacro() + macro(SETUP_LIBDIRS) # see "cmake --help-policy CMP0003" if(COMMAND cmake_policy) @@ -101,7 +165,7 @@ macro(SETUP_LIBDIRS) link_directories(${SNDFILE_LIBPATH}) endif() if(WITH_SAMPLERATE) - link_directories(${LIBSAMPLERATE_LIBPATH}) + link_directories(${SAMPLERATE_LIBPATH}) endif() if(WITH_FFTW3) link_directories(${FFTW3_LIBPATH}) @@ -124,17 +188,26 @@ macro(setup_liblinks target) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ") - target_link_libraries(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${LLIBS}) + target_link_libraries(${target} + ${OPENGL_gl_LIBRARY} + ${OPENGL_glu_LIBRARY} + ${JPEG_LIBRARIES} + ${PNG_LIBRARIES} + ${ZLIB_LIBRARIES} + ${LLIBS}) # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions if(WITH_PYTHON) # AND NOT WITH_PYTHON_MODULE # WIN32 needs target_link_libraries(${target} ${PYTHON_LINKFLAGS}) if(WIN32 AND NOT UNIX) - target_link_libraries(${target} debug ${PYTHON_LIBRARY}_d) - target_link_libraries(${target} optimized ${PYTHON_LIBRARY}) + file_list_suffix(PYTHON_LIBRARIES_DEBUG "${PYTHON_LIBRARIES}" "_d") + target_link_libraries(${target} + debug ${PYTHON_LIBRARIES_DEBUG} + optimized ${PYTHON_LIBRARIES}) + unset(PYTHON_LIBRARIES_DEBUG) else() - target_link_libraries(${target} ${PYTHON_LIBRARY}) + target_link_libraries(${target} ${PYTHON_LIBRARIES}) endif() endif() @@ -142,14 +215,18 @@ macro(setup_liblinks target_link_libraries(${target} ${GLEW_LIBRARY}) endif() - target_link_libraries(${target} ${OPENGL_glu_LIBRARY} ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) - target_link_libraries(${target} ${FREETYPE_LIBRARY}) + target_link_libraries(${target} + ${OPENGL_glu_LIBRARY} + ${JPEG_LIBRARIES} + ${PNG_LIBRARIES} + ${ZLIB_LIBRARIES} + ${FREETYPE_LIBRARY}) if(WITH_INTERNATIONAL) target_link_libraries(${target} ${GETTEXT_LIB}) if(WIN32 AND NOT UNIX) - target_link_libraries(${target} ${ICONV_LIB}) + target_link_libraries(${target} ${ICONV_LIBRARIES}) endif() endif() @@ -157,65 +234,76 @@ macro(setup_liblinks target_link_libraries(${target} ${OPENAL_LIBRARY}) endif() if(WITH_FFTW3) - target_link_libraries(${target} ${FFTW3_LIB}) + target_link_libraries(${target} ${FFTW3_LIBRARIES}) endif() if(WITH_JACK) - target_link_libraries(${target} ${JACK_LIB}) + target_link_libraries(${target} ${JACK_LIBRARIES}) endif() if(WITH_CODEC_SNDFILE) - target_link_libraries(${target} ${SNDFILE_LIB}) + target_link_libraries(${target} ${SNDFILE_LIBRARIES}) endif() if(WITH_SAMPLERATE) - target_link_libraries(${target} ${LIBSAMPLERATE_LIB}) + target_link_libraries(${target} ${SAMPLERATE_LIBRARIES}) endif() if(WITH_SDL) target_link_libraries(${target} ${SDL_LIBRARY}) endif() if(WITH_CODEC_QUICKTIME) - target_link_libraries(${target} ${QUICKTIME_LIB}) + target_link_libraries(${target} ${QUICKTIME_LIBRARIES}) endif() if(WITH_IMAGE_TIFF) target_link_libraries(${target} ${TIFF_LIBRARY}) endif() if(WITH_IMAGE_OPENEXR) if(WIN32 AND NOT UNIX) - foreach(loop_var ${OPENEXR_LIB}) - target_link_libraries(${target} debug ${loop_var}_d) - target_link_libraries(${target} optimized ${loop_var}) - endforeach() + file_list_suffix(OPENEXR_LIBRARIES_DEBUG "${OPENEXR_LIBRARIES}" "_d") + target_link_libraries(${target} + debug ${OPENEXR_LIBRARIES_DEBUG} + optimized ${OPENEXR_LIBRARIES}) + unset(OPENEXR_LIBRARIES_DEBUG) else() - target_link_libraries(${target} ${OPENEXR_LIB}) + target_link_libraries(${target} ${OPENEXR_LIBRARIES}) endif() endif() if(WITH_IMAGE_OPENJPEG AND UNIX AND NOT APPLE) - target_link_libraries(${target} ${OPENJPEG_LIB}) + target_link_libraries(${target} ${OPENJPEG_LIBRARIES}) endif() if(WITH_CODEC_FFMPEG) - target_link_libraries(${target} ${FFMPEG_LIB}) + target_link_libraries(${target} ${FFMPEG_LIBRARIES}) endif() if(WITH_OPENCOLLADA) if(WIN32 AND NOT UNIX) - foreach(loop_var ${OPENCOLLADA_LIB}) - target_link_libraries(${target} debug ${loop_var}_d) - target_link_libraries(${target} optimized ${loop_var}) - endforeach() - target_link_libraries(${target} debug ${PCRE_LIB}_d) - target_link_libraries(${target} optimized ${PCRE_LIB}) + file_list_suffix(OPENCOLLADA_LIBRARIES_DEBUG "${OPENCOLLADA_LIBRARIES}" "_d") + target_link_libraries(${target} + debug ${OPENCOLLADA_LIBRARIES_DEBUG} + optimized ${OPENCOLLADA_LIBRARIES}) + unset(OPENCOLLADA_LIBRARIES_DEBUG) + + file_list_suffix(PCRE_LIB_DEBUG "${PCRE_LIB}" "_d") + target_link_libraries(${target} + debug ${PCRE_LIB_DEBUG} + optimized ${PCRE_LIB}) + unset(PCRE_LIB_DEBUG) + if(EXPAT_LIB) - target_link_libraries(${target} debug ${EXPAT_LIB}_d) - target_link_libraries(${target} optimized ${EXPAT_LIB}) + file_list_suffix(EXPAT_LIB_DEBUG "${EXPAT_LIB}" "_d") + target_link_libraries(${target} + debug ${EXPAT_LIB_DEBUG} + optimized ${EXPAT_LIB}) + unset(EXPAT_LIB_DEBUG) endif() else() - target_link_libraries(${target} ${OPENCOLLADA_LIB}) - target_link_libraries(${target} ${PCRE_LIB}) - target_link_libraries(${target} ${EXPAT_LIB}) + target_link_libraries(${target} + ${OPENCOLLADA_LIBRARIES} + ${PCRE_LIB} + ${EXPAT_LIB}) endif() endif() if(WITH_MEM_JEMALLOC) - target_link_libraries(${target} ${JEMALLOC_LIBRARY}) + target_link_libraries(${target} ${JEMALLOC_LIBRARIES}) endif() if(WIN32 AND NOT UNIX) - target_link_libraries(${target} ${PTHREADS_LIB}) + target_link_libraries(${target} ${PTHREADS_LIBRARIES}) endif() endmacro() @@ -388,3 +476,80 @@ macro(get_blender_version) # message(STATUS "Version (Internal): ${BLENDER_VERSION}.${BLENDER_SUBVERSION}, Version (external): ${BLENDER_VERSION}${BLENDER_VERSION_CHAR}-${BLENDER_VERSION_CYCLE}") endmacro() + + +# hacks to override initial project settings +# these macros must be called directly before/after project(Blender) +macro(blender_project_hack_pre) + # ---------------- + # MINGW HACK START + # ignore system set flag, use our own + # must be before project(...) + # if the user wants to add their own its ok after first run. + if(DEFINED CMAKE_C_STANDARD_LIBRARIES) + set(_reset_standard_libraries OFF) + else() + set(_reset_standard_libraries ON) + endif() + + # ------------------ + # GCC -O3 HACK START + # needed because O3 can cause problems but + # allow the builder to set O3 manually after. + if(DEFINED CMAKE_C_FLAGS_RELEASE) + set(_reset_standard_cflags_rel OFF) + else() + set(_reset_standard_cflags_rel ON) + endif() + if(DEFINED CMAKE_CXX_FLAGS_RELEASE) + set(_reset_standard_cxxflags_rel OFF) + else() + set(_reset_standard_cxxflags_rel ON) + endif() +endmacro() + + +macro(blender_project_hack_post) + # -------------- + # MINGW HACK END + if (_reset_standard_libraries) + # Must come after project(...) + # + # MINGW workaround for -ladvapi32 being included which surprisingly causes + # string formatting of floats, eg: printf("%.*f", 3, value). to crash blender + # with a meaningless stack trace. by overriding this flag we ensure we only + # have libs we define and that cmake & scons builds match. + set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) + set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES) + mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES) + endif() + unset(_reset_standard_libraries) + + + # ---------------- + # GCC -O3 HACK END + if(_reset_standard_cflags_rel) + string(REGEX REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_C_FLAGS_RELEASE) + endif() + + if(_reset_standard_cxxflags_rel) + string(REGEX REPLACE "-O3" "-O2" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "" FORCE) + mark_as_advanced(CMAKE_CXX_FLAGS_RELEASE) + endif() + + unset(_reset_standard_cflags_rel) + unset(_reset_standard_cxxflags_rel) + + # ------------------------------------------------------------------ + # workaround for omission in cmake 2.8.4's GNU.cmake, fixed in 2.8.5 + if(CMAKE_COMPILER_IS_GNUCC) + if(NOT DARWIN) + set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") + endif() + endif() + +endmacro() diff --git a/build_files/cmake/project_info.py b/build_files/cmake/project_info.py index c25fbf4128d..db12884469b 100755 --- a/build_files/cmake/project_info.py +++ b/build_files/cmake/project_info.py @@ -46,7 +46,7 @@ __all__ = ( import sys import os -from os.path import join, dirname, normpath, abspath, splitext, relpath, exists +from os.path import join, dirname, normpath, abspath, splitext, exists SOURCE_DIR = join(dirname(__file__), "..", "..") SOURCE_DIR = normpath(SOURCE_DIR) diff --git a/build_files/scons/config/linux2-config.py b/build_files/scons/config/linux2-config.py index bc2917055fb..328cd4cdb28 100644 --- a/build_files/scons/config/linux2-config.py +++ b/build_files/scons/config/linux2-config.py @@ -93,7 +93,7 @@ BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' #BF_GETTEXT_LIB_STATIC = '${BF_GETTEXT}/lib/libgettextlib.a' WITH_BF_GAMEENGINE = True -WITH_BF_PLAYER = False +WITH_BF_PLAYER = True WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' diff --git a/build_files/scons/config/win32-vc-config.py b/build_files/scons/config/win32-vc-config.py index 65076be85ed..e46b5269d22 100644 --- a/build_files/scons/config/win32-vc-config.py +++ b/build_files/scons/config/win32-vc-config.py @@ -35,7 +35,7 @@ BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib' WITH_BF_JACK = False BF_JACK = LIBDIR + '/jack' -BF_JACK_INC = '${BF_JACK}/include' +BF_JACK_INC = '${BF_JACK}/include ${BF_FFMPEG}/include/msvc' BF_JACK_LIB = 'libjack' BF_JACK_LIBPATH = '${BF_JACK}/lib' @@ -99,7 +99,7 @@ BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = True -WITH_BF_PLAYER = False +WITH_BF_PLAYER = True WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' @@ -118,7 +118,7 @@ BF_FREETYPE_INC = '${BF_FREETYPE}/include ${BF_FREETYPE}/include/freetype2' BF_FREETYPE_LIB = 'freetype2ST' BF_FREETYPE_LIBPATH = '${BF_FREETYPE}/lib' -WITH_BF_QUICKTIME = True # -DWITH_QUICKTIME +WITH_BF_QUICKTIME = False # -DWITH_QUICKTIME BF_QUICKTIME = LIBDIR + '/QTDevWin' BF_QUICKTIME_INC = '${BF_QUICKTIME}/CIncludes' BF_QUICKTIME_LIB = 'qtmlClient' @@ -181,7 +181,7 @@ CXX_WARN = [] LLIBS = ['ws2_32', 'vfw32', 'winmm', 'kernel32', 'user32', 'gdi32', 'comdlg32', 'advapi32', 'shfolder', 'shell32', 'ole32', 'oleaut32', 'uuid'] -PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE'] +PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:IX86','/STACK:2097152','/INCREMENTAL:NO', '/LARGEADDRESSAWARE', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"'] # # Todo # BF_PROFILE_CCFLAGS = ['-pg', '-g '] diff --git a/build_files/scons/config/win64-vc-config.py b/build_files/scons/config/win64-vc-config.py index 2c990941764..45a4ea5b178 100644 --- a/build_files/scons/config/win64-vc-config.py +++ b/build_files/scons/config/win64-vc-config.py @@ -101,7 +101,7 @@ BF_GETTEXT_LIB = 'gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' WITH_BF_GAMEENGINE = True -WITH_BF_PLAYER = False +WITH_BF_PLAYER = True WITH_BF_BULLET = True BF_BULLET = '#extern/bullet2/src' @@ -170,7 +170,7 @@ CCFLAGS = ['/nologo', '/Ob1', '/J', '/W0', '/Gd', '/we4013', '/wd4018', '/wd4244 CXXFLAGS = ['/EHsc'] BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast'] -BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr'] +BF_DEBUG_CCFLAGS = ['/Zi', '/FR${TARGET}.sbr', '/Od'] CPPFLAGS = ['-DWIN32', '-D_CONSOLE', '-D_LIB', '-DFTGL_LIBRARY_STATIC', '-D_CRT_SECURE_NO_DEPRECATE'] REL_CFLAGS = ['-O2', '-DNDEBUG'] @@ -188,7 +188,7 @@ if BF_DEBUG: else: BF_NUMJOBS=6 -PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO'] +PLATFORM_LINKFLAGS = ['/SUBSYSTEM:CONSOLE','/MACHINE:X64','/STACK:2097152','/OPT:NOREF','/INCREMENTAL:NO', '/NODEFAULTLIB:"msvcrt.lib"', '/NODEFAULTLIB:"msvcmrt.lib"', '/NODEFAULTLIB:"msvcurt.lib"', '/NODEFAULTLIB:"msvcrtd.lib"'] BF_BUILDDIR = '..\\build\\blender25-win64-vc' BF_INSTALLDIR='..\\install\\blender25-win64-vc' diff --git a/build_files/scons/tools/Blender.py b/build_files/scons/tools/Blender.py index 4bfa1851acb..50f43a03b8b 100644 --- a/build_files/scons/tools/Blender.py +++ b/build_files/scons/tools/Blender.py @@ -258,7 +258,10 @@ def setup_syslibs(lenv): syslibs += Split(lenv['BF_PTHREADS_LIB']) if lenv['WITH_BF_COLLADA']: syslibs.append(lenv['BF_PCRE_LIB']) - syslibs += Split(lenv['BF_OPENCOLLADA_LIB']) + if lenv['BF_DEBUG']: + syslibs += [colladalib+'_d' for colladalib in Split(lenv['BF_OPENCOLLADA_LIB'])] + else: + syslibs += Split(lenv['BF_OPENCOLLADA_LIB']) syslibs.append(lenv['BF_EXPAT_LIB']) if not lenv['WITH_BF_STATICLIBSAMPLERATE']: @@ -287,6 +290,50 @@ def propose_priorities(): print "\t\t",new_priority, v new_priority += 5 +# emits the necessary file objects for creator.c, to be used in creating +# the final blender executable +def creator(env): + sources = ['creator.c']# + Blender.buildinfo(env, "dynamic") + Blender.resources + + incs = ['#/intern/guardedalloc', '#/source/blender/blenlib', '#/source/blender/blenkernel', '#/source/blender/editors/include', '#/source/blender/blenloader', '#/source/blender/imbuf', '#/source/blender/renderconverter', '#/source/blender/render/extern/include', '#/source/blender/windowmanager', '#/source/blender/makesdna', '#/source/blender/makesrna', '#/source/gameengine/BlenderRoutines', '#/extern/glew/include', '#/source/blender/gpu', env['BF_OPENGL_INC']] + + defs = [] + if env['WITH_BF_QUICKTIME']: + incs.append(env['BF_QUICKTIME_INC']) + defs.append('WITH_QUICKTIME') + + if env['WITH_BF_BINRELOC']: + incs.append('#/extern/binreloc/include') + defs.append('WITH_BINRELOC') + + if env['WITH_BF_OPENEXR']: + defs.append('WITH_OPENEXR') + + if env['WITH_BF_TIFF']: + defs.append('WITH_TIFF') + + if not env['WITH_BF_SDL']: + defs.append('DISABLE_SDL') + + if env['WITH_BF_PYTHON']: + incs.append('#/source/blender/python') + defs.append('WITH_PYTHON') + if env['BF_DEBUG']: + defs.append('_DEBUG') + + if env['BF_BUILDINFO']: + defs.append('BUILD_DATE') + defs.append('NAN_BUILDINFO') + + if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): + incs.append(env['BF_PTHREADS_INC']) + + env.Append(CPPDEFINES=defs) + env.Append(CPPPATH=incs) + obj = [env.Object(root_build_dir+'source/creator/creator/creator', ['#source/creator/creator.c'])] + + return obj + ## TODO: see if this can be made in an emitter def buildinfo(lenv, build_type): """ @@ -324,7 +371,7 @@ def buildinfo(lenv, build_type): lenv.Append (CPPPATH = [root_build_dir+'source/blender/blenkernel']) - obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type, [root_build_dir+'source/creator/buildinfo.c'])] + obj = [lenv.Object (root_build_dir+'source/creator/%s_buildinfo'%build_type, ['#source/creator/buildinfo.c'])] return obj @@ -449,10 +496,16 @@ def WinPyBundle(target=None, source=None, env=None): shutil.rmtree(py_target, False, printexception) exclude_re=[re.compile('.*/test/.*'), re.compile('^config/.*'), + re.compile('^config-*/.*'), re.compile('^distutils/.*'), re.compile('^idlelib/.*'), re.compile('^lib2to3/.*'), - re.compile('^tkinter/.*')] + re.compile('^tkinter/.*'), + re.compile('^_tkinter_d.pyd'), + re.compile('^turtledemo'), + re.compile('^turtle.py'), + ] + print "Unpacking '" + py_tar + "' to '" + py_target + "'" untar_pybundle(py_tar,py_target,exclude_re) @@ -569,17 +622,17 @@ def UnixPyBundle(target=None, source=None, env=None): run("cp -R '%s' '%s'" % (py_src, os.path.dirname(py_target))) run("rm -rf '%s/distutils'" % py_target) run("rm -rf '%s/lib2to3'" % py_target) - run("rm -rf '%s/idlelib'" % py_target) - run("rm -rf '%s/tkinter'" % py_target) run("rm -rf '%s/config'" % py_target) - + run("rm -rf '%s/config-*'" % py_target) run("rm -rf '%s/site-packages'" % py_target) run("mkdir '%s/site-packages'" % py_target) # python needs it.' - + run("rm -rf '%s/idlelib'" % py_target) + run("rm -rf '%s/tkinter'" % py_target) + run("rm -rf '%s/turtledemo'" % py_target) + run("rm -r '%s/turtle.py'" % py_target) run("rm -f '%s/lib-dynload/_tkinter.so'" % py_target) + run("find '%s' -type d -name 'test' -prune -exec rm -rf {} ';'" % py_target) - run("find '%s' -type d -name 'config-*' -prune -exec rm -rf {} ';'" % py_target) - run("find '%s' -type d -name 'turtledemo' -prune -exec rm -rf {} ';'" % py_target) run("find '%s' -type d -name '__pycache__' -exec rm -rf {} ';'" % py_target) run("find '%s' -name '*.py[co]' -exec rm -rf {} ';'" % py_target) run("find '%s' -name '*.so' -exec strip -s {} ';'" % py_target) @@ -708,23 +761,19 @@ class BlenderEnvironment(SConsEnvironment): global vcp print bc.HEADER+'Configuring program '+bc.ENDC+bc.OKGREEN+progname+bc.ENDC lenv = self.Clone() + lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) if lenv['OURPLATFORM'] in ('win32-vc', 'cygwin', 'win64-vc'): - lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) - lenv.Append(LINKFLAGS = ['/FORCE:MULTIPLE']) if lenv['BF_DEBUG']: - lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb']) + lenv.Prepend(LINKFLAGS = ['/DEBUG','/PDB:'+progname+'.pdb','/NODEFAULTLIB:libcmt']) if lenv['OURPLATFORM']=='linux2': - lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) if lenv['WITH_BF_PYTHON']: lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS']) if lenv['OURPLATFORM']=='sunos5': - lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) if lenv['WITH_BF_PYTHON']: lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS']) if lenv['CXX'].endswith('CC'): lenv.Replace(LINK = '$CXX') if lenv['OURPLATFORM']=='darwin': - lenv.Append(LINKFLAGS = lenv['PLATFORM_LINKFLAGS']) if lenv['WITH_BF_PYTHON']: lenv.Append(LINKFLAGS = lenv['BF_PYTHON_LINKFLAGS']) lenv.Append(LINKFLAGS = lenv['BF_OPENGL_LINKFLAGS']) diff --git a/build_files/scons/tools/btools.py b/build_files/scons/tools/btools.py index fe6b092598c..a8bee920a9b 100644 --- a/build_files/scons/tools/btools.py +++ b/build_files/scons/tools/btools.py @@ -134,7 +134,8 @@ def validate_arguments(args, bc): 'BF_RAYOPTIMIZATION_SSE_FLAGS', 'BF_NO_ELBEEM', 'WITH_BF_CXX_GUARDEDALLOC', - 'WITH_BF_JEMALLOC', 'WITH_BF_STATICJEMALLOC', 'BF_JEMALLOC', 'BF_JEMALLOC_INC', 'BF_JEMALLOC_LIBPATH', 'BF_JEMALLOC_LIB', 'BF_JEMALLOC_LIB_STATIC' + 'WITH_BF_JEMALLOC', 'WITH_BF_STATICJEMALLOC', 'BF_JEMALLOC', 'BF_JEMALLOC_INC', 'BF_JEMALLOC_LIBPATH', 'BF_JEMALLOC_LIB', 'BF_JEMALLOC_LIB_STATIC', + 'BUILDBOT_BRANCH' ] # Have options here that scons expects to be lists @@ -501,7 +502,9 @@ def read_opts(env, cfg, args): (BoolVariable('WITH_BF_RAYOPTIMIZATION', 'Enable raytracer SSE/SIMD optimization.', False)), ('BF_RAYOPTIMIZATION_SSE_FLAGS', 'SSE flags', ''), - (BoolVariable('WITH_BF_CXX_GUARDEDALLOC', 'Enable GuardedAlloc for C++ memory allocation tracking.', False)) + (BoolVariable('WITH_BF_CXX_GUARDEDALLOC', 'Enable GuardedAlloc for C++ memory allocation tracking.', False)), + + ('BUILDBOT_BRANCH', 'Buildbot branch name', ''), ) # end of opts.AddOptions() return localopts @@ -546,7 +549,7 @@ def buildslave(target=None, source=None, env=None): Builder for buildbot integration. Used by buildslaves of http://builder.blender.org only. """ - if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'): + if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw', 'darwin'): extension = '.zip' else: extension = '.tar.bz2' @@ -560,9 +563,15 @@ def buildslave(target=None, source=None, env=None): platform = 'linux-glibc27-x86_64' elif bitness == '32bit': platform = 'linux-glibc27-i686' + if platform == 'darwin': + platform = 'OSX-' + env['MACOSX_ARCHITECTURE'] + + branch = env['BUILDBOT_BRANCH'] outdir = os.path.abspath(env['BF_INSTALLDIR']) package_name = 'blender-' + VERSION+'-'+REVISION + '-' + platform + if branch != '': + package_name = branch + '-' + package_name package_dir = os.path.normpath(outdir + os.sep + '..' + os.sep + package_name) package_archive = os.path.normpath(outdir + os.sep + '..' + os.sep + package_name + extension) @@ -605,9 +614,12 @@ def NSIS_Installer(target=None, source=None, env=None): doneroot = False rootdirconts = [] datafiles = '' + deldatafiles = '' + deldatadirs = '' l = len(bf_installdir) for dp,dn,df in os.walk(bf_installdir): + # install if not doneroot: for f in df: rootdirconts.append(os.path.join(dp,f)) @@ -615,15 +627,22 @@ def NSIS_Installer(target=None, source=None, env=None): else: if len(df)>0: dp_tmp = dp[l:] - if dp_tmp.find('python\\lib') > -1: - datafiles += "\n" +r'SetOutPath $INSTDIR'+dp[l:]+"\n\n" - else: - datafiles += "\n"+r'SetOutPath $BLENDERHOME'+dp[l:]+"\n\n" + datafiles += "\n" +r'SetOutPath $INSTDIR'+dp[l:]+"\n\n" for f in df: outfile = os.path.join(dp,f) datafiles += ' File '+outfile + "\n" + # uninstall + deldir = dp[l+1:] + + if len(deldir)>0: + deldatadirs = "RMDir $INSTDIR\\" + deldir + "\n" + deldatadirs + deldatadirs = "RMDir /r $INSTDIR\\" + deldir + "\\__pycache__\n" + deldatadirs + + for f in df: + deldatafiles += 'Delete \"$INSTDIR\\' + os.path.join(deldir, f) + "\"\n" + #### change to suit install dir #### inst_dir = install_base_dir + env['BF_INSTALLDIR'] @@ -660,6 +679,8 @@ def NSIS_Installer(target=None, source=None, env=None): ns_cnt = string.replace(ns_cnt, "[DELROOTDIRCONTS]", delrootstring) ns_cnt = string.replace(ns_cnt, "[DODATAFILES]", datafiles) + ns_cnt = string.replace(ns_cnt, "[DELDATAFILES]", deldatafiles) + ns_cnt = string.replace(ns_cnt, "[DELDATADIRS]", deldatadirs) tmpnsi = os.path.normpath(install_base_dir+os.sep+env['BF_BUILDDIR']+os.sep+"00.blender_tmp.nsi") new_nsis = open(tmpnsi, 'w') diff --git a/doc/blender_file_format/BlendFileDnaExporter_25.py b/doc/blender_file_format/BlendFileDnaExporter_25.py index afc58ce6730..988c992fd78 100755 --- a/doc/blender_file_format/BlendFileDnaExporter_25.py +++ b/doc/blender_file_format/BlendFileDnaExporter_25.py @@ -13,8 +13,8 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ***** END GPL LICENCE BLOCK ***** diff --git a/doc/blender_file_format/BlendFileReader.py b/doc/blender_file_format/BlendFileReader.py index 7003af10ac7..313c8c7ff5d 100644 --- a/doc/blender_file_format/BlendFileReader.py +++ b/doc/blender_file_format/BlendFileReader.py @@ -13,8 +13,8 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ***** END GPL LICENCE BLOCK ***** diff --git a/doc/doxygen/Doxyfile b/doc/doxygen/Doxyfile index 89dcf834227..79b3f1a4160 100644 --- a/doc/doxygen/Doxyfile +++ b/doc/doxygen/Doxyfile @@ -31,7 +31,7 @@ PROJECT_NAME = Blender # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = "V2.57" +PROJECT_NUMBER = "V2.58" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer diff --git a/doc/manpage/blender.1 b/doc/manpage/blender.1 index c27cc98f08b..ddf3a79b104 100644 --- a/doc/manpage/blender.1 +++ b/doc/manpage/blender.1 @@ -1,4 +1,4 @@ -.TH "BLENDER" "1" "April 05, 2011" "Blender Blender 2\&.56 (sub 6)" +.TH "BLENDER" "1" "June 03, 2011" "Blender Blender 2\&.57 (sub 1)" .SH NAME blender \- a 3D modelling and rendering package @@ -15,7 +15,7 @@ Use Blender to create TV commercials, to make technical visualizations, business http://www.blender.org .SH OPTIONS -Blender 2.56 (sub 6) +Blender 2.57 (sub 1) Usage: blender [args ...] [file] [args ...] .br .SS "Render Options:" @@ -160,6 +160,12 @@ Force opening without borders Open with lower left corner at , and width and height as , .br +.TP +.B \-con or \-\-start\-console +.br +Start with the console window open (ignored if \-b is set) +.br + .IP .SS "Game Engine Specific Options:" @@ -191,7 +197,7 @@ Turn debugging on .br * Disables mouse grab (to interact with a debugger in some cases) .br -* Keeps python sys.stdin rather then setting it to None +* Keeps python sys.stdin rather than setting it to None .br .TP @@ -210,12 +216,6 @@ Skip reading the "startup.blend" in the users home directory .IP -.TP -.B \-\-env\-system\-config -.br -Set the BLENDER_SYSTEM_CONFIG environment variable -.br - .TP .B \-\-env\-system\-datafiles .br @@ -281,7 +281,7 @@ Print this help text and exit .TP .B \-y or \-\-enable\-autoexec .br -Enable automatic python script execution (default) +Enable automatic python script execution, (default) .br .TP @@ -376,7 +376,6 @@ Arguments are executed in the order they are given. eg .br .SH "ENVIRONMENT VARIABLES" \fIBLENDER_USER_CONFIG\fR Directory for user configuration files. - \fIBLENDER_SYSTEM_CONFIG\fR Directory for system wide configuration files. \fIBLENDER_USER_SCRIPTS\fR Directory for user scripts. \fIBLENDER_SYSTEM_SCRIPTS\fR Directory for system wide scripts. \fIBLENDER_USER_DATAFILES\fR Directory for user data files (icons, translations, ..). diff --git a/doc/python_api/blender-org/layout.html b/doc/python_api/blender-org/layout.html index a37ed730c22..88db31e1586 100644 --- a/doc/python_api/blender-org/layout.html +++ b/doc/python_api/blender-org/layout.html @@ -8,7 +8,7 @@ {%- macro relbar() %}