#!/bin/bash ######################################################################## # Copyright (C) 2016 Max Mehl ######################################################################## # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # ######################################################################## # # A script to preview XHTML files locally, best to use with FSFE's # website setup. # # Instructions: https://blog.mehl.mx/2016/build-fsfe-websites-locally/ # ####################################################################### ROOT=$(dirname "$(readlink -f "$0")") if [ ! -e "$ROOT"/config.cfg ]; then echo "Missing config.cfg file. Edit and rename config.cfg.sample"; exit 1; fi source "$ROOT"/config.cfg # Help listing if [ "$1" = "" ]; then self=$(basename $0) echo "No parameters or variables given!" echo echo "Usage: " echo echo "$self file.en.xhtml" echo " -- build single XHTML file from your source to the local web directory" echo " the destination will be on the same relative level of the selected XHTML file" echo " If not a XHTML file, it will be copied to the web directory" echo echo "$self --copy picture.png look/style.css" echo " -- Just copies several files to the local web directory without even trying to build them" exit 0 fi # Remove trailing slashes LOC_trunk=$(echo $LOC_trunk | sed 's|/$||') LOC_out=$(echo $LOC_out | sed 's|/$||') LOC_trunk_dev=$(echo $LOC_trunk_dev | sed 's|/$||') # Pure copy if [ "$1" = "--copy" ]; then numargs=$(($# - 1)) echo "[INFO] Starting a plain mass copy with $numargs files..." for ((i=1; i <= $numargs; i++)); do SRC_full=$(realpath $2) DST_full=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_out|") echo "[INFO] Copying $SRC_full to $DST_full..." cp -R $SRC_full $DST_full shift done echo "[SUCCESS] Copying finished. Files should be visible via the local webserver now." exit 0 fi SRC_rel=$1 # e.g. index.en.xhtml SRC_full=$(realpath $SRC_rel) # Full path to source file # CHECK whether the source file is located in LOC_trunk if [ ! $(echo $SRC_full | grep "$LOC_trunk") ]; then echo "[ERROR] Given source file is not part of \$LOC_trunk (currently set to \"$LOC_trunk\"). Please only build files which reside in or below this directory. Aborting now." exit 1 fi # TEST if a DEV SVN directory is used. If yes, copy clean file to this Dir if [ "$LOC_trunk_dev" != "" ]; then SRC_full_dev=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_trunk_dev|") echo "[INFO] A \"dirty\" Development SVN directory ($LOC_trunk_dev) is being used. Copy file from clean SVN directory ($LOC_trunk) to Development directory..." cp $SRC_full $SRC_full_dev # copy file from clean SVN to dev/dirty SVN SRC_full=$SRC_full_dev LOC_trunk=$LOC_trunk_dev fi echo "[INFO] Using file $SRC_full as source..." ### TRANSFORM XHTML file path DST_full=$(echo $SRC_full | sed -E "s|$LOC_trunk|$LOC_out|") # replace SVN directory by build/HTTP destination ### BUILD/COPY FILE depending on file extension ftype=${SRC_full##*.} # get extension of file ftype=$(echo "$ftype" | tr '[:upper:]' '[:lower:]') ftype_build="xhtml" # file types which have to be built if [[ "$ftype" == @($ftype_build) ]]; then # XHTML file DST_full=$(echo $DST_full | sed -E "s/$ftype_build/html/") # Replace xhtml by html echo "[INFO] XHTML file detected. Going to build into $DST_full ..." xmllint --noout "$SRC_full" || (echo; echo "[ERROR] Syntax error in $SRC_full. Error message above. Please fix!"; exit 1) if [[ "$?" != "0" ]]; then exit 1; fi $LOC_trunk/build/build_main.sh process_file $SRC_full > $DST_full else # just copy file echo "[INFO] File type ($ftype) is detected as not to be built. Just copying it to $DST_full ..." cp $SRC_full $DST_full fi ### START WEBSERVER if necessary if [ "$HTTPD" == "python" ]; then # python if [ ! $(pgrep -f "pywebserver-fsfe.py $LOC_out") ]; then echo "[INFO] Starting $HTTPD webserver" nohup "$ROOT/pywebserver-fsfe.py" "$LOC_out" "$HTTPD_port" > "$ROOT"/pywebserver-fsfe.log 2>&1 & else echo "[INFO] $HTTPD webserver already seems to be running." fi elif [ "$HTTPD" == "lighttpd" ]; then if [ ! $(pgrep lighttpd) ]; then # lighttpd echo "[INFO] Starting $HTTPD webserver" /usr/sbin/lighttpd -f "$HTTPD_conf" else echo "[INFO] $HTTPD webserver already seems to be running." fi elif [ "$HTTPD" == "" ]; then # empty variable echo "[ERROR] No webserver specified. Please define variable HTTPD in config.cfg. Aborting now." exit 1 else # something custom echo "[WARNING] Unknown webserver defined. Please check variable HTTPD in config.cfg." fi ### SHOW RESULTS echo DST_rel=$(echo $DST_full | sed "s|$LOC_out||") # relative path echo "[SUCCESS] Finished. File can be viewed at http://localhost:5080$DST_rel"