2016-11-14 01:25:13 +01:00
#!/bin/bash
2016-11-14 02:09:44 +01:00
########################################################################
# 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/
#
#######################################################################
2016-11-14 01:25:13 +01:00
2017-01-19 19:19:53 +01:00
# Check dependencies (stolen from build_main.sh)
deperrors = ''
for depend in realpath rsync xsltproc xmllint sed find egrep grep wc make tee date iconv; do
if ! which " $depend " >/dev/null 2>& 1; then
deperrors = " $depend $deperrors "
fi
done
if [ -n " $deperrors " ] ; then
printf '\033[1;31m'
cat <<-EOF
The build script depends on some other programs to function .
Not all of those programs could be located on your system.
Please use your package manager to install the following programs:
EOF
printf '\n\033[0;31m%s\n' " $deperrors "
exit 1
fi >>/dev/stderr
2016-11-14 01:25:13 +01:00
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
2016-11-29 11:35:06 +01:00
# Help listing
2016-11-14 01:25:13 +01:00
if [ " $1 " = "" ] ; then
self = $( basename $0 )
echo "No parameters or variables given!"
echo
echo "Usage: "
echo
echo " $self file.en.xhtml "
2017-01-19 19:19:53 +01:00
echo " -- build single XHTML file from your source to the local web "
echo " directory"
echo " The destination will be on the same relative level of the "
echo " selected XHTML file"
2016-11-14 01:25:13 +01:00
echo " If not a XHTML file, it will be copied to the web directory"
echo
echo " $self --copy picture.png look/style.css "
2017-01-19 19:19:53 +01:00
echo " -- Just copies several files to the local web directory without "
echo " even trying to build them"
2016-11-14 01:25:13 +01:00
exit 0
fi
2016-11-29 11:35:06 +01:00
# 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
2016-11-14 01:25:13 +01:00
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 ... "
2017-01-19 19:41:25 +01:00
if [ -d " $SRC_full " ] && [ -e " $DST_full " ] ; then
rm -rf " $DST_full "
cp -R $SRC_full $DST_full
else
cp -R $SRC_full $DST_full
fi
2016-11-14 01:25:13 +01:00
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
2017-01-19 19:41:25 +01:00
# CHECK whether the source file is a directory (only --copy allowed)
if [ -d " $SRC_full " ] ; then
echo " [ERROR] The given file \" $SRC_full \" is a directory. Those can only be copied by using --copy as a parameter. "
echo "NOTE: Using --copy won't build potential .xhtml files inside a directory. If you have this case, please first copy an empty directory and then build the .xhtml files inside them."
exit 1
fi
2016-11-14 01:25:13 +01:00
# 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
2016-11-14 02:09:44 +01:00
if [ [ " $ftype " = = @( $ftype_build ) ] ] ; then # XHTML file
2016-11-14 01:25:13 +01:00
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 ... "
2016-11-14 02:09:44 +01:00
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
2016-11-14 01:25:13 +01:00
$LOC_trunk /build/build_main.sh process_file $SRC_full > $DST_full
2016-11-14 02:09:44 +01:00
else # just copy file
2016-11-14 01:25:13 +01:00
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
2016-12-15 17:39:39 +01:00
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."
2016-11-14 01:25:13 +01:00
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 "