1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-20 04:02:27 +00:00

A couple of changes:

- let the s5-blank script evolve into the s5 utility, a bit more powerful,
  and having a manual page
- only run the DOS2UNIX command on the text files, do no damage to images
- use COPYTREE_SHARE for the installation
- bump PORTREVISION.
This commit is contained in:
Peter Pentchev 2008-06-12 14:56:38 +00:00
parent bb7b773e77
commit 35a7b1218b
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=214713
5 changed files with 650 additions and 21 deletions

View File

@ -7,7 +7,7 @@
PORTNAME= s5
PORTVERSION= 1.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= textproc
MASTER_SITES= http://meyerweb.com/eric/tools/s5/v/${PORTVERSION}/
DISTNAME= ${PORTNAME}-${PORTVERSION:S/.//g}
@ -18,24 +18,28 @@ COMMENT= A simple HTML-based presentation system
BUILD_DEPENDS= unzip:${PORTSDIR}/archivers/unzip
USE_DOS2UNIX= yes
DOS2UNIX_REGEX= .*\.(css|htc|html|js|txt)
USE_ZIP= yes
WRKSRC= ${WRKDIR}
NO_BUILD= yes
MAN1= s5.1
MANCOMPRESSED= no
S5_DIR= ${PREFIX}/share/${PORTNAME}
S5_SUBDIRS= pix primer s5-blank ui
post-extract:
cd ${WRKSRC} && ${UNZIP_CMD} s5-blank.zip
${SED} -e "s,/usr/local,${PREFIX}," ${FILESDIR}/s5-blank.sh > ${WRKDIR}/s5-blank.sh
${SED} -e "s,/usr/local,${PREFIX}," ${FILESDIR}/s5.sh > ${WRKDIR}/s5
${SED} -e "s,/usr/local,${PREFIX}," ${FILESDIR}/s5.1 > ${WRKDIR}/s5.1
${FIND} ${WRKDIR} -type f -name .DS_Store -delete
do-install:
${MKDIR} ${S5_DIR}
${CP} ${WRKDIR}/*.html ${S5_DIR}/
.for i in ${S5_SUBDIRS}
${CP} -Rp ${WRKDIR}/$i/ ${S5_DIR}/$i/
.endfor
${INSTALL_SCRIPT} ${WRKDIR}/s5-blank.sh ${PREFIX}/bin/s5-blank
(cd ${WRKDIR} && \
${COPYTREE_SHARE} "*.html ${S5_SUBDIRS}" ${S5_DIR})
${INSTALL_SCRIPT} ${WRKDIR}/s5 ${PREFIX}/bin/s5
${INSTALL_DATA} ${WRKDIR}/s5.1 ${PREFIX}/man/man1/s5.1
.include <bsd.port.mk>

View File

@ -1,13 +0,0 @@
#!/bin/sh
if [ -z "$1" ]; then
echo 'Usage: s5-blank dirname'
exit 1
fi
if [ -e "$1" ] && ! [ -d "$1/" ]; then
echo "Not a directory: $1"
exit 1
fi
[ ! -e "$1" ] && mkdir -p "$1"
cp -Rpv /usr/local/share/s5/s5-blank/ "$1"/

230
textproc/s5/files/s5.1 Normal file
View File

@ -0,0 +1,230 @@
.\" Copyright (c) 2008 Peter Pentchev
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd June 12, 2008
.Dt S5 1
.Os
.Sh NAME
.Nm s5
.Nd set up and update S5 presentations
.Sh SYNOPSIS
.Nm
.Op Fl Nv
.Op Fl T Ar template
.Cm blank
.Ar path
.Nm
.Op Fl Nv
.Op Fl T Ar template
.Cm cksum
.Ar path
.Nm
.Op Fl Nv
.Op Fl T Ar template
.Cm mksum
.Ar path
.Nm
.Op Fl Nv
.Op Fl T Ar template
.Cm update
.Ar path
.Pp
.Nm
.Fl h
.Nm
.Cm help
.Sh DESCRIPTION
The
.Nm
tool eases the creation of presentation slides using the
.Dq Simple Standards-based Slide Show System .
It may be used to create a working copy of a template directory or, later,
to update the working copy after the template has changed over time.
.Pp
The
.Nm
tool supports the following command-line options:
.Bl -tag -width indent
.It Fl h
Display a short help text and exit.
.It Fl N
No-operation mode; just display the commands without executing them.
.It Fl T Ar template
Specify the template directory instead of the default
.Pa /usr/local/share/s5/s5-blank
.It Fl v
Verbose operation; display diagnostic information.
.El
.Pp
The
.Nm
tool supports the following actions:
.Bl -tag -width indent
.It Cm blank Ar path
Aliases:
.Cm create ,
.Cm new
.Pp
Copy the template directory into the directory specified by
.Ar path ,
creating it if necessary.
.It Cm cksum Ar path
Aliases:
.Cm check ,
.Cm verify
.Pp
Verify the checksums recorded for the S5 presentation files in
the directory specified by
.Ar path .
The
.Nm
utility reports both files that have been modified (fail the checksum
check) and files that no longer exist yet have checksums recorded.
.It Cm help
Alias:
.Cm usage
.Pp
Display a short help message and exit.
.It Cm mksum Ar path
Record the template checksums into a file in a directory specified by
.Ar path .
Users should never really have to execute this by hand, since it is
done internally as part of the
.Cm blank
and
.Cm update
command processing.
.It Cm update Ar path
Update the S5 presentation files in the directory specified by
.Ar path
with the new versions in the S5 template directory.
.Pp
Before updating, the
.Nm
utility verifies the checksums of the files in the
.Pa path
directory, and terminates if a mismatch is found.
After that,
.Nm
checks for any files that exist in both the new template and in the
.Ar path
directory, but are not recorded in the checksum file (i.e. have been
placed in
.Ar path
by hand after the last
.Nm Cm blank
or
.Nm Cm update
run) and terminates if any such files differ.
.Pp
If all these checks are successful, the
.Nm
utility copies the template files over those in
.Ar path ,
overwriting any existing files and retaining any files that do not
exist in the template directory.
.El
.Sh FILES
.\" FIXME: describe any configuration files when they show up
The
.Nm
utility stores the checksums of blank S5 presentations into a file named
.Pa s5-checksums.txt
into the presentation directory.
This is a simple text file with lines containing of a keyword and values.
The keywords that the
.Nm
utility currently generates and parses are as follows:
.Bl -tag -width indent
.It Cm CKSUM_CMD Ar checksum-program
The name of the checksum program to use; the default is
.Xr cksum 1 .
.It Cm CKSUM_ARGS Op Ar [argument...]
The arguments (if any) passed to the checksum program as defined by the
.Cm CKSUM_CMD
line.
The default is an empty string, no arguments passed.
.It Cm FILE Ar filename
The name of the file that the following
.Cm CKSUM
line refers to.
.It Cm CKSUM Ar checksum-line-text
The output of the checksum command as specified by
.Cm CKSUM_CMD
and
.Cm CKSUM_ARGS
conflated into a single line.
.El
.Sh EXAMPLES
Start a brand new presentation:
.Pp
.Dl s5 blank ~/txt/openfest/2006/gnupg
.Pp
Verify if any of the S5 files in the presentation have been modified:
.Pp
.Dl s5 cksum gnupg/
.Pp
Do the same, but display verbose information about the lines read from
the checksums file and the files verified:
.Pp
.Dl s5 -v cksum gnupg/
.Pp
Update the S5 presentation files after installing a new system-wide
version of the S5 template:
.Pp
.Dl s5 update gnupg/
.Pp
Store the checksums of the S5 template files
.Em ( not
the real files in the presentation directory!) into the
.Pa s5-checksums.txt
file in the
.Pa gnupg/
directory; this is actually redundant, as it is done as part of the
.Nm Cm blank
invocation:
.Pp
.Dl s5 mksum gnupg/
.Sh SEE ALSO
The home page of the Simple Standards-based Slide Show System:
.Li http://www.meyerweb.com/eric/tools/s5/
.Sh HISTORY
The Simple Standards-based Slide Show System was written by
.An Eric Meyer
based on earlier work by
.An Tantek \[,C]elik .
The
.Nm
tool and this manual page were written by
.An Peter Pentchev
in 2008.
.Sh AUTHORS
.An Eric Meyer
.Aq eric@meyerweb.com
.An Tantek \[,C]elik
.Aq tantek@tantek.com
.An Peter Pentchev
.Aq roam@ringlet.net
.Sh BUGS
No configuration files are parsed yet.

408
textproc/s5/files/s5.sh Normal file
View File

@ -0,0 +1,408 @@
#!/bin/sh
#
# Copyright (c) 2008 Peter Pentchev
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
set -e
LOCALBASE='/usr/local'
S5_DIR="${LOCALBASE}/share/s5"
S5_TEMPLATE="${S5_DIR}/s5-blank"
NOOP=''
VERBOSE=''
CKSUM='cksum'
CKSUM_ARGS=''
SHADOWDIR=''
# s5 blank path
# Create a new S5 presentation at the specified path
#
s5_blank()
{
[ -z "$VERBOSE" ] || echo "s5_blank: path $1" 1>&2
if [ -z "$1" ]; then
echo 'Usage: s5 blank path' 1>&2
exit 1
fi
if [ -e "$1" ] && ! [ -d "$1/" ]; then
echo "Not a directory: $1" 1>&2
exit 1
fi
[ -z "$VERBOSE" ] || echo "- creating the directory" 1>&2
[ -e "$1" ] || ${NOOP} mkdir -p "$1"
[ -z "$VERBOSE" ] || echo "- copying files from ${S5_TEMPLATE}" 1>&2
${NOOP} cp -Rp ${VERBOSE:+'-v'} "${S5_TEMPLATE}"/ "$1"/
[ -z "$VERBOSE" ] || echo "- s5_mksum for the initial checksums" 1>&2
s5_mksum "$1"
}
# s5_cksum path
# Calculate the checksums of the actual files in path and compare them
# to the ones recorded when the presentation was created
#
s5_cksum()
{
[ -z "$VERBOSE" ] || echo "s5_cksum: path $1" 1>&2
if [ -z "$1" ]; then
echo 'Usage: s5 cksum path' 1>&2
exit 1
fi
if ! [ -d "$1/" ]; then
echo "Not a directory: $1" 1>&2
exit 1
fi
cksumfile="$1/s5-checksums.txt"
if [ ! -f "$cksumfile" ] || [ ! -r "$cksumfile" ]; then
echo "Invalid checksum file $cksumfile" 1>&2
exit 1
fi
file=''
nofile=''
cksumbad=''
while read cmd args; do
[ -z "$VERBOSE" ] || echo "- read cmd $cmd args $args" 1>&2
case "$cmd" in
CKSUM_CMD)
[ -z "$VERBOSE" ] || echo " - comparing current command '$CKSUM' with '$args'" 1>&2
if [ "$CKSUM" != "$args" ]; then
echo "Checksum command mismatch: current '$CKSUM', file recorded with '$args'" 1>&2
exit 1
fi
;;
CKSUM_ARGS)
[ -z "$VERBOSE" ] || echo " - comparing current args '$CKSUM_ARGS' with '$args'" 1>&2
if [ "$CKSUM_ARGS" != "$args" ]; then
echo "Checksum arguments mismatch: current '$CKSUM_ARGS', file recorded with '$args'" 1>&2
exit 1
fi
;;
FILE)
[ -z "$VERBOSE" ] || echo " - handling file $args" 1>&2
if [ ! -f "$1/$args" ]; then
echo "Missing file described in the checksum records: $args" 1>&2
nofile=1
cksumbad=1
else
file="$args"
nofile=''
fi
;;
CKSUM)
if [ -z "$nofile" ]; then
if [ -z "$file" ]; then
echo "Checksum without filename" 1>&2
exit 1
fi
[ -z "$VERBOSE" ] || echo " - about to check $file for $args" 1>&2
o=`cd "$1" && $CKSUM $CKSUM_ARGS "$file"`
[ -z "$VERBOSE" ] || echo " - got checksum $o" 1>&2
if [ "$o" != "$args" ]; then
echo "Bad checksum for file $file" 1>&2
cksumbad=1
else
if [ -n "$SHADOWDIR" ]; then
d=`dirname "$file"`
mkdir -p "$SHADOWDIR"/t/"$d"
touch "$SHADOWDIR"/t/"$file"
fi
fi
else
[ -z "$VERBOSE" ] || echo " - skipping checksum $args" 1>&2
fi
;;
*)
echo "Unsupported checksum keyword $cmd" 1>&2
exit 1
;;
esac
done < "$cksumfile"
if [ -n "$cksumbad" ]; then
echo "Some files failed the checksum check" 1>&2
exit 1
fi
[ -z "$VERBOSE" ] || echo "- all fine!" 1>&2
}
# s5 mksum path
# Calculate the checksums of the stock S5 template files and record
# them into the S5 presentation at path
#
s5_mksum()
{
[ -z "$VERBOSE" ] || echo "s5_mksum: path $1" 1>&2
if [ -z "$1" ]; then
echo 'Usage: s5 mksum path' 1>&2
exit 1
fi
if [ -z "$NOOP" ] && ! [ -d "$1/" ]; then
echo "Not a directory: $1" 1>&2
exit 1
fi
cksumfile="$1/s5-checksums.txt"
[ -z "$VERBOSE" ] || echo "- from ${S5_TEMPLATE} to $cksumfile" 1>&2
(cd "${S5_TEMPLATE}" && \
echo "CKSUM_CMD $CKSUM" && \
echo "CKSUM_ARGS $CKSUM_ARGS" && \
find . -type f | sed -e 's,^\./,,' | while read f; do
s5_mksum_single "$f"
done) | if [ -z "$NOOP" ]; then
cat > "$cksumfile"
if [ -n "$VERBOSE" ]; then
cnt=`egrep -ce '^CKSUM ' "$cksumfile"`
echo "- $cnt checksums recorded into $cksumfile" 1>&2
fi
else
${NOOP} "Would write checksums to $cksumfile"
cnt=0
while read line; do
[ -z "$VERBOSE" ] || ${NOOP} "$line"
if expr "$line" : 'CKSUM ' > /dev/null; then
cnt=`expr "$cnt" + 1`
fi
done
${NOOP} "Would record checksums for $cnt files"
fi
}
# Internal routine for calculating the checksum of a single file
s5_mksum_single()
{
o=`$CKSUM $CKSUM_ARGS "$1"`
echo "FILE $1"
echo "CKSUM $o"
}
# s5 help
# Display the help message and exit
#
s5_help()
{
cat << EOF
Usage: s5 [-hNv] [-T template] command [args...]
The available command-line options are:
-h display this help message and exit
-N no-op mode, just display the commands without executing them
-T template directory, default /usr/local/share/s5/s5-blank
-v verbose operation, display diagnostic information
The available commands are:
blank path
Create a new S5 presentation at the specified path
check path
Alias for cksum
cksum path
Verify the checksums of the S5 presentation at path
create path
Alias for blank
help
Display this help message and exit
mksum path
Store the template checksums at the specified path
new path
Alias for blank
update path
Update an S5 presentation with the new S5 template files
usage
Alias for help
verify path
Alias for cksum
EOF
}
# Internal routine: create a temporary directory for tracking checksum files
s5_shadowdir_create()
{
d=`mktemp -d -t s5tool`
if [ ! -d "$d" ]; then
echo "Could not create a shadow directory using mktemp" 1>&2
exit 1
fi
chmod 700 "$d"
trap s5_shadowdir_cleanup EXIT HUP INT QUIT TERM PIPE
SHADOWDIR="$d"
}
# Internal routine: clean up the temporary directory at exit time
s5_shadowdir_cleanup()
{
if [ -n "$SHADOWDIR" ] && [ -d "$SHADOWDIR" ] && [ -w "$SHADOWDIR" ]; then
rm -rf "$SHADOWDIR"/t
rmdir "$SHADOWDIR"
fi
}
# s5_update path
# Update the S5 presentation at the specified path with files from
# the template directory, but only if the S5 presentation has not
# been modified in the meantime
#
s5_update()
{
[ -z "$VERBOSE" ] || echo "s5_update: path $1" 1>&2
s5_shadowdir_create
s5_cksum "$1"
[ -z "$VERBOSE" ] || echo "s5_update: checking for new files" 1>&2
(cd "$S5_TEMPLATE" && find . -type f) | (
noupdate=''
while read f; do
[ -z "$VERBOSE" ] || echo "- $f" 1>&2
if [ -f "$1/$f" ]; then
[ -z "$VERBOSE" ] || echo " - exists in the working directory" 1>&2
if cmp -s "$S5_TEMPLATE/$f" "$1/$f"; then
[ -z "$VERBOSE" ] || echo " - the files are the same :)" 1>&2
else
if [ ! -f "$SHADOWDIR"/t/"$f" ]; then
echo "File in template and working dir, but not part of the previous template: $f" 1>&2
noupdate=1
fi
fi
fi
done
if [ -n "$noupdate" ]; then
echo "Not proceeding with the update" 1>&2
exit 1
fi
)
[ -z "$VERBOSE" ] || echo "s5_update: about to delete files" 1>&2
(cd "$SHADOWDIR"/t && find . -type f) | while read f; do
if [ ! -f "$S5_TEMPLATE/$f" ]; then
${NOOP} rm ${VERBOSE:+'-v'} "$1/$f"
fi
done
[ -z "$VERBOSE" ] || echo "s5_update: about to copy files" 1>&2
(cd "$S5_TEMPLATE" && find . -mindepth 1 -type d) | while read d; do
if [ ! -d "$1/$d" ]; then
${NOOP} mkdir -p ${VERBOSE:+'-v'} "$1/$d"
else
[ -z "$VERBOSE" ] || echo "- existing dir $d" 1>&2
fi
done
(cd "$S5_TEMPLATE" && find . -type f) | while read f; do
${NOOP} cp -p ${VERBOSE:+'-v'} "$S5_TEMPLATE/$f" "$1/$f"
done
[ -z "$VERBOSE" ] || echo "s5_update: invoking s5_mksum" 1>&2
s5_mksum "$1"
}
# Process the command-line options
while getopts 'hNT:v' o; do
case "$o" in
h)
s5_help
exit 0
;;
N)
NOOP='echo'
;;
T)
S5_TEMPLATE="$OPTARG"
;;
v)
VERBOSE="${VERBOSE}v"
;;
*)
[ "$o" = '?' ] || echo "Unrecognized option '$o'" 1>&2
s5_help
exit 1
;;
esac
done
shift `expr "$OPTIND" - 1`
# Treat a simple "s5" invocation as a usage request
if [ -z "$1" ]; then
s5_help
exit
fi
# Okay, we have some a command...
[ -z "$VERBOSE" ] || echo "Parsing a command: $1" 1>&2
case "$1" in
# b(lank), cr(eate), n(ew)
b|bl|bla|blan|blank|cr|cre|crea|creat|create|n|ne|new)
shift
s5_blank "$1"
;;
# ch(eck), ck(sum), v(erify)
ch|che|chec|check|ck|cks|cksu|cksum|v|ve|ver|verify)
shift
s5_cksum "$1"
;;
# h(elp), us(age)
h|he|hel|help|us|usa|usag|usage)
shift
s5_help
;;
# m(ksum)
m|mk|mks|mksu|mksum)
shift
s5_mksum "$1"
;;
# up(date)
up|upd|upda|updat|update)
shift
s5_update "$1"
;;
*)
echo "Unrecognized s5 command $1" 1>&2
s5_help 1>&2
exit 1
;;
esac

View File

@ -1,4 +1,4 @@
bin/s5-blank
bin/s5
%%DATADIR%%/features.html
%%DATADIR%%/filemap.html
%%DATADIR%%/pix/mememe01.png