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