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