1#!/bin/sh
2
3SCRIPT=`basename $0`
4SCRIPTDIR=`dirname $0`
5YAWS_DIR=`cd ${SCRIPTDIR}/.. && pwd`
6
7. ${YAWS_DIR}/vsn.mk
8YAWS_VSN=${VSN-$YAWS_VSN}
9
10YAWS_ETCDIR=${ETCDIR-$YAWS_DIR/etc}
11YAWS_BINDIR=${EXECDIR-$YAWS_DIR/bin} # BINDIR is already set by rebar
12YAWS_VARDIR=${VARDIR-$YAWS_DIR/var}
13YAWS_LOGDIR=${LOGDIR-$YAWS_DIR/yaws_logs}
14
15ERL_BIN=`which erl`
16ERL_BIN_DIR=${ERL_BIN%/erl}
17YAWS_ERLBINDIR=${ERLBINDIR-$ERL_BIN_DIR}
18ERL_BIN=$YAWS_ERLBINDIR/erl
19WERL_BIN=$YAWS_ERLBINDIR/werl
20
21# Use a function for error exit instead of set -e so we can conditionally
22# remove files before exiting. If this were bash we could trap ERR but
23# Bourne shell doesn't support that portably.
24fail() {
25    [ -n "$@" ] && rm -f "$@"
26    exit 1
27}
28
29keep_or_replace() {
30    if [ -f "$1" ] && cmp -s "$1" "$2"; then
31        rm -f "$2"
32        return 0
33    else
34        mv "$2" "$1" || fail "$2"
35        return 1
36    fi
37}
38
39## handle clean command and exit
40if [ "$1" = clean ]; then
41    rm -f ${YAWS_DIR}/src/mime_types.erl  \
42       ${YAWS_DIR}/src/yaws_generated.erl \
43       ${YAWS_DIR}/src/yaws_charset.hrl
44    exit 0
45fi
46
47## Create required directory
48[ -d "$YAWS_ETCDIR" ]             || mkdir "$YAWS_ETCDIR"             || fail
49[ -d "$YAWS_ETCDIR/yaws" ]        || mkdir "$YAWS_ETCDIR/yaws"        || fail
50[ -d "$YAWS_BINDIR" ]             || mkdir "$YAWS_BINDIR"             || fail
51[ -d "$YAWS_VARDIR" ]             || mkdir "$YAWS_VARDIR"             || fail
52[ -d "$YAWS_LOGDIR" ]             || mkdir "$YAWS_LOGDIR"             || fail
53[ -d "${YAWS_VARDIR}/yaws" ]      || mkdir "${YAWS_VARDIR}/yaws"      || fail
54[ -d "${YAWS_VARDIR}/yaws/ebin" ] || mkdir "${YAWS_VARDIR}/yaws/ebin" || fail
55
56## generate yaws_generated.erl module
57cd ${YAWS_DIR}/src || fail
58tmpgen=`mktemp /tmp/${SCRIPT}.XXXXXX` || fail
59YAWS_VSN="${YAWS_VSN}" VARDIR="${YAWS_VARDIR}" ETCDIR="${YAWS_ETCDIR}"  \
60    ${YAWS_DIR}/scripts/gen-yaws-generated >$tmpgen || fail
61keep_or_replace ${YAWS_DIR}/src/yaws_generated.erl $tmpgen
62
63## generate mime_types.erl module
64cd ${YAWS_DIR}/src || fail
65need_mime=yes
66if [ -f mime_types.erl ]; then
67    need_mime=`find mime_type_c.erl -newer mime_types.erl -print`
68fi
69if [ -n "$need_mime" ]; then
70    set yaws yaws_generated mime_type_c
71    for f; do
72        erlc +debug_info -o ${YAWS_DIR}/ebin ${f}.erl || fail
73    done
74    erl -pa ${YAWS_DIR}/ebin -noshell -s mime_type_c generate || fail mime_types.erl
75    for f; do
76        rm ${YAWS_DIR}/ebin/${f}.beam
77    done
78fi
79
80## generate yaws scripts
81cd ${YAWS_DIR}/scripts
82tmpgen=`mktemp /tmp/${SCRIPT}.XXXXXX` || fail
83YAWSDIR="${YAWS_DIR}" VARDIR="${YAWS_VARDIR}" ERLBINDIR="${YAWS_ERLBINDIR}"   \
84    ERL="${ERL_BIN}" WERL="${WERL_BIN}"                                       \
85    ${YAWS_DIR}/scripts/gen-yaws > $tmpgen || fail
86chmod +x $tmpgen
87echo "--- Installed yaws script at ${YAWS_BINDIR}"
88keep_or_replace ${YAWS_BINDIR}/yaws $tmpgen
89
90## generate default yaws configuration
91cd ${YAWS_DIR}/scripts
92tmpgen=`mktemp /tmp/${SCRIPT}.XXXXXX` || fail
93YAWSDIR="${YAWS_DIR}" LOGDIR="${YAWS_LOGDIR}" VARDIR="${YAWS_VARDIR}"          \
94    PORT=8000 DOCROOT="${YAWS_DIR}/www" CERTDIR="${YAWS_DIR}/ssl" SSLPORT=4443 \
95    ${YAWS_DIR}/scripts/gen-yaws-conf > $tmpgen
96if [ -f "${YAWS_ETCDIR}/yaws/yaws.conf" ]; then
97    echo "--- Will not overwrite ${YAWS_ETCDIR}/yaws/yaws.conf"
98    keep_or_replace ${YAWS_ETCDIR}/yaws/yaws.conf.template $tmpgen
99else
100    echo "--- Installing local config file at ${YAWS_ETCDIR}/yaws"
101    keep_or_replace ${YAWS_ETCDIR}/yaws/yaws.conf $tmpgen
102fi
103
104exit 0
105