#!/bin/sh # # FIXME_list.sh # # Display FIXME segments from man-pages source files # # (C) Copyright 2007 & 2013, Michael Kerrisk # 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 2 # 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 # (http://www.gnu.org/licenses/gpl-2.0.html). # ###################################################################### # # (C) Copyright 2006 & 2013, Michael Kerrisk # 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 2 # 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 # (http://www.gnu.org/licenses/gpl-2.0.html). # # show_all="n" while getopts "a" optname; do case "$optname" in a) # "all" # Even show FIXMEs that aren't generally interesting. (Typically # these FIXMEs are notes to the maintainer to reverify something # at a future date.) show_all="y" ;; *) echo "Unknown option: $OPTARG" exit 1 ;; esac done shift $(( $OPTIND - 1 )) if test $# -eq 0; then echo "Usage: $0 [-a] pathname..." 1>&2 exit 1; fi for dir in "$@"; do for page in $(find "$dir" -type f -name '*.[1-9]' \ -exec grep -l FIXME {} \; | sort) do cat "$page" | awk -v SHOW_ALL=$show_all -v PAGE_NAME="$page" \ ' BEGIN { page_FIXME_cnt = 0; } /FIXME/ { # /.\" FIXME . / ==> do not display this FIXME, unless # -a command-line option was supplied if ($0 ~ /^\.\\" FIXME \./ ) FIXME_type = "hidden" else if ($0 ~ /^\.\\" FIXME *\?/ ) FIXME_type = "question" else FIXME_type = "normal"; if (FIXME_type == "normal" || SHOW_ALL == "y") { if (page_FIXME_cnt == 0) { print "=========="; print PAGE_NAME; } page_FIXME_cnt++; finished = 0; do { print $0; # Implicit end of FIXME is end-of-file or a line # that is not a comment if (getline == 0) finished = 1; if (!($0 ~ /^.\\"/)) finished = 1; # /.\" .$/ ==> Explicit end of FIXME if ($0 ~ /^.\\" \.$/) finished = 1; } while (!finished); print ""; } } ' done | sed -e 's/^\.\\"/ /' | sed -e 's/ *$//' | cat -s done