makeversion (1755B)
1 #!/bin/sh -x 2 # vim: set ft=bash: 3 FALLBACKVER=${FALLBACKVER:-unknown} 4 LC_ALL=C 5 export LC_ALL 6 7 die() 8 { 9 printf "%s\n" "$@" >&2 10 exit 1 11 } 12 13 exists() 14 { 15 command -v $* >/dev/null 2>&1 16 } 17 18 _getent() 19 { 20 if exists getent; then 21 command getent "$@" 2>/dev/null 22 return 23 fi 24 case "$1" in 25 passwd|group) 26 if [ -z "$2" ]; then 27 cat /etc/"$1" 28 else 29 awk -F: -vu="$2" '{ if ($3 == u) print }' /etc/"$1" 30 fi 31 ;; 32 *) ;; 33 esac 34 } 35 36 exists diff || die "The build script $0 requires diff(1), none found" 37 38 if [ -d .got ] && exists got; then 39 lastcommit=$(got log | 40 awk '/^commit/ {print substr($2,1,7); exit}') 41 got tag -l | 42 awk -v lastcommit="$lastcommit" ' 43 /^object: commit/ { 44 if (!lasttagcom) 45 { 46 lasttagcom = substr($3,1,7) 47 } 48 next 49 } 50 /^tag/ { 51 if (!ver) 52 { 53 sub(/^v/,"",$2) 54 ver = $2 55 } 56 next 57 } 58 END { 59 printf "%s", ver 60 if (lastcommit != lasttagcom) 61 { 62 printf "-g%s", lastcommit 63 } 64 printf "\n" 65 }' >version.new 66 elif [ -d .git ] && exists git; then 67 68 user=$(printf "%s\n" "$(_getent passwd \ 69 "$(unalias ls >/dev/null 2>&1 || true; \ 70 command ls -nd . | awk '{print $3}')")" | 71 awk -F: '{print $1}') 72 if [ -z "$user" ]; then 73 printf "$0: error: Cannot determine owner of %s" "$(pwd)" >&2 74 exit 1 75 fi 76 e_user=$(id -un) 77 if [ "$e_user" = "$user" ]; then 78 git describe 2>/dev/null | sed 's/^v//' >version.new 79 else 80 su "$user" -c 'git describe' 2>/dev/null | 81 sed 's/^v//' >version.new 82 fi 83 else 84 printf "%s\n" "$FALLBACKVER" >version.new 85 fi 86 87 if [ -f version ]; then 88 if diff version version.new >/dev/null; then 89 rm version.new 90 else 91 mv version.new version 92 touch .rebuild 93 fi 94 else 95 mv version.new version 96 touch .rebuild 97 fi 98 if [ "$1" = "-l" ]; then 99 printf "VERSION=\"%s\"\n" "$(cat version)" 100 fi