WIP towards parallel parsing
[dyninst.git] / scripts / buildstamp
1 #!/bin/sh
2 # $Id: buildstamp,v 1.8 2005/03/07 21:23:49 legendre Exp $
3 # create/update build version identification voucher file
4
5 USAGE="usage: buildstamp [-s SUITE_NAME] [-v RELEASE_ID] [-win] TARGET"
6 SUITE=Paradyn
7 RELEASE=v4.2
8 RUNNING_ON_WIN=0
9
10 while [ ! -z "$1" ]
11 do
12   case "$1" in
13     -s)
14         # set suite name
15         SUITE=$2
16         shift
17         ;;
18     -v)
19         # set release identifier
20         RELEASE=v$2
21         shift
22         ;;
23     -[0-9]*)
24         # got detached build number
25         RELEASE=$RELEASE$1
26         ;;
27     -win)
28         # We're runing on Windows
29         RUNNING_ON_WIN=1
30         ;;
31     -*)
32         echo "Unrecognized flag: $1"
33         break
34         ;;
35     *)
36         # first non-flag argument is the target (others silently ignored!)
37         TARGET=$1
38         break
39         ;;
40   esac
41   shift
42 done
43
44 # common bail-point for unknown flags and undefined target
45 if [ -z "$TARGET" ]; then
46     echo $USAGE
47     exit 1
48 fi
49
50 # ensure TARGET is specified
51 set ${TARGET:?}
52 V_FILE=V_$TARGET.c
53
54 # clean-up suite identifier
55 #SUITE=`echo X$SUITE | sed -n -e 's/^X-s//p'`
56 # clean-up release identifier (ensuring that it starts with a single "v")
57 #RELEASE=`echo X$RELEASE | sed -n -e 's/^X-v*/v/p'`
58
59 if [ -f $V_FILE ]; then
60   n=0
61   ident=`grep '\$'$SUITE $V_FILE`
62   for i in $ident
63   do
64     n=`expr $n + 1`
65     case $n in
66     2)
67       if [ "$RELEASE" != "$i" ]; then
68         #echo "Warning: change of release from $i to $RELEASE"
69         RESET=true
70       fi
71       ;;
72     3)
73       if [ "$TARGET" != "$i" ]; then
74         echo "Warning: change of target from $i to $TARGET"
75       fi
76       ;;
77     4)
78       # extract previous build number
79       # awk doesn't exist on our windows machine, also it appears that
80       # we're not currently using this option but are specifying the
81       # build number on the release variable, so I'm commenting this out
82       # BUILD=`awk '{for (i=1;i<=NF;i++) if ($i~/#[0-9]/) \
83       #             print int(substr($i,2)+1)}' $V_FILE`
84       BUILD=0
85       ;;
86     esac
87   done
88 fi
89
90 if [ -z "$RESET" ]; then
91     if [ -z "$BUILD" ]; then
92         BUILD=0
93         echo "$SUITE build voucher being constructed for $TARGET: BUILD#$BUILD"
94     fi
95 else
96     BUILD=0
97 #   echo "$SUITE build voucher being reset for $TARGET: BUILD#$BUILD"
98 fi
99
100 # collect additional build voucher information
101 DATE=`date '+%Y/%m/%d %H:%M'`
102 if [ $RUNNING_ON_WIN = "1" ]; then
103     USER=`logname`
104 else
105     USER=`whoami`
106 fi
107
108 HOST=`hostname | tr 'A-Z' 'a-z'`
109 # remap Paradyn/DynInst account addresses
110 if [ "$USER" = "paradyn" ]; then
111     if [ "$SUITE" = "DynInst" ]; then
112         USER="dyninst"
113         HOST="cs.umd.edu"
114     else
115         HOST="cs.wisc.edu"
116     fi
117 fi
118
119 cat << EOF > $V_FILE
120 /* Automated build version identification */
121 extern const char V_$TARGET[];
122        const char V_$TARGET[] =
123     "\$$SUITE: $RELEASE $TARGET #$BUILD $DATE $USER@$HOST \$";
124 EOF
125
126 echo "     \$$SUITE: $RELEASE $TARGET #$BUILD $DATE $USER@$HOST \$"
127
128 exit 0