Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build_files')
-rw-r--r--build_files/build_environment/CMakeLists.txt6
-rw-r--r--build_files/build_environment/cmake/check_software.cmake8
-rw-r--r--build_files/build_environment/cmake/ffmpeg.cmake8
-rw-r--r--build_files/build_environment/cmake/harvest.cmake6
-rw-r--r--build_files/build_environment/cmake/libglu.cmake40
-rw-r--r--build_files/build_environment/cmake/mesa.cmake54
-rw-r--r--build_files/build_environment/cmake/opus.cmake35
-rw-r--r--build_files/build_environment/cmake/versions.cmake12
-rw-r--r--build_files/build_environment/cmake/vpx.cmake2
-rwxr-xr-xbuild_files/build_environment/install_deps.sh36
-rw-r--r--build_files/buildbot/buildbot_utils.py2
-rw-r--r--build_files/buildbot/config/blender_linux.cmake23
-rw-r--r--build_files/buildbot/slave_pack.py20
-rw-r--r--build_files/buildbot/slave_update.py2
-rw-r--r--build_files/cmake/Modules/GTestTesting.cmake8
-rw-r--r--build_files/cmake/config/blender_full.cmake1
-rw-r--r--build_files/cmake/config/blender_lite.cmake1
-rw-r--r--build_files/cmake/config/blender_release.cmake1
-rw-r--r--build_files/cmake/macros.cmake11
-rw-r--r--build_files/cmake/platform/platform_apple.cmake23
-rw-r--r--build_files/cmake/platform/platform_unix.cmake44
-rw-r--r--build_files/cmake/platform/platform_win32.cmake46
-rwxr-xr-xbuild_files/utils/make_test.py3
-rwxr-xr-xbuild_files/utils/make_update.py113
-rwxr-xr-xbuild_files/utils/make_utils.py6
25 files changed, 411 insertions, 100 deletions
diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt
index 9756ad28454..c7d8de22890 100644
--- a/build_files/build_environment/CMakeLists.txt
+++ b/build_files/build_environment/CMakeLists.txt
@@ -128,6 +128,7 @@ if(NOT WIN32 OR ENABLE_MINGW64)
include(cmake/ogg.cmake)
include(cmake/vorbis.cmake)
include(cmake/theora.cmake)
+ include(cmake/opus.cmake)
include(cmake/vpx.cmake)
include(cmake/x264.cmake)
include(cmake/xvidcore.cmake)
@@ -157,4 +158,9 @@ if(UNIX)
include(cmake/sqlite.cmake)
endif()
+if(UNIX AND NOT APPLE)
+ include(cmake/libglu.cmake)
+ include(cmake/mesa.cmake)
+endif()
+
include(cmake/harvest.cmake)
diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake
index 30dea754e20..f5774551879 100644
--- a/build_files/build_environment/cmake/check_software.cmake
+++ b/build_files/build_environment/cmake/check_software.cmake
@@ -17,10 +17,16 @@
# ***** END GPL LICENSE BLOCK *****
if(UNIX)
+ if(APPLE)
+ set(_libtoolize_name glibtoolize)
+ else()
+ set(_libtoolize_name libtoolize)
+ endif()
+
set(_required_software
autoconf
automake
- libtoolize
+ ${_libtoolize_name}
nasm
yasm
tclsh
diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake
index 27d817e8948..9ff52914f53 100644
--- a/build_files/build_environment/cmake/ffmpeg.cmake
+++ b/build_files/build_environment/cmake/ffmpeg.cmake
@@ -16,10 +16,10 @@
#
# ***** END GPL LICENSE BLOCK *****
-set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include")
-set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib")
+set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include")
+set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib")
set(FFMPEG_EXTRA_FLAGS --pkg-config-flags=--static --extra-cflags=${FFMPEG_CFLAGS} --extra-ldflags=${FFMPEG_LDFLAGS})
-set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR})
+set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:)
if(WIN32)
set(FFMPEG_ENV set ${FFMPEG_ENV} &&)
@@ -73,6 +73,7 @@ ExternalProject_Add(external_ffmpeg
--disable-libgsm
--disable-libspeex
--enable-libvpx
+ --enable-libopus
--prefix=${LIBDIR}/ffmpeg
--enable-libtheora
--enable-libvorbis
@@ -130,6 +131,7 @@ add_dependencies(
external_openjpeg
external_xvidcore
external_x264
+ external_opus
external_vpx
external_theora
external_vorbis
diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake
index 526e72e2e33..cc596b2c786 100644
--- a/build_files/build_environment/cmake/harvest.cmake
+++ b/build_files/build_environment/cmake/harvest.cmake
@@ -192,6 +192,7 @@ harvest(theora/lib ffmpeg/lib "*.a")
harvest(tiff/include tiff/include "*.h")
harvest(tiff/lib tiff/lib "*.a")
harvest(vorbis/lib ffmpeg/lib "*.a")
+harvest(opus/lib ffmpeg/lib "*.a")
harvest(vpx/lib ffmpeg/lib "*.a")
harvest(webp/lib ffmpeg/lib "*.a")
harvest(x264/lib ffmpeg/lib "*.a")
@@ -199,4 +200,9 @@ harvest(xvidcore/lib ffmpeg/lib "*.a")
harvest(embree/include embree/include "*.h")
harvest(embree/lib embree/lib "*.a")
+if(UNIX AND NOT APPLE)
+ harvest(libglu/lib mesa/lib "*.so*")
+ harvest(mesa/lib mesa/lib "*.so*")
+endif()
+
endif()
diff --git a/build_files/build_environment/cmake/libglu.cmake b/build_files/build_environment/cmake/libglu.cmake
new file mode 100644
index 00000000000..d1b7647eca3
--- /dev/null
+++ b/build_files/build_environment/cmake/libglu.cmake
@@ -0,0 +1,40 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(LIBGLU_CFLAGS "-static-libgcc")
+set(LIBGLU_CXXFLAGS "-static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a")
+set(LIBGLU_LDFLAGS "-pthread -static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a")
+
+set(LIBGLU_EXTRA_FLAGS
+ CFLAGS=${LIBGLU_CFLAGS}
+ CXXFLAGS=${LIBGLU_CXXFLAGS}
+ LDFLAGS=${LIBGLU_LDFLAGS}
+)
+
+ExternalProject_Add(external_libglu
+ URL ${LIBGLU_URI}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH MD5=${LIBGLU_HASH}
+ PREFIX ${BUILD_DIR}/libglu
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
+ cd ${BUILD_DIR}/libglu/src/external_libglu/ &&
+ ${CONFIGURE_COMMAND_NO_TARGET} --prefix=${LIBDIR}/libglu ${LIBGLU_EXTRA_FLAGS}
+ BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/libglu/src/external_libglu/ && make -j${MAKE_THREADS}
+ INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/libglu/src/external_libglu/ && make install
+ INSTALL_DIR ${LIBDIR}/libglu
+)
diff --git a/build_files/build_environment/cmake/mesa.cmake b/build_files/build_environment/cmake/mesa.cmake
new file mode 100644
index 00000000000..6994d1c5813
--- /dev/null
+++ b/build_files/build_environment/cmake/mesa.cmake
@@ -0,0 +1,54 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(MESA_CFLAGS "-static-libgcc")
+set(MESA_CXXFLAGS "-static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a")
+set(MESA_LDFLAGS "-L${LIBDIR}/zlib/lib -pthread -static-libgcc -static-libstdc++ -Bstatic -lstdc++ -Bdynamic -l:libstdc++.a -l:libz_pic.a")
+
+set(MESA_EXTRA_FLAGS
+ CFLAGS=${MESA_CFLAGS}
+ CXXFLAGS=${MESA_CXXFLAGS}
+ LDFLAGS=${MESA_LDFLAGS}
+ --enable-glx=gallium-xlib
+ --with-gallium-drivers=swrast
+ --disable-dri
+ --disable-gbm
+ --disable-egl
+ --disable-gles1
+ --disable-gles2
+ --disable-llvm-shared-libs
+ --with-llvm-prefix=${LIBDIR}/llvm
+)
+
+ExternalProject_Add(external_mesa
+ URL ${MESA_URI}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH MD5=${MESA_HASH}
+ PREFIX ${BUILD_DIR}/mesa
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
+ cd ${BUILD_DIR}/mesa/src/external_mesa/ &&
+ ${CONFIGURE_COMMAND_NO_TARGET} --prefix=${LIBDIR}/mesa ${MESA_EXTRA_FLAGS}
+ BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa/ && make -j${MAKE_THREADS}
+ INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/mesa/src/external_mesa/ && make install
+ INSTALL_DIR ${LIBDIR}/mesa
+)
+
+add_dependencies(
+ external_mesa
+ ll
+)
diff --git a/build_files/build_environment/cmake/opus.cmake b/build_files/build_environment/cmake/opus.cmake
new file mode 100644
index 00000000000..abaad94fa28
--- /dev/null
+++ b/build_files/build_environment/cmake/opus.cmake
@@ -0,0 +1,35 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ***** END GPL LICENSE BLOCK *****
+
+ExternalProject_Add(external_opus
+ URL ${OPUS_URI}
+ DOWNLOAD_DIR ${DOWNLOAD_DIR}
+ URL_HASH SHA256=${OPUS_HASH}
+ PREFIX ${BUILD_DIR}/opus
+ CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/opus
+ --disable-shared
+ --enable-static
+ --with-pic
+ BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make -j${MAKE_THREADS}
+ INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/opus/src/external_opus/ && make install
+ INSTALL_DIR ${LIBDIR}/opus
+)
+
+if(MSVC)
+ set_target_properties(external_opus PROPERTIES FOLDER Mingw)
+endif()
diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake
index c3b713096d6..1c9e5c5a4f6 100644
--- a/build_files/build_environment/cmake/versions.cmake
+++ b/build_files/build_environment/cmake/versions.cmake
@@ -192,6 +192,10 @@ set(VPX_VERSION 1.7.0)
set(VPX_URI https://github.com/webmproject/libvpx/archive/v${VPX_VERSION}/libvpx-v${VPX_VERSION}.tar.gz)
set(VPX_HASH 1fec931eb5c94279ad219a5b6e0202358e94a93a90cfb1603578c326abfc1238)
+set(OPUS_VERSION 1.3.1)
+set(OPUS_URI https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz)
+set(OPUS_HASH 65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d)
+
set(X264_URI http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20180811-2245-stable.tar.bz2)
set(X264_HASH ae8a868a0e236a348b35d79f3ee80294b169d1195408b689f9851383661ed7aa)
@@ -306,3 +310,11 @@ set(EMBREE_HASH 3d4a1147002ff43939d45140aa9d6fb8)
set(OIDN_VERSION 1.0.0)
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.zip)
set(OIDN_HASH 19fe67b0164e8f020ac8a4f520defe60)
+
+set(LIBGLU_VERSION 9.0.1)
+set(LIBGLU_URI ftp://ftp.freedesktop.org/pub/mesa/glu/glu-${LIBGLU_VERSION}.tar.xz)
+set(LIBGLU_HASH 151aef599b8259efe9acd599c96ea2a3)
+
+set(MESA_VERSION 18.3.1)
+set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa//mesa-${MESA_VERSION}.tar.xz)
+set(MESA_HASH d60828056d77bfdbae0970f9b15fb1be)
diff --git a/build_files/build_environment/cmake/vpx.cmake b/build_files/build_environment/cmake/vpx.cmake
index 1c3a7081b59..741493859e2 100644
--- a/build_files/build_environment/cmake/vpx.cmake
+++ b/build_files/build_environment/cmake/vpx.cmake
@@ -49,6 +49,8 @@ ExternalProject_Add(external_vpx
--disable-avx2
--disable-unit-tests
--disable-examples
+ --enable-vp8
+ --enable-vp9
${VPX_EXTRA_FLAGS}
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make install
diff --git a/build_files/build_environment/install_deps.sh b/build_files/build_environment/install_deps.sh
index f594add3a5b..fd3ebe241a2 100755
--- a/build_files/build_environment/install_deps.sh
+++ b/build_files/build_environment/install_deps.sh
@@ -431,6 +431,9 @@ X264_VERSION_MIN=0.118
VPX_USE=false
VPX_VERSION_MIN=0.9.7
VPX_DEV=""
+OPUS_USE=false
+OPUS_VERSION_MIN=1.1.1
+OPUS_DEV=""
MP3LAME_USE=false
MP3LAME_DEV=""
OPENJPEG_USE=false
@@ -2754,6 +2757,10 @@ compile_FFmpeg() {
extra="$extra --enable-libvpx"
fi
+ if [ "$OPUS_USE" = true ]; then
+ extra="$extra --enable-libopus"
+ fi
+
if [ "$MP3LAME_USE" = true ]; then
extra="$extra --enable-libmp3lame"
fi
@@ -2991,6 +2998,14 @@ install_DEB() {
install_packages_DEB $VPX_DEV
VPX_USE=true
fi
+
+ PRINT ""
+ OPUS_DEV="libopus-dev"
+ check_package_version_ge_DEB $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ install_packages_DEB $OPUS_DEV
+ OPUS_USE=true
+ fi
fi
# Check cmake/glew versions and disable features for older distros.
@@ -3601,8 +3616,17 @@ install_RPM() {
install_packages_RPM $VPX_DEV
VPX_USE=true
fi
+
PRINT ""
install_packages_RPM libspnav-devel
+
+ PRINT ""
+ OPUS_DEV="libopus-devel"
+ check_package_version_ge_RPM $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ install_packages_RPM $OPUS_DEV
+ OPUS_USE=true
+ fi
fi
PRINT ""
@@ -4077,6 +4101,14 @@ install_ARCH() {
install_packages_ARCH $VPX_DEV
VPX_USE=true
fi
+
+ PRINT ""
+ OPUS_DEV="opus"
+ check_package_version_ge_ARCH $OPUS_DEV $OPUS_VERSION_MIN
+ if [ $? -eq 0 ]; then
+ install_packages_ARCH $OPUS_DEV
+ OPUS_USE=true
+ fi
fi
@@ -4633,6 +4665,10 @@ print_info_ffmpeglink() {
_packages="$_packages $VPX_DEV"
fi
+ if [ "$OPUS_USE" = true ]; then
+ _packages="$_packages $OPUS_DEV"
+ fi
+
if [ "$MP3LAME_USE" = true ]; then
_packages="$_packages $MP3LAME_DEV"
fi
diff --git a/build_files/buildbot/buildbot_utils.py b/build_files/buildbot/buildbot_utils.py
index 6891b91aa1e..eded6646671 100644
--- a/build_files/buildbot/buildbot_utils.py
+++ b/build_files/buildbot/buildbot_utils.py
@@ -20,6 +20,7 @@
import argparse
import os
+import re
import subprocess
import sys
@@ -27,6 +28,7 @@ class Builder:
def __init__(self, name, branch):
self.name = name
self.branch = branch
+ self.is_release_branch = re.match("^blender-v(.*)-release$", branch) is not None
# Buildbot runs from build/ directory
self.blender_dir = os.path.abspath(os.path.join('..', 'blender.git'))
diff --git a/build_files/buildbot/config/blender_linux.cmake b/build_files/buildbot/config/blender_linux.cmake
index 6806684e88b..2047c28deb9 100644
--- a/build_files/buildbot/config/blender_linux.cmake
+++ b/build_files/buildbot/config/blender_linux.cmake
@@ -2,33 +2,20 @@
include("${CMAKE_CURRENT_LIST_DIR}/../../cmake/config/blender_release.cmake")
-# For libc-2.24 we are using chroot which runs on a 64bit system.
-# There we can not use CPU bitness check since it is always 64bit. So instead
-# we check for a specific libraries.
-#
-# Other builders we are running in a bare virtual machine, and the libraries
-# are installed to /opt/.
-# We assume that only 64bit builders exists in such configuration.
-if(EXISTS "/lib/x86_64-linux-gnu/libc-2.24.so")
- message(STATUS "Building in GLibc-2.24 environment")
- set(LIBDIR_NAME "linux_x86_64")
-elseif(EXISTS "/lib/i386-linux-gnu//libc-2.24.so")
- message(STATUS "Building in GLibc-2.24 environment")
- set(LIBDIR_NAME "linux_i686")
-else()
- message(STATUS "Building in generic 64bit environment")
- set(LIBDIR_NAME "linux_x86_64")
-endif()
+message(STATUS "Building in CentOS 7 64bit environment")
+set(LIBDIR_NAME "linux_centos7_x86_64")
# Default to only build Blender
set(WITH_BLENDER ON CACHE BOOL "" FORCE)
# ######## Linux-specific build options ########
# Options which are specific to Linux-only platforms
+
set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE)
# ######## Official release-specific build options ########
# Options which are specific to Linux release builds only
+
set(WITH_JACK_DYNLOAD ON CACHE BOOL "" FORCE)
set(WITH_SDL_DYNLOAD ON CACHE BOOL "" FORCE)
set(WITH_SYSTEM_GLEW OFF CACHE BOOL "" FORCE)
@@ -40,7 +27,7 @@ set(WITH_PYTHON_INSTALL_REQUESTS ON CACHE BOOL "" FORCE)
# ######## Release environment specific settings ########
-set(LIBDIR "/opt/blender-deps/${LIBDIR_NAME}" CACHE BOOL "" FORCE)
+set(LIBDIR "${CMAKE_CURRENT_LIST_DIR}/../../../../lib/${LIBDIR_NAME}" CACHE STRING "" FORCE)
# Platform specific configuration, to ensure static linking against everything.
diff --git a/build_files/buildbot/slave_pack.py b/build_files/buildbot/slave_pack.py
index a7729843a0e..5bef2b81739 100644
--- a/build_files/buildbot/slave_pack.py
+++ b/build_files/buildbot/slave_pack.py
@@ -32,8 +32,9 @@ def get_package_name(builder, platform=None):
package_name = 'blender-' + info.full_version
if platform:
package_name += '-' + platform
- if builder.branch != 'master' and info.is_development_build:
- package_name = builder.branch + "-" + package_name
+ if not (builder.branch == 'master' or builder.is_release_branch):
+ if info.is_development_build:
+ package_name = builder.branch + "-" + package_name
return package_name
@@ -47,6 +48,7 @@ def create_buildbot_upload_zip(builder, package_files):
try:
z = zipfile.ZipFile(buildbot_upload_zip, "w", compression=zipfile.ZIP_STORED)
for filepath, filename in package_files:
+ print("Packaged", filename)
z.write(filepath, arcname=filename)
z.close()
except Exception as ex:
@@ -147,20 +149,6 @@ def pack_linux(builder):
py_target = os.path.join(builder.install_dir, info.version)
buildbot_utils.call(builder.command_prefix + ['find', py_target, '-iname', '*.so', '-exec', 'strip', '-s', '{}', ';'])
- # Copy all specific files which are too specific to be copied by
- # the CMake rules themselves
- print("Copying extra scripts and libs...")
-
- extra = '/' + os.path.join('home', 'sources', 'release-builder', 'extra')
- mesalibs = os.path.join(extra, 'mesalibs' + str(builder.bits) + '.tar.bz2')
- software_gl = os.path.join(builder.blender_dir, 'release', 'bin', 'blender-softwaregl')
- icons = os.path.join(builder.blender_dir, 'release', 'freedesktop', 'icons')
-
- os.system('tar -xpf %s -C %s' % (mesalibs, builder.install_dir))
- os.system('cp %s %s' % (software_gl, builder.install_dir))
- os.system('cp -r %s %s' % (icons, builder.install_dir))
- os.system('chmod 755 %s' % (os.path.join(builder.install_dir, 'blender-softwaregl')))
-
# Construct package name
platform_name = 'linux-' + blender_glibc + '-' + blender_arch
package_name = get_package_name(builder, platform_name)
diff --git a/build_files/buildbot/slave_update.py b/build_files/buildbot/slave_update.py
index 39f449b87bc..36a7ae31c84 100644
--- a/build_files/buildbot/slave_update.py
+++ b/build_files/buildbot/slave_update.py
@@ -28,4 +28,4 @@ if __name__ == "__main__":
# Run make update which handles all libraries and submodules.
make_update = os.path.join(builder.blender_dir, "build_files", "utils", "make_update.py")
- buildbot_utils.call([sys.executable, make_update, '--no-blender', "--use-tests"])
+ buildbot_utils.call([sys.executable, make_update, '--no-blender', "--use-tests", "--use-centos-libraries"])
diff --git a/build_files/cmake/Modules/GTestTesting.cmake b/build_files/cmake/Modules/GTestTesting.cmake
index 1c98a6456b8..a93e829e6b0 100644
--- a/build_files/cmake/Modules/GTestTesting.cmake
+++ b/build_files/cmake/Modules/GTestTesting.cmake
@@ -48,6 +48,14 @@ macro(BLENDER_SRC_GTEST_EX NAME SRC EXTRA_LIBS DO_ADD_TEST)
if(WITH_OPENMP_STATIC)
target_link_libraries(${TARGET_NAME} ${OpenMP_LIBRARIES})
endif()
+
+ get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ if(GENERATOR_IS_MULTI_CONFIG)
+ string(REPLACE "\${BUILD_TYPE}" "$<CONFIG>" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
+ else()
+ string(REPLACE "\${BUILD_TYPE}" "" TEST_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
+ endif()
+
set_target_properties(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${TESTS_OUTPUT_DIR}"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${TESTS_OUTPUT_DIR}"
diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake
index 403d38f6a05..4c47c4c4dba 100644
--- a/build_files/cmake/config/blender_full.cmake
+++ b/build_files/cmake/config/blender_full.cmake
@@ -49,6 +49,7 @@ set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE)
set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE)
set(WITH_RAYOPTIMIZATION ON CACHE BOOL "" FORCE)
set(WITH_SDL ON CACHE BOOL "" FORCE)
+set(WITH_TBB ON CACHE BOOL "" FORCE)
set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE)
set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake
index 37cbfa27972..6d0f160c764 100644
--- a/build_files/cmake/config/blender_lite.cmake
+++ b/build_files/cmake/config/blender_lite.cmake
@@ -54,5 +54,6 @@ set(WITH_OPENVDB OFF CACHE BOOL "" FORCE)
set(WITH_QUADRIFLOW OFF CACHE BOOL "" FORCE)
set(WITH_RAYOPTIMIZATION OFF CACHE BOOL "" FORCE)
set(WITH_SDL OFF CACHE BOOL "" FORCE)
+set(WITH_TBB OFF CACHE BOOL "" FORCE)
set(WITH_X11_XINPUT OFF CACHE BOOL "" FORCE)
set(WITH_X11_XF86VMODE OFF CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake
index cb338f40a7b..cf849519c83 100644
--- a/build_files/cmake/config/blender_release.cmake
+++ b/build_files/cmake/config/blender_release.cmake
@@ -50,6 +50,7 @@ set(WITH_PYTHON_INSTALL ON CACHE BOOL "" FORCE)
set(WITH_QUADRIFLOW ON CACHE BOOL "" FORCE)
set(WITH_RAYOPTIMIZATION ON CACHE BOOL "" FORCE)
set(WITH_SDL ON CACHE BOOL "" FORCE)
+set(WITH_TBB ON CACHE BOOL "" FORCE)
set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE)
set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE)
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index e159dd9e5ee..c3025be34ba 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -460,13 +460,16 @@ function(setup_liblinks
target_link_libraries(${target} ${OSL_LIBRARIES})
endif()
if(WITH_OPENVDB)
- target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${TBB_LIBRARIES} ${BLOSC_LIBRARIES})
+ target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${BLOSC_LIBRARIES})
endif()
if(WITH_OPENIMAGEIO)
target_link_libraries(${target} ${OPENIMAGEIO_LIBRARIES})
endif()
if(WITH_OPENIMAGEDENOISE)
- target_link_libraries(${target} ${OPENIMAGEDENOISE_LIBRARIES} ${TBB_LIBRARIES})
+ target_link_libraries(${target} ${OPENIMAGEDENOISE_LIBRARIES})
+ endif()
+ if(WITH_TBB)
+ target_link_libraries(${target} ${TBB_LIBRARIES})
endif()
if(WITH_OPENCOLORIO)
target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES})
@@ -1209,7 +1212,9 @@ macro(openmp_delayload
)
if(MSVC)
if(WITH_OPENMP)
- if(MSVC_VERSION EQUAL 1800)
+ if(MSVC_CLANG)
+ set(OPENMP_DLL_NAME "libomp")
+ elseif(MSVC_VERSION EQUAL 1800)
set(OPENMP_DLL_NAME "vcomp120")
else()
set(OPENMP_DLL_NAME "vcomp140")
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 249546dd216..3ae3b2b66b5 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -157,7 +157,7 @@ if(WITH_CODEC_FFMPEG)
avcodec avdevice avformat avutil
mp3lame swscale x264 xvidcore
theora theoradec theoraenc
- vorbis vorbisenc vorbisfile ogg
+ vorbis vorbisenc vorbisfile ogg opus
vpx swresample)
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
endif()
@@ -313,9 +313,7 @@ endif()
if(WITH_OPENVDB)
set(OPENVDB ${LIBDIR}/openvdb)
set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
- set(TBB_INCLUDE_DIRS ${LIBDIR}/tbb/include)
- set(TBB_LIBRARIES ${LIBDIR}/tbb/lib/libtbb.a)
- set(OPENVDB_LIBRARIES openvdb blosc ${TBB_LIBRARIES})
+ set(OPENVDB_LIBRARIES openvdb blosc)
set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
set(OPENVDB_DEFINITIONS)
endif()
@@ -386,14 +384,25 @@ endif()
if(WITH_OPENIMAGEDENOISE)
find_package(OpenImageDenoise)
- find_package(TBB)
if(NOT OPENIMAGEDENOISE_FOUND)
set(WITH_OPENIMAGEDENOISE OFF)
message(STATUS "OpenImageDenoise not found")
- elseif(NOT TBB_FOUND)
+ endif()
+endif()
+
+if(WITH_TBB)
+ find_package(TBB)
+endif()
+
+if(NOT WITH_TBB OR NOT TBB_FOUND)
+ if(WITH_OPENIMAGEDENOISE)
+ message(STATUS "TBB not found, disabling OpenImageDenoise")
set(WITH_OPENIMAGEDENOISE OFF)
- message(STATUS "TBB not found")
+ endif()
+ if(WITH_OPENVDB)
+ message(STATUS "TBB not found, disabling OpenVDB")
+ set(WITH_OPENVDB OFF)
endif()
endif()
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index 1b3f9cf3fad..c48780ebd6a 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -22,14 +22,30 @@
# Detect precompiled library directory
if(NOT DEFINED LIBDIR)
+ # Path to a locally compiled libraries.
set(LIBDIR_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR})
string(TOLOWER ${LIBDIR_NAME} LIBDIR_NAME)
- set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME})
-else()
- message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
+ set(LIBDIR_NATIVE_ABI ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME})
+
+ # Path to precompiled libraries with known CentOS 7 ABI.
+ set(LIBDIR_CENTOS7_ABI ${CMAKE_SOURCE_DIR}/../lib/linux_centos7_x86_64)
+
+ # Choose the best suitable libraries.
+ if(EXISTS ${LIBDIR_NATIVE_ABI})
+ set(LIBDIR ${LIBDIR_NATIVE_ABI})
+ elseif(EXISTS ${LIBDIR_CENTOS7_ABI})
+ set(LIBDIR ${LIBDIR_CENTOS7_ABI})
+ set(WITH_CXX11_ABI OFF)
+ endif()
+
+ # Avoid namespace pollustion.
+ unset(LIBDIR_NATIVE_ABI)
+ unset(LIBDIR_CENTOS7_ABI)
endif()
if(EXISTS ${LIBDIR})
+ message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
+
file(GLOB LIB_SUBDIRS ${LIBDIR}/*)
# NOTE: Make sure "proper" compiled zlib comes first before the one
# which is a part of OpenCollada. They have different ABI, and we
@@ -244,13 +260,8 @@ endif()
if(WITH_OPENVDB)
find_package_wrapper(OpenVDB)
- find_package_wrapper(TBB)
find_package_wrapper(Blosc)
- if(NOT TBB_FOUND)
- set(WITH_OPENVDB OFF)
- set(WITH_OPENVDB_BLOSC OFF)
- message(STATUS "TBB not found, disabling OpenVDB")
- elseif(NOT OPENVDB_FOUND)
+ if(NOT OPENVDB_FOUND)
set(WITH_OPENVDB OFF)
set(WITH_OPENVDB_BLOSC OFF)
message(STATUS "OpenVDB not found, disabling it")
@@ -416,6 +427,21 @@ if(WITH_OPENSUBDIV)
endif()
endif()
+if(WITH_TBB)
+ find_package_wrapper(TBB)
+endif()
+
+if(NOT WITH_TBB OR NOT TBB_FOUND)
+ if(WITH_OPENIMAGEDENOISE)
+ message(STATUS "TBB not found, disabling OpenImageDenoise")
+ set(WITH_OPENIMAGEDENOISE OFF)
+ endif()
+ if(WITH_OPENVDB)
+ message(STATUS "TBB not found, disabling OpenVDB")
+ set(WITH_OPENVDB OFF)
+ endif()
+endif()
+
# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
if(HAIKU)
list(APPEND PLATFORM_LINKLIBS -lnetwork)
diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake
index b2277c440fe..ef7722b0aef 100644
--- a/build_files/cmake/platform/platform_win32.cmake
+++ b/build_files/cmake/platform/platform_win32.cmake
@@ -35,6 +35,22 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
else()
message("Unable to detect the Visual Studio redist directory, copying of the runtime dlls will not work, try running from the visual studio developer prompt.")
endif()
+ # 1) CMake has issues detecting openmp support in clang-cl so we have to provide
+ # the right switches here.
+ # 2) While the /openmp switch *should* work, it currently doesn't as for clang 9.0.0
+ if(WITH_OPENMP)
+ set(OPENMP_CUSTOM ON)
+ set(OPENMP_FOUND ON)
+ set(OpenMP_C_FLAGS "/clang:-fopenmp")
+ set(OpenMP_CXX_FLAGS "/clang:-fopenmp")
+ GET_FILENAME_COMPONENT(LLVMROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM;]" ABSOLUTE CACHE)
+ set(CLANG_OPENMP_DLL "${LLVMROOT}/bin/libomp.dll")
+ set(CLANG_OPENMP_LIB "${LLVMROOT}/lib/libomp.lib")
+ if(NOT EXISTS "${CLANG_OPENMP_DLL}")
+ message(FATAL_ERROR "Clang OpenMP library (${CLANG_OPENMP_DLL}) not found.")
+ endif()
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \"${CLANG_OPENMP_LIB}\"")
+ endif()
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS})
@@ -96,7 +112,7 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO")
list(APPEND PLATFORM_LINKLIBS
- ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32
+ ws2_32 vfw32 winmm kernel32 user32 gdi32 comdlg32 Comctl32
advapi32 shfolder shell32 ole32 oleaut32 uuid psapi Dbghelp
)
@@ -475,25 +491,20 @@ endif()
if(WITH_OPENVDB)
set(BLOSC_LIBRARIES optimized ${LIBDIR}/blosc/lib/libblosc.lib debug ${LIBDIR}/blosc/lib/libblosc_d.lib)
- set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
- set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
set(OPENVDB ${LIBDIR}/openVDB)
set(OPENVDB_LIBPATH ${OPENVDB}/lib)
- set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include ${TBB_INCLUDE_DIR})
- set(OPENVDB_LIBRARIES optimized ${OPENVDB_LIBPATH}/openvdb.lib debug ${OPENVDB_LIBPATH}/openvdb_d.lib ${TBB_LIBRARIES} ${BLOSC_LIBRARIES})
+ set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
+ set(OPENVDB_LIBRARIES optimized ${OPENVDB_LIBPATH}/openvdb.lib debug ${OPENVDB_LIBPATH}/openvdb_d.lib ${BLOSC_LIBRARIES})
set(OPENVDB_DEFINITIONS -DNOMINMAX)
endif()
if(WITH_OPENIMAGEDENOISE)
- set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
- set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
set(OPENIMAGEDENOISE ${LIBDIR}/OpenImageDenoise)
set(OPENIMAGEDENOISE_LIBPATH ${LIBDIR}/OpenImageDenoise/lib)
- set(OPENIMAGEDENOISE_INCLUDE_DIRS ${OPENIMAGEDENOISE}/include ${TBB_INCLUDE_DIR})
+ set(OPENIMAGEDENOISE_INCLUDE_DIRS ${OPENIMAGEDENOISE}/include)
set(OPENIMAGEDENOISE_LIBRARIES
optimized ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise.lib ${OPENIMAGEDENOISE_LIBPATH}/common.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn.lib
- debug ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise_d.lib ${OPENIMAGEDENOISE_LIBPATH}/common_d.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn_d.lib
- ${TBB_LIBRARIES})
+ debug ${OPENIMAGEDENOISE_LIBPATH}/OpenImageDenoise_d.lib ${OPENIMAGEDENOISE_LIBPATH}/common_d.lib ${OPENIMAGEDENOISE_LIBPATH}/mkldnn_d.lib)
set(OPENIMAGEDENOISE_DEFINITIONS)
endif()
@@ -558,6 +569,21 @@ if(WITH_SYSTEM_AUDASPACE)
set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
endif()
+if(WITH_TBB)
+ set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
+ set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
+ set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
+else()
+ if(WITH_OPENIMAGEDENOISE)
+ message(STATUS "TBB disabled, also disabling OpenImageDenoise")
+ set(WITH_OPENIMAGEDENOISE OFF)
+ endif()
+ if(WITH_OPENVDB)
+ message(STATUS "TBB disabled, also disabling OpenVDB")
+ set(WITH_OPENVDB OFF)
+ endif()
+endif()
+
# used in many places so include globally, like OpenGL
blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
diff --git a/build_files/utils/make_test.py b/build_files/utils/make_test.py
index a8a6afc43cc..309ab36ecdd 100755
--- a/build_files/utils/make_test.py
+++ b/build_files/utils/make_test.py
@@ -39,7 +39,8 @@ if make_utils.command_missing(git_command):
sys.exit(1)
# Test if we are building a specific release version.
-release_version = make_utils.git_branch_release_version(git_command)
+branch = make_utils.git_branch(git_command)
+release_version = make_utils.git_branch_release_version(branch)
lib_tests_dirpath = os.path.join('..', 'lib', "tests")
if not os.path.exists(lib_tests_dirpath):
diff --git a/build_files/utils/make_update.py b/build_files/utils/make_update.py
index 3ecfa218432..ec72514fdfc 100755
--- a/build_files/utils/make_update.py
+++ b/build_files/utils/make_update.py
@@ -28,13 +28,17 @@ def parse_arguments():
parser.add_argument("--use-tests", action="store_true")
parser.add_argument("--svn-command", default="svn")
parser.add_argument("--git-command", default="git")
+ parser.add_argument("--use-centos-libraries", action="store_true")
return parser.parse_args()
+def get_blender_git_root():
+ return check_output([args.git_command, "rev-parse", "--show-toplevel"])
+
# Setup for precompiled libraries and tests from svn.
def svn_update(args, release_version):
svn_non_interactive = [args.svn_command, '--non-interactive']
- lib_dirpath = os.path.join('..', 'lib')
+ lib_dirpath = os.path.join(get_blender_git_root(), '..', 'lib')
svn_url = make_utils.svn_libraries_base_url(release_version)
# Checkout precompiled libraries
@@ -45,6 +49,8 @@ def svn_update(args, release_version):
# this script is bundled as part of the precompiled libraries. However it
# is used by the buildbot.
lib_platform = "win64_vc14"
+ elif args.use_centos_libraries:
+ lib_platform = "linux_centos7_x86_64"
else:
# No precompiled libraries for Linux.
lib_platform = None
@@ -81,10 +87,14 @@ def svn_update(args, release_version):
if os.path.isdir(lib_dirpath):
for dirname in os.listdir(lib_dirpath):
+ dirpath = os.path.join(lib_dirpath, dirname)
+
if dirname == ".svn":
+ # Cleanup must be run from svn root directory if it exists.
+ if not make_utils.command_missing(args.svn_command):
+ call(svn_non_interactive + ["cleanup", lib_dirpath])
continue
- dirpath = os.path.join(lib_dirpath, dirname)
svn_dirpath = os.path.join(dirpath, ".svn")
svn_root_dirpath = os.path.join(lib_dirpath, ".svn")
@@ -94,21 +104,23 @@ def svn_update(args, release_version):
sys.stderr.write("svn not found, can't update libraries\n")
sys.exit(1)
- call(svn_non_interactive + ["cleanup", dirpath])
+ # Cleanup to continue with interrupted downloads.
+ if os.path.exists(svn_dirpath):
+ call(svn_non_interactive + ["cleanup", dirpath])
+ # Switch to appropriate branch and update.
call(svn_non_interactive + ["switch", svn_url + dirname, dirpath])
call(svn_non_interactive + ["update", dirpath])
-
-# Update blender repository.
-def blender_update_skip(args):
+# Test if git repo can be updated.
+def git_update_skip(args, check_remote_exists=True):
if make_utils.command_missing(args.git_command):
sys.stderr.write("git not found, can't update code\n")
sys.exit(1)
# Abort if a rebase is still progress.
- rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge'])
- rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply'])
- merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD'])
+ rebase_merge = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-merge'], exit_on_error=False)
+ rebase_apply = check_output([args.git_command, 'rev-parse', '--git-path', 'rebase-apply'], exit_on_error=False)
+ merge_head = check_output([args.git_command, 'rev-parse', '--git-path', 'MERGE_HEAD'], exit_on_error=False)
if os.path.exists(rebase_merge) or \
os.path.exists(rebase_apply) or \
os.path.exists(merge_head):
@@ -120,49 +132,92 @@ def blender_update_skip(args):
return "you have unstaged changes"
# Test if there is an upstream branch configured
- branch = check_output([args.git_command, "rev-parse", "--abbrev-ref", "HEAD"])
- remote = check_output([args.git_command, "config", "branch." + branch + ".remote"], exit_on_error=False)
- if len(remote) == 0:
- return "no remote branch to pull from"
+ if check_remote_exists:
+ branch = check_output([args.git_command, "rev-parse", "--abbrev-ref", "HEAD"])
+ remote = check_output([args.git_command, "config", "branch." + branch + ".remote"], exit_on_error=False)
+ if len(remote) == 0:
+ return "no remote branch to pull from"
- return None
+ return ""
+# Update blender repository.
def blender_update(args):
print_stage("Updating Blender Git Repository")
call([args.git_command, "pull", "--rebase"])
# Update submodules.
-def submodules_update(args, release_version):
+def submodules_update(args, release_version, branch):
print_stage("Updating Submodules")
if make_utils.command_missing(args.git_command):
sys.stderr.write("git not found, can't update code\n")
sys.exit(1)
- call([args.git_command, "submodule", "update", "--init", "--recursive"])
+ # Update submodules to latest master or appropriate release branch.
if not release_version:
- # Update submodules to latest master if not building a specific release.
- # In that case submodules are set to a specific revision, which is checked
- # out by running "git submodule update".
- call([args.git_command, "submodule", "foreach", "git", "checkout", "master"])
- call([args.git_command, "submodule", "foreach", "git", "pull", "--rebase", "origin", "master"])
+ branch = "master"
+
+ submodules = [
+ ("release/scripts/addons", branch),
+ ("release/scripts/addons_contrib", branch),
+ ("release/datafiles/locale", branch),
+ ("source/tools", branch),
+ ]
+
+ # Initialize submodules only if needed.
+ for submodule_path, submodule_branch in submodules:
+ if not os.path.exists(os.path.join(submodule_path, ".git")):
+ call([args.git_command, "submodule", "update", "--init", "--recursive"])
+ break
+
+ # Checkout appropriate branch and pull changes.
+ skip_msg = ""
+ for submodule_path, submodule_branch in submodules:
+ cwd = os.getcwd()
+ try:
+ os.chdir(submodule_path)
+ msg = git_update_skip(args, check_remote_exists=False)
+ if msg:
+ skip_msg += submodule_path + " skipped: " + msg + "\n"
+ else:
+ if make_utils.git_branch(args.git_command) != submodule_branch:
+ call([args.git_command, "fetch", "origin"])
+ call([args.git_command, "checkout", submodule_branch])
+ call([args.git_command, "pull", "--rebase", "origin", submodule_branch])
+ finally:
+ os.chdir(cwd)
+
+ return skip_msg
if __name__ == "__main__":
args = parse_arguments()
- blender_skipped = None
+ blender_skip_msg = ""
+ submodules_skip_msg = ""
# Test if we are building a specific release version.
- release_version = make_utils.git_branch_release_version(args.git_command)
+ branch = make_utils.git_branch(args.git_command)
+ release_version = make_utils.git_branch_release_version(branch)
if not args.no_libraries:
svn_update(args, release_version)
if not args.no_blender:
- blender_skipped = blender_update_skip(args)
- if not blender_skipped:
+ blender_skip_msg = git_update_skip(args)
+ if blender_skip_msg:
+ blender_skip_msg = "Blender repository skipped: " + blender_skip_msg + "\n"
+ else:
blender_update(args)
if not args.no_submodules:
- submodules_update(args, release_version)
-
- if blender_skipped:
- print_stage("Blender repository skipped: " + blender_skipped)
+ submodules_skip_msg = submodules_update(args, release_version, branch)
+
+ # Report any skipped repositories at the end, so it's not as easy to miss.
+ skip_msg = blender_skip_msg + submodules_skip_msg
+ if skip_msg:
+ print_stage(skip_msg.strip())
+
+ # For failed submodule update we throw an error, since not having correct
+ # submodules can make Blender throw errors.
+ # For Blender itself we don't and consider "make update" to be a command
+ # you can use while working on uncommitted code.
+ if submodules_skip_msg:
+ sys.exit(1)
diff --git a/build_files/utils/make_utils.py b/build_files/utils/make_utils.py
index 5fedd792149..7b21bc607a4 100755
--- a/build_files/utils/make_utils.py
+++ b/build_files/utils/make_utils.py
@@ -35,7 +35,7 @@ def check_output(cmd, exit_on_error=True):
return output.strip()
-def git_branch_release_version(git_command):
+def git_branch(git_command):
# Test if we are building a specific release version.
try:
branch = subprocess.check_output([git_command, "rev-parse", "--abbrev-ref", "HEAD"])
@@ -43,7 +43,9 @@ def git_branch_release_version(git_command):
sys.stderr.write("Failed to get Blender git branch\n")
sys.exit(1)
- branch = branch.strip().decode('utf8')
+ return branch.strip().decode('utf8')
+
+def git_branch_release_version(branch):
release_version = re.search("^blender-v(.*)-release$", branch)
if release_version:
release_version = release_version.group(1)