]> git.pond.sub.org Git - empserver/blob - src/scripts/nightly/nightlybuild.sh
A sandbox system to automate the building of the source tree and
[empserver] / src / scripts / nightly / nightlybuild.sh
1 #!/bin/sh
2 #
3 # $Id$$Source$
4 #
5 #
6 # Blame it on marcolz
7 #
8
9 # For some reason, solaris sh exits as soon as both stderr and stdout
10 # are redirected to file at the exec, so if we run on solaris, use ksh
11 # for this script.
12 #
13 INTERPRETER="$_"
14
15 case "$INTERPRETER"
16 in
17         */ksh|ksh)
18                 ;;
19         *)
20                 if  [ "`uname`" = "SunOS" ]
21                 then
22                         exec ksh "$0" "$@"
23                 fi
24         ;;
25 esac
26
27 PROGNAME="$0"
28 CVS_RSH=ssh
29 export CVS_RSH
30
31 usage() {
32         echo "Usage: ${PROGNAME} <configfile>" >&2;
33         exit 1;
34 }
35
36 [ $# -lt 1 ] && usage
37
38 [ -f "$1" ] || usage
39
40 # Source config file
41 case "$1"
42 in
43         */*)
44                 . "$1"
45                 ;;
46         *)
47                 . ./"$1"
48                 ;;
49 esac
50
51 [ -f "${SCRIPTDIR}/common.sh" ] || { echo "Broken config ?" >&2; exit 1; }
52 . "${SCRIPTDIR}"/common.sh
53
54
55 STAMP="`date +%Y%m%d%H%M%S`"
56 WORKDIR="${EMPTARGET}.${ARCH}"
57 [ -n "${EXTRASUFFIX}" ] && WORKDIR="${WORKDIR}.${EXTRASUFFIX}"
58 LOGFILE="${LOGDIR}/${WORKDIR}.${STAMP}"
59
60 # Log everything
61 exec > "${LOGFILE}"
62 exec 2>&1
63
64 case "${BOXDIR}"
65 in
66         /*)
67                 ;;
68         *)
69                 BOXDIR="${SCRIPTDIR}/${BOXDIR}"
70                 ;;
71 esac
72
73 cd "${BOXDIR}" || err "Could not chdir to ${BOXDIR}"
74
75 echo "Nightly build starting at `date`"
76
77
78 # Make sandbox
79
80 mkdir "${WORKDIR}" || warn "Could not create ${BOXDIR}/${WORKDIR}"
81 cd "${WORKDIR}" || err "Could not cd to ${BOXDIR}/${WORKDIR}"
82
83 echo "Getting source from CVS:"
84 # Extract source
85 RETR=0
86 while ! cvs -z3 -d:ext:"${SFLOGIN}"@cvs.sourceforge.net:/cvsroot/empserver co empserver >/dev/null
87 do
88         sleep "`expr 5 + ${RETR}`"
89         RETR="`expr 1 + ${RETR}`"
90         [ "${RETR}" -gt 100 ] && err "CVS Timeout after ${RETR} retres."
91 done
92 echo "Done (CVS)."
93 echo ""
94
95 # Run local patches ${LOCALPATCHDIR}/*.patch
96 case "${LOCALPATCHDIR}"
97 in
98         /*)
99                 ;;
100         *)
101                 LOCALPATCHDIR="${SCRIPTDIR}/${LOCALPATCHDIR}"
102                 ;;
103 esac
104
105 if [ -n "${LOCALPATCHDIR}" -a -d "${LOCALPATCHDIR}/." ]
106 then
107         echo "Applying local patches from ${LOCALPATCHDIR}:"
108         for i in "${LOCALPATCHDIR}"/*.patch
109         do
110                 if patch -Np0 < "${i}" >/dev/null
111                 then
112                         echo "${i}: OK"
113                 else
114                         echo "========== ${i}: NOT OK! ${?} =========="
115                 fi
116         done
117         echo "Done (patch)."
118         echo ""
119 fi
120
121 cd empserver || err "Could not cd to ${BOXDIR}/${WORKDIR}/empserver."
122
123 # Prep build.conf
124 echo "Preparing build.conf"
125 sed     -e "s,^USERNAME = .*$,USERNAME = ${EMPLOGIN}," \
126         -e "s,^HOSTNAME = .*$,HOSTNAME = localhost," \
127         -e "s,^IPADDR = .*$,IPADDR = 127.0.0.1," \
128         -e "s,^EMPDIR = .*$,EMPDIR = ${BOXDIR}/${WORKDIR}/emp4," \
129         < build.conf > build.conf.new && \
130         mv build.conf.new build.conf || \
131         err "Could not prep build.conf"
132 echo "Done (build.conf)."
133 echo ""
134
135 # TODO: this should be fixed another way...
136 echo "Generating empty Makedepends."
137 touch src/client/Makedepend src/doconfig/Makedepend src/lib/as/Makedepend src/lib/commands/Makedepend src/lib/common/Makedepend src/lib/empthread/Makedepend src/lib/gen/Makedepend src/lib/global/Makedepend src/lib/lwp/Makedepend src/lib/player/Makedepend src/lib/subs/Makedepend src/lib/update/Makedepend src/server/Makedepend src/util/Makedepend || err "Could tot touch Makedepends"
138 echo "Done (touch)."
139 echo ""
140
141 # Start the build
142 echo "Building server"
143 if make "${EMPTARGET}" >/dev/null
144 then
145         warn "make did not return 0."
146 fi
147 echo "Done (make)."
148 echo ""
149
150 # Try to run startup utilities
151 if [ -d ../emp4 -a -d ../emp4/bin -a -d ../emp4/data ]
152 then
153         cd ../emp4/bin || err "Could not cd to ../emp4/bin"
154         echo "Determining type of files in bindir"
155         file *
156         echo "Done (file *)."
157         echo ""
158         echo "Running files and fairland"
159         echo y | ./files || warn "Error running files"
160         ./fairland 10 30 >/dev/null || warn "Error running fairland"
161         echo "Done (files & fairland)."
162         echo ""
163 fi
164
165 # Clean sandbox
166 echo "Cleaning sandbox"
167 cd "${BOXDIR}" || err "Could not cd back to sanbox root !"
168 rm -r "${WORKDIR}" || warn "Directory ${WORKDIR} could not be cleanly removed !"
169 rm -rf "${WORKDIR}" || warn "Directory ${WORKDIR} could not be forcibly removed !"
170 [ -d "${WORKDIR}/." ] && warn "Directory ${WORKDIR} still present"
171 echo "Done (cleaning)."
172
173 echo "Nightly build finished at `date`"
174
175 exit 0