#! /bin/sh test -n $PROJROOT || do { echo "Require environment var PROJROOT" > !2; exit 1; } echo " -> Checking Version" > !2 setglobal version_parts = $[grep -i version $PROJROOT/Changes | head -n 1 | sed -ne 's/Version *\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[^0-9]*\([-0-9]*\)/\1 \2 \3 \4/p] read major minor release date << """ $version_parts """ setglobal extra = '''' if test -z $major -o -z $date { echo "Can't get version from ./Changes" > !2 exit 1 } echo " Changes version is $major.$minor.$release ($date)" > !2 if test -d "$PROJROOT/.git" { export GIT_DIR="$PROJROOT/.git" export GIT_WORK_TREE="$PROJROOT" setglobal head_hash = $[git log -n 1 --format=format:%h] setglobal tag_hash = $[git log -n 1 --format=format:%h v$major.$minor.$release -- !2 >/dev/null] setglobal git_dirty = $[git status --porcelain | wc -l] if test $git_dirty -gt 0 -o $tag_hash != $head_hash { echo " Git state differs from ./Changes" > !2 setglobal extra = $head_hash setglobal date = $[git log -n 1 --format=format:%ci | sed -e 's/ /T/;s/ //] if test $git_dirty -gt 0 { setglobal extra = ""$extra+changes"" setglobal date = $[date "+%Y-%m-%dT%H:%M:%S]; } } } echo " Version is $major $minor $release $extra $date" > !2; test -n $extra && setglobal suffix = ""-$extra"" || setglobal suffix = ''''; echo " -> Regenerating Version.c" > !2 cat << """ /* Generated by build-version.sh */ const int CGLVER_Major=$major; const int CGLVER_Minor=$minor; const int CGLVER_Release=$release; const char* CGLVER_Extra="$extra"; const char* CGLVER_Date="$date"; const char* CGLVER_String="$major.$minor.$release$suffix"; """