Newer
Older
#!/bin/bash
#-------------------------------------------------------------------------------
UNAME=$(uname -v)
OSTYPE=unknown
if [[ ${UNAME} == *Darwin* ]]; then
OSTYPE=osx
elif [[ ${UNAME} == *Ubuntu* ]]; then
OSTYPE=ubuntu
else
echo "OS type not supported"
fi
#-------------------------------------------------------------------------------
if [[ ${OSTYPE} == osx ]]; then
DLV=dlv.i386-apple-darwin.bin
else
DLV=dlv.x86-64-linux-elf-static.bin
fi
DLV_URL=http://www.dlvsystem.com/files/${DLV}
DLVHEX=core
DLVHEX_URL=https://github.com/hexhex/${DLVHEX}.git
DLVHEX_BRANCHORTAG=Release_2_5_0 # does not build always
DLVHEX_BRANCHORTAG=015095f0bd143
BOX2D_URL=https://github.com/DeMaCS-UNICAL/Angry-HEX/releases/download/dependencies/${BOX2D_file}.zip
BOX2D_folder=Box2D-${BOX2Dversion}
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
ANGRYHEX=angryhex
#-------------------------------------------------------------------------------
EMAIL=angryhex@mat.unical.it
#-------------------------------------------------------------------------------
B=`tput bold`
N=`tput sgr0 tput rmul`
U=`tput smul`
F_LOG=$(pwd)/install.log
usage() {
echo
echo "${B}SYNOPSIS${N}"
echo " ${B}./$(basename $0)${N} command [argument]"
echo
echo "${B}COMMANDS${N}"
echo
echo " ${B}install${N} [${U}all${N},dlv,dlvhex,box2d,agent,agent-java,agent-plugin]"
echo
echo " ${B}run${N} [${U}client${N},server]"
echo
echo " ${B}set${N} [release,develop]"
echo
echo " ${B}archive${N}"
echo
exit $1
}
RUN() {
if [[ "$1" == "cd" ]]; then
# builtin commands cannot run with pipe
$@ && return ;
else
# run with pipe
$@ 2>&1 |tee -a ${F_LOG}
if [[ "${PIPESTATUS[0]}" == "0" ]]; then
return ;
else
echo "Exit Status ${PIPESTATUS[0]}" ;
fi
fi
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
echo "FAIL"
echo
echo "Installation FAILED. Please send the file ${F_LOG} to ${EMAIL}."
exit 1
}
REQUIRE() {
if [[ ${OSTYPE} == ubuntu ]]; then
apt-get -y install $@ >> ${F_LOG} 2>&1
fi
}
pushdir() {
pushd $(pwd) &> /dev/null
}
popdir() {
popd &> /dev/null
}
#-------------------------------------------------------------------------------
F_DEVELOP=.angryhex_dev
setdevelop() {
touch ${F_DEVELOP}
}
setrelease() {
rm -f ${F_DEVELOP}
}
#-------------------------------------------------------------------------------
runclient() {
cd ${D_AGENT}
java -jar Client.jar $@
}
runserver() {
cd ${D_AGENT}
java -jar ABServer.jar $@
}
#-------------------------------------------------------------------------------
installdlv() {
pushdir
echo -n "Installing DLV....."
# check if reinstall is forced
if [[ $1 != "-f" ]]; then
command -v dlv >> ${F_LOG} 2>&1 && echo "ALREADY INSTALLED" && return
fi
REQUIRE wget
RUN cd /tmp
RUN wget ${DLV_URL} -O ${DLV}
RUN chmod +x ${DLV}
RUN cp ${DLV} /usr/local/bin/dlv
echo "SUCCESS"
popdir
}
installdlvhex() {
pushdir
echo -n "Installing DLVHEX....."
# check if reinstall is forced
if [[ $1 != "-f" ]]; then
command -v dlvhex2 >> ${F_LOG} 2>&1 && echo "ALREADY INSTALLED" && return
fi
REQUIRE git-core g++ autoconf automake pkg-config libtool libltdl-dev libboost-all-dev libcurl4-openssl-dev
RUN cd /tmp
RUN rm -rf ${DLVHEX}
RUN git clone --recursive ${DLVHEX_URL}
RUN cd ${DLVHEX}
RUN ./bootstrap.sh
RUN ./configure --without-buildclaspgringo
RUN make -j4
RUN make install
# otherwise libraries might not be found
if [[ ${OSTYPE} == osx ]]; then
echo "running update_dyld_shared_cache: required sudo. Please, insert Password:"
RUN sudo update_dyld_shared_cache
else
echo "running ldconfig: required sudo. Please, insert Password:"
RUN sudo ldconfig
fi
echo "SUCCESS"
popdir
}
installbox2d() {
pushdir
echo -n "Installing Box2D....."
# check if reinstall is forced
if [[ $1 != "-f" ]]; then
ld -lBox2D >> ${F_LOG} 2>&1 && echo "ALREADY INSTALLED" && return
fi
REQUIRE wget unzip cmake libglu-dev libxi-dev build-essential
RUN rm -rf /usr/local/include/Box2D/
RUN cd /tmp
RUN unzip ${BOX2D_file}
RUN cd ${BOX2D_folder}/Box2D/Build
RUN cmake -DBOX2D_INSTALL=ON -DBOX2D_BUILD_SHARED=ON -DBOX2D_BUILD_STATIC=OFF -DBOX2D_BUILD_EXAMPLES=OFF ..
RUN make -j4
RUN make install
# otherwise libraries might not be found
if [[ ${OSTYPE} == osx ]]; then
echo "running update_dyld_shared_cache: required sudo. Please, insert Password:"
RUN sudo update_dyld_shared_cache
else
echo "running ldconfig: required sudo. Please, insert Password:"
RUN sudo ldconfig
fi
echo "SUCCESS"
popdir
}
installagent() {
pushdir
echo -n "Installing AngryHEX agent....."
if [ -e ${F_DEVELOP} ]; then
rm -rf ${D_AGENT}
packjava
packplugin
RUN cd ${D_AGENT}
RUN make all
else
#packjava
#packplugin
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
RUN cd ${D_AGENT}
RUN make all
fi
echo "SUCCESS"
popdir
}
installagentjava() {
pushdir
if [ -e ${F_DEVELOP} ]; then
packjava
else
echo "Individual building of components not possible in REMOTE mode"
return
fi
echo -n "Installing Java client....."
RUN cd ${D_AGENT}
RUN make java
echo "SUCCESS"
popdir
}
installagentplugin() {
pushdir
if [ -e ${F_DEVELOP} ]; then
packplugin
else
echo "Individual building of components not possible in REMOTE mode"
return
fi
echo -n "Installing DLVHEX plugin....."
RUN cd ${D_AGENT}
RUN make plugin
# otherwise libraries might not be found
if [[ ${OSTYPE} == osx ]]; then
echo "running update_dyld_shared_cache: required sudo. Please, insert Password:"
RUN sudo update_dyld_shared_cache
else
echo "running ldconfig: required sudo. Please, insert Password:"
RUN sudo ldconfig
fi
echo "SUCCESS"
popdir
}
#-------------------------------------------------------------------------------
D_SRC=src # source
D_FWK=framework # framework
D_ENC=dlv # encodings of hex programs
D_AGENT=angryhex # out directory
F_ARCHIVE=angryhex.zip
function PKG {
mkdir -p ${D_AGENT} &> /dev/null
rsync -r --cvs-exclude $1 ${D_AGENT}/$2
}
function PKGSRC {
mkdir -p ${D_AGENT}/src &> /dev/null
rsync -r --cvs-exclude $1 ${D_AGENT}/src/$2
}
packjava() {
PKGSRC ${D_SRC}/angryhexclient
PKGSRC ${D_FWK}/src/
PKG ${D_FWK}/ABServer.jar
PKG ${D_FWK}/external
PKG ${D_FWK}/plugin
PKG ${D_ENC}
PKG build.xml
PKG Makefile
if [[ $1 == archive ]]; then
PKG config.properties.tournament config.properties
else
PKG config.properties
fi
}
# ${DIR_PLUGIN} is the path the hex plugin
# - this path can be changed in order to use another plugin
# - the plugin folder must contain a Makefile with a 'install' target
DIR_PLUGIN=src/angrybirds-box2dplugin
# DO NOT change ${OUT_PLUGIN}
OUT_PLUGIN=src/angrybirds-box2dplugin
packplugin() {
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
rsync -a --cvs-exclude ${DIR_PLUGIN}/* ${D_AGENT}/${OUT_PLUGIN}
PKG Makefile
}
archive() {
echo -n "Archiving AngryHEX....."
REQUIRE zip
RUN rm -rf ${D_AGENT}
RUN rm -rf ${F_ARCHIVE}
RUN packjava archive
RUN packplugin archive
RUN zip -r ${F_ARCHIVE} ${D_AGENT}/*
RUN zip ${F_ARCHIVE} $(basename $0)
echo "SUCCESS"
}
#-------------------------------------------------------------------------------
renewlog() {
rm -rf ${F_LOG}
# print system info to ${F_LOG}
uname -a >> ${F_LOG} 2>&1
if [[ ${OSTYPE} == osx ]]; then
sw_vers >> ${F_LOG} 2>&1
elif [[ ${OSTYPE} == ubuntu ]]; then
lsb_release -a >> ${F_LOG} 2>&1
fi
}
#-------------------------------------------------------------------------------
CMD=$1
ARG=$2
if [ -z $CMD ]; then
usage 1
elif [ -z $ARG ]; then
case $CMD in
"install") ARG=all ;;
"run") ARG=client ;;
esac
fi
case $CMD in
"install")
renewlog
case $ARG in
"all") installdlv && installdlvhex && installbox2d && installagent ;;
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
"dlv") installdlv -f ;;
"dlvhex") installdlvhex -f ;;
"box2d") installbox2d -f ;;
"agent") installagent ;;
"agent-java") installagentjava ;;
"agent-plugin") installagentplugin ;;
*) echo "Unknown argument $ARG" && usage 1
esac
;;
"run")
case $ARG in
"client") runclient ${@:3} ;;
"server") runserver ${@:3} ;;
*) echo "Unknown argument $ARG" && usage 1
esac
;;
"set")
case $ARG in
"release") setrelease ;;
"develop") setdevelop ;;
*) echo "Unknown argument $ARG" && usage 1
esac
;;
"archive") archive ;;
*) echo "Invalid command: $CMD" && usage 1
esac