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