summaryrefslogtreecommitdiffstats
path: root/doc/Tapset_Reference_Guide/manpager.sh
diff options
context:
space:
mode:
Diffstat (limited to 'doc/Tapset_Reference_Guide/manpager.sh')
-rw-r--r--doc/Tapset_Reference_Guide/manpager.sh131
1 files changed, 131 insertions, 0 deletions
diff --git a/doc/Tapset_Reference_Guide/manpager.sh b/doc/Tapset_Reference_Guide/manpager.sh
new file mode 100644
index 00000000..2b9873b7
--- /dev/null
+++ b/doc/Tapset_Reference_Guide/manpager.sh
@@ -0,0 +1,131 @@
+#!/bin/bash
+# This script builds the man pages from comments in tapsets. As such, the man page content
+# generated herein should be in sync with Tapset Reference Guide
+
+# cleanup
+rm -rf workingdir
+
+# create working directory
+mkdir workingdir ;
+
+# create list of man pages to generate; should be in sync with Tapset Reference Guide
+cat ../SystemTap_Tapset_Reference/tapsets.tmpl | grep ^\!Itapset > manpageus ;
+sed -i -e 's/\!Itapset\///g' manpageus ;
+
+# copy list of man pages into working directory
+for i in `cat manpageus` ; do cp ../../tapset/$i workingdir ; done ;
+
+# enter workdir
+cd workingdir ;
+
+# copy tapsetdescriptions, then clean
+for i in `cat ../manpageus`; do
+sed -n '/\/\/ <tapsetdescription>/,/\/\/ <\/tapsetdescription>/ s/.*/&/w temp' < $i ;
+mv temp $i.tapsetdescription ;
+sed -i -e 's/\/\/ <tapsetdescription>//g' $i.tapsetdescription ;
+sed -i -e 's/\/\/ <\/tapsetdescription>//g' $i.tapsetdescription ;
+sed -i -e 's/\/\///g' $i.tapsetdescription ;
+done
+
+# strip all tapset files to just comments; but all comments must be exactly 1 space before and after "*"
+for i in `cat ../manpageus` ; do sed -i -e 's/^ \*/ \*/g' $i;
+sed -i -e 's/^ \* / \* /g' $i;
+# mark the start of each probe entry (sub "/**")
+perl -p -i -e 's|^/\*\*| *probestart|g' $i;
+sed -i -e '/^ \*/!d' $i;
+# rename all tapsets (remove .stp filename suffix), create templates
+echo $i > tempname ;
+sed -i -e 's/.stp//g' tempname ;
+mv $i `cat tempname` ; mv tempname $i ;
+done ;
+# clean all tapsetdescriptions (remove excess spaces)
+# for i in `ls | grep tapsetdescription` ; do perl -p -i -e 's|^\n||g' $i ; done ;
+
+# create man page headers
+for i in `ls | grep -v .stp | grep -v tapsetdescription` ; do
+#echo ".\" -*- nroff -*-" >> $i.template ;
+echo ".TH STAPPROBES."$i" 5 @DATE@ "IBM"" >> $i.template ;
+echo ".SH NAME" >> $i.template ;
+echo "stapprobes."`cat $i.stp`" \- systemtap "`cat $i.stp`" probe points" >> $i.template ;
+echo " " >> $i.template ;
+echo ".SH DESCRIPTION" >> $i.template ;
+cat $i.stp.tapsetdescription >> $i.template ;
+echo " " >> $i.template ;
+#echo " " >> $i.template ;
+echo ".SH PROBES" >> $i.template ;
+echo ".br" >> $i.template ;
+echo ".P" >> $i.template ;
+echo ".TP" >> $i.template ;
+done
+
+# MOST IMPORTANT: clean man page body!
+for i in `ls | grep -v .stp | grep -v tapsetdescription | grep -v template` ;
+do cp $i $i.tmp ;
+perl -p -i -e 's| \* sfunction|.BR|g' $i.tmp ;
+perl -p -i -e 's| \* probe|.BR|g' $i.tmp ;
+perl -p -i -e 's| -|\ninitlinehere|g' $i.tmp ;
+perl -p -i -e 's|^initlinehere([^\n]*)\n|\n.br\n$1\n\n.B Arguments:|g' $i.tmp ;
+perl -p -i -e 's| \* @([^:]*):|\n.I $1\n.br\n|g' $i.tmp ;
+perl -p -i -e 's| \* ([^:]*):|\n.BR $1:\n.br\n|g' $i.tmp ;
+perl -p -i -e 's|\*probestart|\n.P\n.TP|g' $i.tmp ;
+perl -p -i -e 's|\.I|\n\n.I|g' $i.tmp ;
+# special formatting for Arguments header
+perl -p -i -e 's|.B Arguments: \*\/||g' $i.tmp ;
+perl -p -i -e 's|.B Arguments: \*|.B Description:|g' $i.tmp ;
+
+cat $i.tmp |
+perl -p -e 'undef $/;s|.B Arguments:\n.B|.B|msg' |
+perl -p -e 'undef $/;s|\n\n\n|\n\n|msg' > $i.manpagebody ;
+done
+
+# generate footer template
+mv ../manpageus .
+sed -i -e 's/.stp//g' manpageus
+echo ".SH SEE ALSO" >> footer
+echo ".IR stap (1)," >> footer
+echo ".IR stapprobes (5)," >> footer
+for i in `cat manpageus`; do echo ".IR stapprobes."$i" (5)," >> footer ; done
+
+# assemble parts
+for i in `cat manpageus`; do
+cat $i.template >> $i.5 ;
+cat $i.manpagebody >> $i.5 ;
+cat footer >> $i.5 ;
+done
+
+# cleanup
+for i in `cat manpageus`; do
+# context.stp
+perl -p -i -e 's|.B Description:/|\n.P\n.TP|g' $i.5 ;
+perl -p -i -e 's|.B Description:|.B Description:\n\n |g' $i.5 ;
+# convert tags
+perl -p -i -e 's|</[^>]*>([^.])|$1\n|g' $i.5 ;
+perl -p -i -e 's|<[^>]*>|\n.B |g' $i.5 ;
+cat $i.5 |
+perl -p -e 'undef $/;s|\.B Arguments:\n\n\.B |.B|msg' |
+# for tagged commands followed by periods
+perl -p -e 'undef $/;s|\n\.B \.|.\n|msg' |
+perl -p -e 'undef $/;s|\n \* | |msg' > stapprobes.$i.5.in ;
+# cleanup all remaining stars, excess initial whitespace, and trailing "/" per line
+perl -p -i -e 's|^ \*||g' stapprobes.$i.5.in;
+perl -p -i -e 's|^[ ]*||g' stapprobes.$i.5.in;
+perl -p -i -e 's|^/||g' stapprobes.$i.5.in;
+# cleanup remaining excess whitespace
+perl -p -i -e 's|\t\t| |g' stapprobes.$i.5.in;
+perl -p -i -e 's|^ ||g' stapprobes.$i.5.in;
+sed -i -e 's/ / /g' stapprobes.$i.5.in;
+done
+
+# file cleanup
+rm `ls | grep -v stapprobes`
+#mv workingdir final_manpages
+# perl -p -i -e 's|||g' stapprobes.$i.5.in ;
+
+# perl -p -i -e 's|||g' $i.manpagebody
+# use to move marked strings.
+# sed -n '/\/\/ <tapsetdescription>/,/\/\/ <\/tapsetdescription>/ s/.*/&/w bleh' < ioscheduler
+# remove excess initial whitespace for each line
+# perl -p -i -e 's|^ ||g' stapprobes.$i.5.in;
+# convert tags
+# perl -p -i -e 's|</[^>]*>|\n|g' stapprobes.$i.5.in ;
+# perl -p -i -e 's|<[^>]*>|\n.B |g' stapprobes.$i.5.in ; \ No newline at end of file