summaryrefslogtreecommitdiff
path: root/man/makelinks
blob: e2898cf8c9dd24f4c09b911182b2509bc5e288d3 (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
114
115
116
117
118
119
120
121
122
123
#!/usr/bin/env perl
#-------------------------------------------------------------------------------
# Copyright 2021, Thomas E. Dickey
#
#                         All Rights Reserved
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name(s) of the above copyright
# holders shall not be used in advertising or otherwise to promote the
# sale, use or other dealings in this Software without prior written
# authorization.
#-------------------------------------------------------------------------------
# Ensure that the function-prototypes listed in Xcursor.man have ".so" files,
# and that those are listed in the makefile.

use strict;
use warnings;

our $opt_v;
our %man_links;

sub read_file($) {
    my $file = shift;
    my @data;
    if ( open my $fh, $file ) {
        @data = <$fh>;
        close $fh;
        chomp @data;
    }
    return @data;
}

sub make_man_link($) {
    my $name = shift;
    my $link = ".so man__libmansuffix__/Xcursor.__libmansuffix__";
    my $file = $name . ".man";
    if ( -f $file ) {
        my @data = &read_file($file);
        if ( $#data != 0 or $data[0] ne $link ) {
            printf "?? wrong: $file\n";
        }
    }
    else {
        printf "...create: $file\n";
        open my $fh, ">$file" or die "cannot create $file";
        printf $fh "%s\n", $link;
        close $fh;
        system("git add $file");
    }
    $man_links{$name} = $file;
}

sub scan_man($) {
    my $file = shift;
    printf "** scan $file\n";
    my @data = &read_file($file);
    my $last = "";
    for my $n ( 0 .. $#data ) {
        if ( $last =~ /^\.NS\b/ ) {
            my $name = $data[$n];
            $name =~ s/^(const)?\s*\w+\s*[*]*\s*(\w+)\b.*/$2/;
	    printf STDERR "MAP '%s' -> '%s'\n", $data[$n], $name if ( $opt_v );
            &make_man_link($name);
        }
        $last = $data[$n];
    }
}

sub scan_make($) {
    my $find = shift;
    my $file = shift;
    printf "** find $find in $file\n";
    my @data = &read_file($file);
    my %data;
    my $state = 0;
    for my $n ( 0 .. $#data ) {
        if ( $data[$n] =~ /^\s*$find\s*=/ ) {
            $state = 1;
        }
        elsif ( $state == 1 ) {
            if ( $data[$n] =~ /\\$/ ) {
            }
            else {
                $state = 2;
            }
            my $name = $data[$n];
            $name =~ s/^\s*(\w+)\s*[\\]?$/$1/;
            $data{$name} = 1;
        }
        elsif ( $state == 2 ) {
            last;
        }
    }
    for my $key ( sort keys %data ) {
        printf "manpage needs $key\n", unless ( defined $man_links{$key} );
    }
    for my $key ( sort keys %man_links ) {
        printf "$file needs $key\n", unless ( defined $data{$key} );
    }
}

&scan_man("Xcursor.man");
&scan_make( "Xcursor_shadows", "Makefile.am" );

1;