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# This script grew out of help from Przemyslaw Iskra and Balint Szilakszi 27*6236dae4SAndroid Build Coastguard Worker# a late evening in the #curl IRC channel. 28*6236dae4SAndroid Build Coastguard Worker# 29*6236dae4SAndroid Build Coastguard Worker 30*6236dae4SAndroid Build Coastguard Workeruse strict; 31*6236dae4SAndroid Build Coastguard Workeruse warnings; 32*6236dae4SAndroid Build Coastguard Workeruse vars qw($Cpreprocessor); 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Worker# 35*6236dae4SAndroid Build Coastguard Worker# configurehelp perl module is generated by configure script 36*6236dae4SAndroid Build Coastguard Worker# 37*6236dae4SAndroid Build Coastguard Workermy $rc = eval { 38*6236dae4SAndroid Build Coastguard Worker require configurehelp; 39*6236dae4SAndroid Build Coastguard Worker configurehelp->import(qw( 40*6236dae4SAndroid Build Coastguard Worker $Cpreprocessor 41*6236dae4SAndroid Build Coastguard Worker )); 42*6236dae4SAndroid Build Coastguard Worker 1; 43*6236dae4SAndroid Build Coastguard Worker}; 44*6236dae4SAndroid Build Coastguard Worker# Set default values if configure has not generated a configurehelp.pm file. 45*6236dae4SAndroid Build Coastguard Worker# This is the case with cmake. 46*6236dae4SAndroid Build Coastguard Workerif (!$rc) { 47*6236dae4SAndroid Build Coastguard Worker $Cpreprocessor = 'cpp'; 48*6236dae4SAndroid Build Coastguard Worker} 49*6236dae4SAndroid Build Coastguard Worker 50*6236dae4SAndroid Build Coastguard Worker# we may get the dir root pointed out 51*6236dae4SAndroid Build Coastguard Workermy $root=$ARGV[0] || "."; 52*6236dae4SAndroid Build Coastguard Worker 53*6236dae4SAndroid Build Coastguard Worker# need an include directory when building out-of-tree 54*6236dae4SAndroid Build Coastguard Workermy $i = ($ARGV[1]) ? "-I$ARGV[1] " : ''; 55*6236dae4SAndroid Build Coastguard Workermy $error; 56*6236dae4SAndroid Build Coastguard Worker 57*6236dae4SAndroid Build Coastguard Worker 58*6236dae4SAndroid Build Coastguard Workermy @syms; 59*6236dae4SAndroid Build Coastguard Workermy %manpage; 60*6236dae4SAndroid Build Coastguard Workermy %symadded; 61*6236dae4SAndroid Build Coastguard Worker 62*6236dae4SAndroid Build Coastguard Workersub checkmanpage { 63*6236dae4SAndroid Build Coastguard Worker my ($m) = @_; 64*6236dae4SAndroid Build Coastguard Worker 65*6236dae4SAndroid Build Coastguard Worker open(my $mh, "<", "$m"); 66*6236dae4SAndroid Build Coastguard Worker my $line = 1; 67*6236dae4SAndroid Build Coastguard Worker my $title; 68*6236dae4SAndroid Build Coastguard Worker my $addedin; 69*6236dae4SAndroid Build Coastguard Worker while(<$mh>) { 70*6236dae4SAndroid Build Coastguard Worker if(/^Title: (.*)/i) { 71*6236dae4SAndroid Build Coastguard Worker $title = $1; 72*6236dae4SAndroid Build Coastguard Worker } 73*6236dae4SAndroid Build Coastguard Worker elsif(/^Added-in: (.*)/i) { 74*6236dae4SAndroid Build Coastguard Worker $addedin = $1; 75*6236dae4SAndroid Build Coastguard Worker } 76*6236dae4SAndroid Build Coastguard Worker if($addedin && $title) { 77*6236dae4SAndroid Build Coastguard Worker if($manpage{$title}) { 78*6236dae4SAndroid Build Coastguard Worker print "$title is a duplicate symbol in file $m\n"; 79*6236dae4SAndroid Build Coastguard Worker $error++; 80*6236dae4SAndroid Build Coastguard Worker } 81*6236dae4SAndroid Build Coastguard Worker $manpage{$title} = $addedin; 82*6236dae4SAndroid Build Coastguard Worker last; 83*6236dae4SAndroid Build Coastguard Worker } 84*6236dae4SAndroid Build Coastguard Worker $line++; 85*6236dae4SAndroid Build Coastguard Worker } 86*6236dae4SAndroid Build Coastguard Worker close($mh); 87*6236dae4SAndroid Build Coastguard Worker} 88*6236dae4SAndroid Build Coastguard Worker 89*6236dae4SAndroid Build Coastguard Workersub scanman_md_dir { 90*6236dae4SAndroid Build Coastguard Worker my ($d) = @_; 91*6236dae4SAndroid Build Coastguard Worker opendir(my $dh, $d) || 92*6236dae4SAndroid Build Coastguard Worker die "Can't opendir: $!"; 93*6236dae4SAndroid Build Coastguard Worker my @mans = grep { /.md\z/ } readdir($dh); 94*6236dae4SAndroid Build Coastguard Worker closedir $dh; 95*6236dae4SAndroid Build Coastguard Worker for my $m (@mans) { 96*6236dae4SAndroid Build Coastguard Worker checkmanpage("$d/$m"); 97*6236dae4SAndroid Build Coastguard Worker } 98*6236dae4SAndroid Build Coastguard Worker} 99*6236dae4SAndroid Build Coastguard Worker 100*6236dae4SAndroid Build Coastguard Workerscanman_md_dir("$root/docs/libcurl"); 101*6236dae4SAndroid Build Coastguard Workerscanman_md_dir("$root/docs/libcurl/opts"); 102*6236dae4SAndroid Build Coastguard Worker 103*6236dae4SAndroid Build Coastguard Workeropen my $s, "<", "$root/docs/libcurl/symbols-in-versions"; 104*6236dae4SAndroid Build Coastguard Workerwhile(<$s>) { 105*6236dae4SAndroid Build Coastguard Worker if(/(^[^ \n]+) +(.*)/) { 106*6236dae4SAndroid Build Coastguard Worker my ($sym, $rest)=($1, $2); 107*6236dae4SAndroid Build Coastguard Worker my @a=split(/ +/, $rest); 108*6236dae4SAndroid Build Coastguard Worker push @syms, $sym; 109*6236dae4SAndroid Build Coastguard Worker 110*6236dae4SAndroid Build Coastguard Worker $symadded{$sym}=$a[0]; 111*6236dae4SAndroid Build Coastguard Worker } 112*6236dae4SAndroid Build Coastguard Worker} 113*6236dae4SAndroid Build Coastguard Workerclose $s; 114*6236dae4SAndroid Build Coastguard Worker 115*6236dae4SAndroid Build Coastguard Workermy $ignored=0; 116*6236dae4SAndroid Build Coastguard Workerfor my $e (sort @syms) { 117*6236dae4SAndroid Build Coastguard Worker if( $manpage{$e} ) { 118*6236dae4SAndroid Build Coastguard Worker 119*6236dae4SAndroid Build Coastguard Worker if( $manpage{$e} ne $symadded{$e} ) { 120*6236dae4SAndroid Build Coastguard Worker printf "%s.md says version %s, but SIV says %s\n", 121*6236dae4SAndroid Build Coastguard Worker $e, $manpage{$e}, $symadded{$e}; 122*6236dae4SAndroid Build Coastguard Worker $error++; 123*6236dae4SAndroid Build Coastguard Worker } 124*6236dae4SAndroid Build Coastguard Worker 125*6236dae4SAndroid Build Coastguard Worker } 126*6236dae4SAndroid Build Coastguard Worker} 127*6236dae4SAndroid Build Coastguard Workerprint "OK\n" if(!$error); 128*6236dae4SAndroid Build Coastguard Workerexit $error; 129