mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-07-23 00:51:15 +03:00

* chore(build): add vendored SDL 3.0.0 library * chore(build): add vendored glew-cmake-2.2.0 library * feat(console): in the presence of -opengl launch flag, change GxApi to OpenGl * feat(gx): add uncompleted CGxDeviceGLSDL targeting Windows and Linux * chore(build): change SDL3 linkage from shared (bad) to to static (good)
240 lines
6.8 KiB
Bash
240 lines
6.8 KiB
Bash
#!/bin/bash
|
|
#
|
|
# This script is used for auto maintaining
|
|
# - merging with original repo
|
|
# - regenerating sources and headers
|
|
# - push changes to repository
|
|
#
|
|
set -euxo pipefail
|
|
|
|
ORIGINAL_REPO_URL=https://github.com/nigels-com/glew.git
|
|
absolute_path () {
|
|
local TARGET_FILE=$1
|
|
shift
|
|
local OUT=$1
|
|
shift
|
|
pushd `dirname $TARGET_FILE`
|
|
TARGET_FILE=`basename $TARGET_FILE`
|
|
|
|
# Iterate down a (possible) chain of symlinks
|
|
while [ -L "$TARGET_FILE" ]
|
|
do
|
|
TARGET_FILE=`readlink $TARGET_FILE`
|
|
cd `dirname $TARGET_FILE`
|
|
TARGET_FILE=`basename $TARGET_FILE`
|
|
done
|
|
|
|
# Compute the canonicalized name by finding the physical path
|
|
# for the directory we're in and appending the target file.
|
|
PHYS_DIR=`pwd -P`
|
|
RESULT=$PHYS_DIR/$TARGET_FILE
|
|
eval "$OUT=\"${RESULT}\""
|
|
popd
|
|
}
|
|
|
|
if [ -z "${WORKSPACE:-}" ]; then
|
|
echo "Set WORKSPACE as default value"
|
|
absolute_path "$0" SCRIPT_PATH
|
|
WORKSPACE=$(dirname "$SCRIPT_PATH")
|
|
WORKSPACE=$(dirname "$WORKSPACE")
|
|
echo "WORKSPACE=$WORKSPACE"
|
|
fi
|
|
|
|
if [ -z "${TEST_MODE:-}" -o "${TEST_MODE:-}" != "false" ]; then
|
|
PUSH_ARG="--dry-run"
|
|
else
|
|
PUSH_ARG=""
|
|
fi
|
|
|
|
source_update () {
|
|
GIT_BRANCH_NAME=$1
|
|
# for recovery when test mode.
|
|
PUSH_COUNT=0
|
|
|
|
echo "Checkout branch ${GIT_BRANCH_NAME}"
|
|
git reset --hard
|
|
git clean -f .
|
|
if [ `git branch | grep ${GIT_BRANCH_NAME} | wc -l` = 0 ]; then
|
|
git checkout origin/${GIT_BRANCH_NAME} -b ${GIT_BRANCH_NAME}
|
|
else
|
|
git checkout -f $GIT_BRANCH_NAME
|
|
git pull -s recursive -X theirs --no-edit --progress origin
|
|
fi
|
|
echo "Pull from origin repository(${ORIGINAL_REPO_URL})"
|
|
BEFORE_COMMIT=`git rev-parse HEAD`
|
|
git pull -s recursive -X theirs --no-edit --commit --progress original_repo ${GIT_BRANCH_NAME}
|
|
AFTER_COMMIT=`git rev-parse HEAD`
|
|
if [ "$BEFORE_COMMIT" != "$AFTER_COMMIT" ]; then
|
|
echo "Source Updated"
|
|
git checkout "original_repo/${GIT_BRANCH_NAME}" -- README.md
|
|
git mv -f README.md README_glew.md
|
|
git checkout $BEFORE_COMMIT -- README.md
|
|
git add -f README.md README_glew.md
|
|
git commit --amend -m "Merge ${ORIGINAL_REPO_URL} into ${GIT_BRANCH_NAME} HEAD at $(TZ=GMT date)"
|
|
git push ${PUSH_ARG} origin $GIT_BRANCH_NAME:$GIT_BRANCH_NAME
|
|
PUSH_COUNT=$((PUSH_COUNT + 1))
|
|
fi
|
|
|
|
cd "$WORKSPACE/auto"
|
|
echo "CleanUp"
|
|
make clean
|
|
cd "$WORKSPACE/auto"
|
|
REGISTRIES=`find . -name .git -type d -exec dirname {} \;`
|
|
for REGISTRY in $REGISTRIES
|
|
do
|
|
rm -rf $REGISTRY
|
|
done
|
|
cd "$WORKSPACE"
|
|
echo "Generated Source Update"
|
|
make extensions
|
|
echo "Diff sources"
|
|
git add --force src/glew.c src/glewinfo.c include/GL/* doc/* build/*.rc
|
|
# Check is there any staged changes?
|
|
if [ `git diff --cached | wc -c` -ne 0 ]; then
|
|
# Commit and push it
|
|
echo "Sources updated"
|
|
git commit -m"Generate Sources of ${GIT_BRANCH_NAME} updated at $(TZ=GMT date)"
|
|
echo "Push to repository"
|
|
git push ${PUSH_ARG} origin ${GIT_BRANCH_NAME}:${GIT_BRANCH_NAME}
|
|
PUSH_COUNT=$((PUSH_COUNT + 1))
|
|
else
|
|
echo "Differences Not found"
|
|
fi
|
|
|
|
# when test mode, reset created commits
|
|
if [ -n "$PUSH_ARG" ]; then
|
|
echo "Reset commits"
|
|
git reset --hard HEAD~${PUSH_COUNT}
|
|
fi
|
|
}
|
|
|
|
import_tags () {
|
|
echo "Fetch tags from origin repository(${ORIGINAL_REPO_URL})"
|
|
BEFORE_TAG_COUNT=`git tag | wc -l | sed "s/^ \+//"`
|
|
git fetch --tags --progress original_repo
|
|
AFTER_TAG_COUNT=`git tag | wc -l | sed "s/^ \+//"`
|
|
NEW_VERSION_TAGS=`diff -u <(git tag | grep glew-cmake- | sed s/glew-cmake/glew/) <(git tag | grep "glew-[0-9]") | grep ^+ | sed 1d | sed s/^+// || true`
|
|
if [ ! $BEFORE_TAG_COUNT -eq $AFTER_TAG_COUNT -o ! -z "$NEW_VERSION_TAGS" ]; then
|
|
echo "Tags updated"
|
|
git push ${PUSH_ARG} --tags origin
|
|
|
|
git checkout glew-cmake-release
|
|
for TAG in $NEW_VERSION_TAGS
|
|
do
|
|
echo "Import $TAG"
|
|
git checkout $TAG -- .
|
|
git mv -f README.md README_glew.md
|
|
git checkout master -- CMakeLists.txt GeneratePkgConfig.cmake README.md
|
|
cd "$WORKSPACE/auto"
|
|
COMMIT_TIME=`git log -1 $TAG --format=%ct`
|
|
echo "Patch perl scripts for new version"
|
|
find bin -name '*.pl' -exec sed -i "s/do 'bin/use lib '.';\ndo 'bin/" {} \;
|
|
echo "Remove registries"
|
|
REGISTRIES=`find . -name .git -type d -exec dirname {} \;`
|
|
for REGISTRY in $REGISTRIES
|
|
do
|
|
rm -rf $REGISTRY
|
|
done
|
|
echo "Run code generation to download registries"
|
|
make clean
|
|
cd "$WORKSPACE"
|
|
make extensions
|
|
echo "Rewind registry repos"
|
|
cd "$WORKSPACE/auto"
|
|
make clean
|
|
REGISTRIES=`find . -name .git -type d -exec dirname {} \;`
|
|
for REGISTRY in $REGISTRIES
|
|
do
|
|
cd "$WORKSPACE/auto/$REGISTRY"
|
|
PROPER_COMMIT=`git log --until=$COMMIT_TIME -1 --format=%H`
|
|
git checkout --force $PROPER_COMMIT
|
|
find . -name .dummy -exec touch {} \;
|
|
done
|
|
echo "CleanUp for tag"
|
|
cd "$WORKSPACE/auto"
|
|
# remove previous data
|
|
rm -rf extensions
|
|
echo "Generate source code"
|
|
make
|
|
cd "$WORKSPACE"
|
|
git reset
|
|
git add --force src include doc CMakeLists.txt GeneratePkgConfig.cmake build/*.rc config/version
|
|
if [ `git diff --cached | wc -c` -ne 0 ]; then
|
|
git commit -m"glew-cmake release from $TAG"
|
|
NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/`
|
|
git tag $NEW_TAG
|
|
else
|
|
echo "No difference! something wrong"
|
|
fi
|
|
done
|
|
|
|
git push ${PUSH_ARG} origin glew-cmake-release
|
|
if [ -z "$PUSH_ARG" ]; then
|
|
git push --tags ${PUSH_ARG} origin
|
|
fi
|
|
|
|
# when test mode, reset created commits
|
|
if [ -n "$PUSH_ARG" ]; then
|
|
echo "Reset commits for tags"
|
|
for TAG in $NEW_VERSION_TAGS
|
|
do
|
|
NEW_TAG=`echo $TAG | sed s/glew-/glew-cmake-/`
|
|
git tag -d $NEW_TAG
|
|
git reset --hard HEAD~1
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# add remote when original repo is not found in local repo
|
|
if [ `git remote | grep original_repo | wc -l` = 0 ]; then
|
|
git remote add original_repo ${ORIGINAL_REPO_URL}
|
|
fi
|
|
|
|
git fetch -n original_repo
|
|
|
|
branch_list () {
|
|
eval "$2=\"`git branch -r | grep $1 | sed "s/\s\+$1\///g" | sed ':a;N;$!ba;s/\n/ /g'`\""
|
|
}
|
|
|
|
contains () {
|
|
local OUT=$1
|
|
shift
|
|
local seeking=$1
|
|
shift
|
|
local in=1
|
|
for element in $*; do
|
|
if [ $element = $seeking ]; then
|
|
in=0
|
|
break
|
|
fi
|
|
done
|
|
eval "$OUT=\"${in}\""
|
|
}
|
|
|
|
#branch_list original_repo ORIGINAL_REPO_BRANCH_LIST
|
|
#branch_list origin ORIGIN_REPO_BRANCH_LIST
|
|
|
|
join () {
|
|
local OUT=$1
|
|
shift
|
|
local value="`echo $* | sed "s/ /\n/g" | sort -u | sed ':a;N;$!ba;s/\n/ /g'`"
|
|
eval "$OUT=\"${value}\""
|
|
}
|
|
|
|
#join ALL_BRANCH_LIST $ORIGINAL_REPO_BRANCH_LIST $ORIGIN_REPO_BRANCH_LIST
|
|
#
|
|
#for branch in $ALL_BRANCH_LIST; do
|
|
# contains IN_ORIGINAL_REPO $branch $ORIGINAL_REPO_BRANCH_LIST
|
|
# if [ $IN_ORIGINAL_REPO = 1 ]; then
|
|
# if [ $branch != "glew-cmake-release" ]; then
|
|
# git push ${PUSH_ARG} origin :$branch
|
|
# fi
|
|
# else
|
|
# source_update $branch
|
|
# fi
|
|
#done
|
|
|
|
source_update master
|
|
|
|
import_tags |