You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

116 lines
4.5 KiB

#!/bin/bash
########################################################################
# Copyright (C) 2016 Max Mehl <max.mehl@fsfe.org>
########################################################################
#
# 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 <http://www.gnu.org/licenses/>.
#
########################################################################
#
# 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
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
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 [ ! $(pgrep lighttpd) ]; then
echo "[INFO] Starting webserver"
/usr/sbin/lighttpd -f $HTTPDST_conf
else
echo "[INFO] Webserver already seems to be running."
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"