summaryrefslogtreecommitdiffstats
path: root/scripts/FIXME_list.sh
blob: cdaef7691c11268a1747042e3f6f048f69c294ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/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