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