|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #!/bin/bash
-
- # set -x #enable debug
-
- SCRIPTPATH=$(readlink -f $0)
- SCRIPTNAME=$(basename $SCRIPTPATH)
- SCRIPTDIR=$(dirname $SCRIPTPATH)
- git="git"
- HAS_GIT=true
- HEADER_DIR="$SCRIPTDIR/header"
- DOCU_DIR="$SCRIPTDIR/ShaderFile/doc"
- INC_MAJOR=false
- INC_MINOR=false
- INC_BUGFIX=false
-
- function log()
- {
- echo "$@" >&2
- }
-
- function cleaupAndExit()
- {
- if $HAS_GIT && [[ -n "$TAGNAME" ]] && [[ $1 -ne 0 ]]; then
- log "remove git tag $TAGNAME"
- $git tag -d $TAGNAME
- fi
- exit $1
- }
-
- function printHelp()
- {
- printf "script to build libShaderFile release
- Usage:
- $SCRIPTNAME [parameter]
- [] optional parameters
- () required parameters
-
- Parameter:
- --major | -m
- increment major version and reset the minor version before creating git tag
-
- --minor | -n
- increment major version and reset the bugfix version before creating git tag
-
- --bufgix | -b
- increment bugfix version before creating git tag
-
- --help | -h | -?
- print this help
- "
- }
-
- function getLastVersion()
- {
- POS="HEAD"
- TAG=$($git describe --tags --abbrev=0 $POS 2>/dev/null)
- RET=$?
- while [[ $RET -eq 0 ]]; do
- if [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo $(echo $TAG | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
- return 0
- fi
- POS=$TAG"^"
- TAG=$($git describe --tags --abbrev=0 $POS 2>/dev/null)
- RET=$?
- done
- return 1
- }
-
- function incVersion()
- {
- read -r -a PARTS <<< $(echo "$1" | tr "." " ")
- if $INC_MAJOR; then
- ((PARTS[0]++))
- PARTS[1]=0
- fi
- if $INC_MINOR; then
- ((PARTS[1]++))
- PARTS[2]=0
- fi
- if $INC_BUGFIX; then
- ((PARTS[2]++))
- fi
- ((PARTS[3]++))
- local tmp="${PARTS[@]}"
- echo "${tmp// /.}"
- }
-
- function addGitTag()
- {
- local INC_VERSION=true
- log "create git version tag"
- CURRENT=$(getLastVersion)
- if [ $? -ne 0 ]; then
- CURRENT="0.0.0.0"
- INC_VERSION=false
- fi
- local tmp="v$CURRENT"
- LINES=$($git log --pretty=oneline $tmp..HEAD)
- if [ $? -eq 0 ]; then
- DIFF=$(echo $LINES | wc -l)
- if [ $DIFF -eq 0 ] || [ -z "$LINES" ]; then
- log "current commit already has a version tag: $tmp"
- TAGNAME=$tmp
- return 0
- fi
- fi
- if $INC_VERSION; then
- NEWVERSION=$(incVersion $CURRENT)
- else
- NEWVERSION="$CURRENT"
- fi
- log "current version: $CURRENT"
- log "new version: $NEWVERSION"
- local tmp="v$NEWVERSION"
- $git tag $tmp
- if [[ $? -ne 0 ]]; then
- log "unable to create version tag: exit"
- cleaupAndExit 100
- fi
- TAGNAME=$tmp
- return 0
- }
-
- function BuildConfig()
- {
- CONFIG=$1
- POSTFIX=$2
- FILEEXT=$3
-
- printf "\n== build project $CONFIG ==\n"
- lazbuild --build-mode=$CONFIG --build-all --verbose $SCRIPTDIR/libShaderFile.lpi
- if [ $? -ne 0 ]; then
- echo "build failed! exit."
- cleaupAndExit 1
- fi
-
- ZIPDIR="bin/$POSTFIX"
- BINDIR="$ZIPDIR"
- ZIPPATH="$SCRIPTDIR/libShaderFile-$POSTFIX.zip"
- if [ -n "$TAGNAME" ]; then
- mkdir -p "$SCRIPTDIR/$TAGNAME/"
- ZIPPATH="$SCRIPTDIR/$TAGNAME/libShaderFile-$POSTFIX.zip"
- fi
- BINNAME="libShaderFile-$POSTFIX$FILEEXT"
- if [ ! -f $BINNAME ]; then
- echo "file not found: $EXENAME"
- cleaupAndExit 2
- fi
-
- mkdir -p $BINDIR
- mv "$BINNAME" "$BINDIR/" || { log "unable to copy linked binary"; cleaupAndExit 3; }
- # use this to copy data folder instead of data archive: cp -R --preserve=links data $BINDIR || { log "unable to copy data folder"; cleaupAndExit 4; }
- cp -r "$HEADER_DIR" "$BINDIR" || { log "unable to copy header files"; cleaupAndExit 4; }
- cp -r "$DOCU_DIR" "$BINDIR/docu" || { log "unable to copy documentation files"; cleaupAndExit 5; }
-
- pushd $ZIPDIR
- rm -rf $ZIPPATH
- zip -r $ZIPPATH ./* || { log "unable to create zip archive"; cleaupAndExit 6; }
- popd
- }
-
- while [[ $# -gt 0 ]]; do
- case $1 in
- "--major" | "-m")
- INC_MAJOR=true
- ;;
-
- "--minor" | "-n")
- INC_MINOR=true
- ;;
-
- "--bufgix" | "-b")
- INC_BUGFIX=true
- ;;
-
- "--help" | "-h" | "-?")
- printHelp
- cleaupAndExit 0
- ;;
-
- *)
- echo "invalid parameter: $1"
- echo "use --help to get further information"
- ;;
-
- esac
- shift
- done
-
- if $HAS_GIT; then
- GIT_CHANGED=$($git status --untracked-files=all --verbose --porcelain)
- if [[ -n "$GIT_CHANGED" ]]; then
- log "git has uncommited changes. please commit before building a release"
- cleaupAndExit 101
- fi
- addGitTag
- fi
-
- BuildConfig "Win32Release" "i386-win32" ".dll"
- BuildConfig "Win64Release" "x86_64-win64" ".dll"
- BuildConfig "Linux32Release" "i386-linux" ".so"
- BuildConfig "Linux64Release" "x86_64-linux" ".so"
-
- cleaupAndExit 0
-
|