diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 17:23:08 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 17:23:08 +0000 |
commit | dd76e45c20acc3f352ffe8257208cc617ba33eba (patch) | |
tree | c50c016a4182a27fd1ece9ec7ba4abf405f19e5f /generate-manpages/sqfstar-manpage.sh | |
parent | Initial commit. (diff) | |
download | squashfs-tools-dd76e45c20acc3f352ffe8257208cc617ba33eba.tar.xz squashfs-tools-dd76e45c20acc3f352ffe8257208cc617ba33eba.zip |
Adding upstream version 1:4.6.1.upstream/1%4.6.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'generate-manpages/sqfstar-manpage.sh')
-rwxr-xr-x | generate-manpages/sqfstar-manpage.sh | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/generate-manpages/sqfstar-manpage.sh b/generate-manpages/sqfstar-manpage.sh new file mode 100755 index 0000000..c37f695 --- /dev/null +++ b/generate-manpages/sqfstar-manpage.sh @@ -0,0 +1,241 @@ +#!/bin/sh + +# This script generates a manpage from the sqfstar -help and -version +# output, using help2man. The script does various modfications to the +# output from -help and -version, before passing it to help2man, to allow +# it be successfully processed into a manpage by help2man. + +if [ ! -f functions.sh ]; then + echo "$0: this script should be run in the <git-root/source-root>/generate-manpages directory" >&2 + exit 1 +fi + +. ./functions.sh + +if [ $# -lt 2 ]; then + error "$0: Insufficient arguments" + error "$0: <path to sqfstar> <output file>" + exit 1 +fi + +# Sanity check, ensure $1 points to a directory with a runnable Sqfstar +if [ ! -x $1/sqfstar ]; then + error "$0: <arg1> doesn't point to a directory with Sqfstar in it!" + error "$0: <arg1> should point to the directory with the Sqfstar" \ + "you want to generate a manpage for." + exit 1 +fi + +# Sanity check, check that the utilities this script depends on, are in PATH +for i in expand sed help2man; do + if ! which $i > /dev/null 2>&1; then + error "$0: This script needs $i, which is not in your PATH." + error "$0: Fix PATH or install before running this script!" + exit 1 + fi +done + +tmp=$(mktemp -d) + +# Run sqfstar -help, expand TABS to spaces, and output the help text to +# $tmp/sqfstar.help. This is to allow it to be modified before +# passing to help2man. + +if ! $1/sqfstar -help > $tmp/sqfstar.help2; then + error "$0: Running Sqfstar failed. Cross-compiled or incompatible binary?" + exit 1 +fi + +expand $tmp/sqfstar.help2 > $tmp/sqfstar.help + + +# Run sqfstar -version, and output the version text to +# $tmp/sqfstar.version. This is to allow it to be modified before +# passing to help2man. + +$1/sqfstar -version > $tmp/sqfstar.version + +# Create a dummy executable in $tmp, which outputs $tmp/sqfstar.help +# and $tmp/sqfstar.version. This gets around the fact help2man wants +# to pass --help and --version directly to sqfstar, rather than take the +# (modified) output from $tmp/sqfstar.help and $tmp/sqfstar.version + +print "#!/bin/sh +if [ \$1 = \"--help\" ]; then + cat $tmp/sqfstar.help +else + cat $tmp/sqfstar.version +fi" > $tmp/sqfstar.sh + +chmod u+x $tmp/sqfstar.sh + +# help2man gets confused by the version date returned by -version, +# and includes it in the version string + +sed -i "s/ (.*)$//" $tmp/sqfstar.version + +# help2man expects copyright to have an upper-case C ... + +sed -i "s/^copyright/Copyright/" $tmp/sqfstar.version + +# help2man doesn't pick up the author from the version. Easiest to add +# it here. + +print >> $tmp/sqfstar.version +print "Written by Phillip Lougher <phillip@squashfs.org.uk>" >> $tmp/sqfstar.version + +# Man pages expect the options to be in the "Options" section. So insert +# Options section after first line + +sed -i "1a *OPTIONS*" $tmp/sqfstar.help + +# Delete the first line, as this is being replaced by a section included +# from sqfstar.h2m + +sed -i "1d" $tmp/sqfstar.help + +# help2man expects options to start in the 2nd column + +sed -i "s/^-/ -/" $tmp/sqfstar.help +sed -i "s/^ *-X/ -X/" $tmp/sqfstar.help + +# help2man expects the options usage to be separated from the +# option and operands text by at least 2 spaces. + +sed -i -e "s/regex> exclude/regex> exclude/" -e "s/regex> include/regex> include/" $tmp/sqfstar.help + +# Uppercase the options operands (between < and > ) to make it conform +# more to man page standards + +sed -i "s/<[^>]*>/\U&/g" $tmp/sqfstar.help + +# Remove the "<" and ">" around options operands to make it conform +# more to man page standards + +sed -i -e "s/<//g" -e "s/>//g" $tmp/sqfstar.help + +# help2man doesn't deal well with the list of supported compressors. +# So concatenate them onto one line with commas + +sed -i "/^ -comp/ { +N +s/\n */. / +s/:/: / + +N +s/\n *\([^ ]*$\)/\1/ +s/\n *\([^ ]* (default)$\)/\1/ + +: again +N +/\n -noI/b + +s/\n *\([^ ]*$\)/, \1/ +s/\n *\([^ ]* (default)$\)/, \1/ +b again +}" $tmp/sqfstar.help + +# help2man doesn't deal well with the list of lzo1* algorithms. +# So concatenate them onto one line with commas + +sed -i "/^ *lzo1x_1/ { +s/\n *\([^ ]*$\)/\1/ +s/\n *\([^ ]* (default)$\)/\1/ + +: again +N +/\n *lzo/!b + +s/\n *\([^ ]*$\)/, \1/ +s/\n *\([^ ]* (default)$\)/, \1/ +b again +}" $tmp/sqfstar.help + +# Make the pseudo file definitions into "options" so they're handled +# properly by help2man + +sed -i "s/^\"filename/ -p \"filename/" $tmp/sqfstar.help + +# Make each compressor entry in the compressors available section, a subsection +# First, have to deal with the deprecated lzma compressor separately, because +# it doesn't have any options (i.e. text prefixed with -). + +sed -i "/^ *lzma/ { +s/^ *\(lzma.*$\)/\1:/ +n +s/^ */ / +} " $tmp/sqfstar.help + +# Now deal with the others + +sed -i -e "s/^ *\(gzip.*$\)/\1:/" -e "s/^ *\(lzo$\)/\1:/" \ + -e "s/^ *\(lzo (default)$\)/\1:/" -e "s/^ *\(lz4.*$\)/\1:/" \ + -e "s/^ *\(xz.*$\)/\1:/" -e "s/^ *\(zstd.*$\)/\1:/" \ + $tmp/sqfstar.help + +# Concatenate the options text (normal options and compressor options) on to one +# line. Add a full stop to the end of the options text + +sed -i "/^ -/ { +:option +s/^ *-/ -/ + +/ -.* /!s/.$/& / + +:again +N +/\n$/b print +/\n[^ ]/b print +/\n -/b print +s/\n */ / +b again + +:print +s/ \n/.\n/ +s/\([^.]\)\n/\1.\n/ +P +s/^.*\n// +/^ *-/b option +}" $tmp/sqfstar.help + +# Concatenate the SOURCE_DATE_EPOCH text on to one line. Indent the line by +# two and add a full stop to the end of the line + +sed -i " /SOURCE_DATE_EPOCH/ { +s/SOURCE_DATE_EPOCH/ SOURCE_DATE_EPOCH/ + +:again +N +/\n$/b print +s/\n */ / +b again + +:print +s/\([^.]\)\n/\1.\n/ +}" $tmp/sqfstar.help + +# Make Compressors available header into a manpage section + +sed -i "s/\(Compressors available and compressor specific options\):/*\1*/" $tmp/sqfstar.help + +# Make pseudo definition format header into a manpage section + +sed -i "s/\(Pseudo file definition format\):/*\1*/" $tmp/sqfstar.help + +# Add reference to manpages for other squashfs-tools programs +sed -i "s/See also:/See also:\nmksquashfs(1), unsquashfs(1), sqfscat(1)\n/" $tmp/sqfstar.help + +# Make See also header into a manpage section + +sed -i "s/\(See also\):/*\1*/" $tmp/sqfstar.help + +# Make Environment header into a manpage section + +sed -i "s/\(Environment\):/*\1*/" $tmp/sqfstar.help + +if ! help2man -Ni sqfstar.h2m -o $2 $tmp/sqfstar.sh; then + error "$0: help2man returned error. Aborting" + exit 1 +fi + +rm -rf $tmp |