xref: /aosp_15_r20/external/curl/tests/test1140.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker###########################################################################
25*6236dae4SAndroid Build Coastguard Worker#
26*6236dae4SAndroid Build Coastguard Worker# scan manpages to find basic syntactic problems such as unbalanced \f
27*6236dae4SAndroid Build Coastguard Worker# codes or references to non-existing curl manpages.
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard Workermy $docsroot = $ARGV[0];
30*6236dae4SAndroid Build Coastguard Worker
31*6236dae4SAndroid Build Coastguard Workerif(!$docsroot || ($docsroot eq "-g")) {
32*6236dae4SAndroid Build Coastguard Worker    print "Usage: test1140.pl <docs root dir> [manpages]\n";
33*6236dae4SAndroid Build Coastguard Worker    exit;
34*6236dae4SAndroid Build Coastguard Worker}
35*6236dae4SAndroid Build Coastguard Worker
36*6236dae4SAndroid Build Coastguard Worker
37*6236dae4SAndroid Build Coastguard Workershift @ARGV;
38*6236dae4SAndroid Build Coastguard Worker
39*6236dae4SAndroid Build Coastguard Workermy @f = @ARGV;
40*6236dae4SAndroid Build Coastguard Worker
41*6236dae4SAndroid Build Coastguard Workermy %manp;
42*6236dae4SAndroid Build Coastguard Worker
43*6236dae4SAndroid Build Coastguard Workersub manpresent {
44*6236dae4SAndroid Build Coastguard Worker    my ($man) = @_;
45*6236dae4SAndroid Build Coastguard Worker    if($manp{$man}) {
46*6236dae4SAndroid Build Coastguard Worker        return 1;
47*6236dae4SAndroid Build Coastguard Worker    }
48*6236dae4SAndroid Build Coastguard Worker    elsif(-r "$docsroot/$man" ||
49*6236dae4SAndroid Build Coastguard Worker          -r "$docsroot/libcurl/$man" ||
50*6236dae4SAndroid Build Coastguard Worker          -r "$docsroot/libcurl/opts/$man") {
51*6236dae4SAndroid Build Coastguard Worker        $manp{$man}=1;
52*6236dae4SAndroid Build Coastguard Worker        return 1;
53*6236dae4SAndroid Build Coastguard Worker    }
54*6236dae4SAndroid Build Coastguard Worker    return 0;
55*6236dae4SAndroid Build Coastguard Worker}
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Workersub file {
58*6236dae4SAndroid Build Coastguard Worker    my ($f) = @_;
59*6236dae4SAndroid Build Coastguard Worker    open(my $fh, "<", "$f") ||
60*6236dae4SAndroid Build Coastguard Worker        die "test1140.pl could not open $f";
61*6236dae4SAndroid Build Coastguard Worker    my $line = 1;
62*6236dae4SAndroid Build Coastguard Worker    while(<$fh>) {
63*6236dae4SAndroid Build Coastguard Worker        chomp;
64*6236dae4SAndroid Build Coastguard Worker        my $l = $_;
65*6236dae4SAndroid Build Coastguard Worker        while($l =~ s/\\f(.)([^ ]*)\\f(.)//) {
66*6236dae4SAndroid Build Coastguard Worker            my ($pre, $str, $post)=($1, $2, $3);
67*6236dae4SAndroid Build Coastguard Worker            if($str =~ /^\\f[ib]/i) {
68*6236dae4SAndroid Build Coastguard Worker                print "error: $f:$line: double-highlight\n";
69*6236dae4SAndroid Build Coastguard Worker                $errors++;
70*6236dae4SAndroid Build Coastguard Worker            }
71*6236dae4SAndroid Build Coastguard Worker            if($post ne "P") {
72*6236dae4SAndroid Build Coastguard Worker                print "error: $f:$line: missing \\fP after $str\n";
73*6236dae4SAndroid Build Coastguard Worker                $errors++;
74*6236dae4SAndroid Build Coastguard Worker            }
75*6236dae4SAndroid Build Coastguard Worker            if($str =~ /((libcurl|curl)([^ ]*))\(3\)/i) {
76*6236dae4SAndroid Build Coastguard Worker                my $man = "$1.3";
77*6236dae4SAndroid Build Coastguard Worker                $man =~ s/\\//g; # cut off backslashes
78*6236dae4SAndroid Build Coastguard Worker                if(!manpresent($man)) {
79*6236dae4SAndroid Build Coastguard Worker                    print "error: $f:$line: referring to non-existing manpage $man\n";
80*6236dae4SAndroid Build Coastguard Worker                    $errors++;
81*6236dae4SAndroid Build Coastguard Worker                }
82*6236dae4SAndroid Build Coastguard Worker                if($pre ne "I") {
83*6236dae4SAndroid Build Coastguard Worker                    print "error: $f:$line: use \\fI before $str\n";
84*6236dae4SAndroid Build Coastguard Worker                    $errors++;
85*6236dae4SAndroid Build Coastguard Worker                }
86*6236dae4SAndroid Build Coastguard Worker            }
87*6236dae4SAndroid Build Coastguard Worker        }
88*6236dae4SAndroid Build Coastguard Worker        if($l =~ /(curl([^ ]*)\(3\))/i) {
89*6236dae4SAndroid Build Coastguard Worker            print "error: $f:$line: non-referencing $1\n";
90*6236dae4SAndroid Build Coastguard Worker            $errors++;
91*6236dae4SAndroid Build Coastguard Worker        }
92*6236dae4SAndroid Build Coastguard Worker        if($l =~ /^\.BR (.*)/) {
93*6236dae4SAndroid Build Coastguard Worker            my $i= $1;
94*6236dae4SAndroid Build Coastguard Worker            while($i =~ s/((lib|)curl([^ ]*)) *\"\(3\)(,|) *\" *//i ) {
95*6236dae4SAndroid Build Coastguard Worker                my $man = "$1.3";
96*6236dae4SAndroid Build Coastguard Worker                $man =~ s/\\//g; # cut off backslashes
97*6236dae4SAndroid Build Coastguard Worker                if(!manpresent($man)) {
98*6236dae4SAndroid Build Coastguard Worker                    print "error: $f:$line: referring to non-existing manpage $man\n";
99*6236dae4SAndroid Build Coastguard Worker                    $errors++;
100*6236dae4SAndroid Build Coastguard Worker                }
101*6236dae4SAndroid Build Coastguard Worker            }
102*6236dae4SAndroid Build Coastguard Worker        }
103*6236dae4SAndroid Build Coastguard Worker        $line++;
104*6236dae4SAndroid Build Coastguard Worker    }
105*6236dae4SAndroid Build Coastguard Worker    close($fh);
106*6236dae4SAndroid Build Coastguard Worker}
107*6236dae4SAndroid Build Coastguard Worker
108*6236dae4SAndroid Build Coastguard Workerforeach my $f (@f) {
109*6236dae4SAndroid Build Coastguard Worker    file($f);
110*6236dae4SAndroid Build Coastguard Worker}
111*6236dae4SAndroid Build Coastguard Worker
112*6236dae4SAndroid Build Coastguard Workerprint "OK\n" if(!$errors);
113*6236dae4SAndroid Build Coastguard Worker
114*6236dae4SAndroid Build Coastguard Workerexit $errors?1:0;
115