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;
|