#!/bin/sh # This script can run from any location, # output is created in the $CWD # # [g.ghibo] - modified version of the internal blender's build_tgz.sh - 2020-09-21 # Force blender release versioning to 3.6.5 BLENDER_VER=3.6.5 BLENDER_BRANCH=-v3.6-release if [ ! -e blender ]; then git clone --recursive -b blender${BLENDER_BRANCH} https://projects.blender.org/blender/blender else git pull fi pushd blender make update GITDATE=$(git log -n 1 --pretty='format:%cd' --date=format:'%Y%m%d' HEAD) popd BASE_DIR="$PWD" blender_srcdir=${BASE_DIR}/blender blender_version=$(grep "BLENDER_VERSION\s" "$blender_srcdir/source/blender/blenkernel/BKE_blender_version.h" | awk '{print $3}') blender_version_char=$(grep "BLENDER_VERSION_CHAR\s" "$blender_srcdir/source/blender/blenkernel/BKE_blender_version.h" | awk '{print $3}') blender_version_cycle=$(grep "BLENDER_VERSION_CYCLE\s" "$blender_srcdir/source/blender/blenkernel/BKE_blender_version.h" | awk '{print $3}') blender_subversion=$(grep "BLENDER_SUBVERSION\s" "$blender_srcdir/source/blender/blenkernel/BKE_blender_version.h" | awk '{print $3}') if [ "$blender_version_cycle" = "release" ] ; then VERSION=$(expr $blender_version / 100).$(expr $blender_version % 100)$blender_version_char SUBMODULE_EXCLUDE="^\(release/scripts/addons_contrib\)$" else VERSION=$(expr $blender_version / 100).$(expr $blender_version % 100)_$blender_subversion SUBMODULE_EXCLUDE="^$" # dummy regex fi # override VERSION with git date VERSION=${BLENDER_VER}-git${GITDATE} MANIFEST="blender-$VERSION-manifest.txt" TARBALL="blender-$VERSION.tar.gz" cd "$blender_srcdir" # not so nice, but works FILTER_FILES_PY=\ "import os, sys; "\ "[print(l[:-1]) for l in sys.stdin.readlines() "\ "if os.path.isfile(l[:-1]) "\ "if os.path.basename(l[:-1]) not in {"\ "'.gitignore', "\ "'.gitmodules', "\ "'.arcconfig', "\ "}"\ "]" # Generate buildinfo.h. Since this information is derived from git commands, this task should be performed # offline before the tarball is generated stripped from any git information. cmake -DSOURCE_DIR=$blender_srcdir -P $blender_srcdir/build_files/cmake/buildinfo.cmake cp -p $blender_srcdir/build_files/cmake/buildinfo.cmake $blender_srcdir/build_files/cmake/buildinfo.cmake.bak # preserve original git build_hash and commit timestamp into tarball blender_build_hash=$(grep BUILD_HASH buildinfo.h.txt |awk '{print $3}' | sed -e 's@\"@@g') blender_build_branch=$(grep BUILD_BRANCH buildinfo.h.txt |awk '{print $3}' | sed -e 's@\"@@g') blender_build_commit_timestamp=$(grep BUILD_COMMIT_TIMESTAMP buildinfo.h.txt |awk '{print $3}') perl -pi -e "s@MY_WC_HASH \"unknown\"@MY_WC_HASH \"${blender_build_hash}\"@" $blender_srcdir/build_files/cmake/buildinfo.cmake perl -pi -e "s@MY_WC_BRANCH \"unknown\"@MY_WC_BRANCH \"${blender_build_branch}\"@" $blender_srcdir/build_files/cmake/buildinfo.cmake perl -pi -e "s@MY_WC_COMMIT_TIMESTAMP 0@MY_WC_COMMIT_TIMESTAMP ${blender_build_commit_timestamp}@" $blender_srcdir/build_files/cmake/buildinfo.cmake rm -f buildinfo.h.txt buildinfo.h # Build master list echo -n "Building manifest of files: \"$BASE_DIR/$MANIFEST\" ..." git ls-files | python3 -c "$FILTER_FILES_PY" > $BASE_DIR/$MANIFEST # Enumerate submodules for lcv in $(git submodule | awk '{print $2}' | grep -v "$SUBMODULE_EXCLUDE"); do cd "$BASE_DIR" cd "$blender_srcdir/$lcv" git ls-files | python3 -c "$FILTER_FILES_PY" | awk '$0="'"$lcv"/'"$0' >> $BASE_DIR/$MANIFEST cd "$BASE_DIR" done echo "OK" # Create the tarball cd "$blender_srcdir" echo -n "Creating archive: \"$BASE_DIR/$TARBALL\" ..." tar --transform "s,^,blender-$VERSION/,g" \ --use-compress-program="pigz --best" \ --create \ --file="$BASE_DIR/$TARBALL" \ --files-from="$BASE_DIR/$MANIFEST" echo "OK" # restore original buildinfo.cmake in the git tree mv -f $blender_srcdir/build_files/cmake/buildinfo.cmake.bak $blender_srcdir/build_files/cmake/buildinfo.cmake # Create checksum file cd "$BASE_DIR" echo -n "Creating checksum: \"$BASE_DIR/$TARBALL.md5sum\" ..." md5sum "$TARBALL" > "$TARBALL.md5sum" echo "OK" # Cleanup echo -n "Cleaning up ..." rm "$BASE_DIR/$MANIFEST" echo "OK" echo "Done!"