diff --git a/bin/tools/foamCreateManpage b/bin/tools/foamCreateManpage index 29e38fdb90c0e0a4d611b1e90521012cbbff8d96..d3e0f8154f818273619282eeace41e44ca6cd81a 100755 --- a/bin/tools/foamCreateManpage +++ b/bin/tools/foamCreateManpage @@ -27,8 +27,9 @@ usage() { Usage: ${0##*/} [OPTION] [appName .. [appNameN]] options: -dir dir Directory to process - -gzip Compressed output - -o DIR Write to alternative output directory + -gzip Compressed manpage output + -pdf Process as manpage and pass to ps2pdf + -output DIR Write to alternative output directory -version VER Specify an alternative version -h | -help Print the usage @@ -59,7 +60,7 @@ die() #------------------------------------------------------------------------------- searchDirs="$FOAM_APPBIN" -unset gzipFilter sedFilter outputDir +unset sedFilter outputDir outputType while [ "$#" -gt 0 ] do @@ -67,14 +68,17 @@ do -h | -help*) usage ;; - -d | -dir) + -dir) [ "$#" -ge 2 ] || die "'$1' option requires an argument" searchDirs="$2" [ -d "$searchDirs" ] || die "directory not found '$searchDirs'" shift ;; -gz | -gzip) - gzipFilter="gzip" + outputType="gz" + ;; + -pdf) + outputType="pdf" ;; -v | -version) [ "$#" -ge 2 ] || die "'$1' option requires an argument" @@ -100,52 +104,84 @@ done : ${outputDir:=$defaultOutputDir} # Verify that output is writeable -if [ -e "$outputDir" ] +if [ -e x"$outputDir" ] then [ -d "$outputDir" ] && [ -w "$outputDir" ] || \ die "Cannot write to $outputDir" "Not a directory, or no permission?" else - mkdir -p "$outputDir" || \ + mkdir -p "$outputDir" 2> /dev/null || \ die "Cannot create directory: $outputDir" fi -#------------------------------------------------------------------------------- - -# Pass through content, filter for version and/or gzip -# +echo "Generating manpages from OpenFOAM applications" 1>&2 +echo 1>&2 -tmpFile="$outputDir/${0##*/}" +# Use a tmp file so that we confirm that the content was +# generated and looks somewhat like a manpage (has a SYNOPSIS) +tmpFile="$outputDir/${0##*/}-tmp$$" trap "rm -fv $tmpFile >/dev/null; exit 0" EXIT TERM INT + +# Any special filter requirements? +# Default extension is "1" for manpage +outputExt="1" + +case "$outputType" in + pdf) + outputExt="pdf" + command -v groff > /dev/null || die "Missing program: groff" + command -v ps2pdf > /dev/null || die "Missing program: ps2pdf" + ;; + gz) + outputExt="1.gz" + command -v gzip > /dev/null || die "Missing program: gzip" + ;; +esac + + +#------------------------------------------------------------------------------- + +# Get nroff man content from application, store in tmp file for checking +# and output / filter +# 1 = application process() { local appName="$1" - local outFile="$outputDir/${appName##*/}.1" + local outFile="$outputDir/${appName##*/}" rm -f "$outFile"*; - "$appName" -help-man 2>/dev/null >| $tmpFile; + "$appName" -help-man | sed -e "${sedFilter}" 2>/dev/null >| "$tmpFile" + # Check that it looks ok if grep -F -q "SYNOPSIS" "$tmpFile" 2>/dev/null then - cat "$tmpFile" | \ - sed -e "${sedFilter}" | "${gzipFilter:-cat}" \ - >| "$outFile${gzipFilter:+.gz}" + case "$outputType" in + pdf) + groff -man "$tmpFile" | ps2pdf - "$outFile.$outputExt" + ;; + + gz) + gzip -c "$tmpFile" >| "$outFile.$outputExt" + ;; + + *) + \cp -f "$tmpFile" "$outFile.$outputExt" + ;; + esac - echo "$outFile${gzipFilter:+.gz}" 1>&2 + echo "$outFile.$outputExt" 1>&2 else - echo "Problem with $appName" 1>&2 + echo "Problem with ${appName##*/}" 1>&2 fi } + #------------------------------------------------------------------------------ # Default to standard search directories [ "$#" -gt 0 ] || set -- ${searchDirs} -echo "Generating manpages from OpenFOAM applications" 1>&2 -echo 1>&2 - for item do if [ -d "$item" ]