[Feature][ZXW-88]merge P50 version

Only Configure: No
Affected branch: master
Affected module: unknown
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: I34667719d9e0e7e29e8e4368848601cde0a48408
diff --git a/ap/lib/libcurl/curl-7.86.0/tests/manpage-syntax.pl b/ap/lib/libcurl/curl-7.86.0/tests/manpage-syntax.pl
new file mode 100755
index 0000000..a83223d
--- /dev/null
+++ b/ap/lib/libcurl/curl-7.86.0/tests/manpage-syntax.pl
@@ -0,0 +1,288 @@
+#!/usr/bin/env perl
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at https://curl.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+# SPDX-License-Identifier: curl
+#
+###########################################################################
+#
+# Scan man page(s) and detect some simple and yet common formatting mistakes.
+#
+# Output all deviances to stderr.
+
+use strict;
+use warnings;
+
+# get the file name first
+my $symbolsinversions=shift @ARGV;
+
+# we may get the dir roots pointed out
+my @manpages=@ARGV;
+my $errors = 0;
+
+my %optblessed;
+my %funcblessed;
+my @optorder = (
+    'NAME',
+    'SYNOPSIS',
+    'DESCRIPTION',
+     #'DEFAULT', # CURLINFO_ has no default
+    'PROTOCOLS',
+    'EXAMPLE',
+    'AVAILABILITY',
+    'RETURN VALUE',
+    'SEE ALSO'
+    );
+my @funcorder = (
+    'NAME',
+    'SYNOPSIS',
+    'DESCRIPTION',
+    'EXAMPLE',
+    'AVAILABILITY',
+    'RETURN VALUE',
+    'SEE ALSO'
+    );
+my %shline; # section => line number
+
+my %symbol;
+
+# some CURLINFO_ symbols are not actual options for curl_easy_getinfo,
+# mark them as "deprecated" to hide them from link-warnings
+my %deprecated = (
+    CURLINFO_TEXT => 1,
+    CURLINFO_HEADER_IN => 1,
+    CURLINFO_HEADER_OUT => 1,
+    CURLINFO_DATA_IN => 1,
+    CURLINFO_DATA_OUT => 1,
+    CURLINFO_SSL_DATA_IN => 1,
+    CURLINFO_SSL_DATA_OUT => 1,
+    );
+sub allsymbols {
+    open(F, "<$symbolsinversions") ||
+        die "$symbolsinversions: $|";
+    while(<F>) {
+        if($_ =~ /^([^ ]*) +(.*)/) {
+            my ($name, $info) = ($1, $2);
+            $symbol{$name}=$name;
+
+            if($info =~ /([0-9.]+) +([0-9.]+)/) {
+                $deprecated{$name}=$info;
+            }
+        }
+    }
+    close(F);
+}
+
+sub scanmanpage {
+    my ($file) = @_;
+    my $reqex = 0;
+    my $inex = 0;
+    my $insynop = 0;
+    my $exsize = 0;
+    my $synopsize = 0;
+    my $shc = 0;
+    my $optpage = 0; # option or function
+    my @sh;
+    my $SH="";
+
+    open(M, "<$file") || die "no such file: $file";
+    if($file =~ /[\/\\](CURL|curl_)[^\/\\]*.3/) {
+        # This is a man page for libcurl. It requires an example!
+        $reqex = 1;
+        if($1 eq "CURL") {
+            $optpage = 1;
+        }
+    }
+    my $line = 1;
+    while(<M>) {
+        chomp;
+        if($_ =~ /^.so /) {
+            # this man page is just a referral
+            close(M);
+            return;
+        }
+        if(($_ =~ /^\.SH SYNOPSIS/i) && ($reqex)) {
+            # this is for libcurl man page SYNOPSIS checks
+            $insynop = 1;
+            $inex = 0;
+        }
+        elsif($_ =~ /^\.SH EXAMPLE/i) {
+            $insynop = 0;
+            $inex = 1;
+        }
+        elsif($_ =~ /^\.SH/i) {
+            $insynop = 0;
+            $inex = 0;
+        }
+        elsif($inex)  {
+            $exsize++;
+            if($_ =~ /[^\\]\\n/) {
+                print STDERR "$file:$line '\\n' need to be '\\\\n'!\n";
+            }
+        }
+        elsif($insynop)  {
+            $synopsize++;
+            if(($synopsize == 1) && ($_ !~ /\.nf/)) {
+                print STDERR "$file:$line:1:ERROR: be .nf for proper formatting\n";
+            }
+        }
+        if($_ =~ /^\.SH ([^\r\n]*)/i) {
+            my $n = $1;
+            # remove enclosing quotes
+            $n =~ s/\"(.*)\"\z/$1/;
+            push @sh, $n;
+            $shline{$n} = $line;
+            $SH = $n;
+        }
+
+        if($_ =~ /^\'/) {
+            print STDERR "$file:$line line starts with single quote!\n";
+            $errors++;
+        }
+        if($_ =~ /\\f([BI])(.*)/) {
+            my ($format, $rest) = ($1, $2);
+            if($rest !~ /\\fP/) {
+                print STDERR "$file:$line missing \\f${format} terminator!\n";
+                $errors++;
+            }
+        }
+        if($_ =~ /(.*)\\f([^BIP])/) {
+            my ($pre, $format) = ($1, $2);
+            if($pre !~ /\\\z/) {
+                # only if there wasn't another backslash before the \f
+                print STDERR "$file:$line suspicious \\f format!\n";
+                $errors++;
+            }
+        }
+        if($optpage && $SH && ($SH !~ /^(SYNOPSIS|EXAMPLE|NAME|SEE ALSO)/i) &&
+           ($_ =~ /(.*)(CURL(OPT_|MOPT_|INFO_)[A-Z0-9_]*)/)) {
+            # an option with its own man page, check that it is tagged
+            # for linking
+            my ($pref, $symbol) = ($1, $2);
+            if($deprecated{$symbol}) {
+                # let it be
+            }
+            elsif($pref !~ /\\fI\z/) {
+                print STDERR "$file:$line option $symbol missing \\fI tagging\n";
+                $errors++;
+            }
+        }
+        if($_ =~ /[ \t]+$/) {
+            print STDERR "$file:$line trailing whitespace\n";
+            $errors++;
+        }
+        if($_ =~ /\\f([BI])([^\\]*)\\fP/) {
+            my $r = $2;
+            if($r =~ /^(CURL.*)\(3\)/) {
+                my $rr = $1;
+                if(!$symbol{$rr}) {
+                    print STDERR "$file:$line link to non-libcurl option $rr!\n";
+                    $errors++;
+                }
+            }
+        }
+        $line++;
+    }
+    close(M);
+
+    if($reqex) {
+        # only for libcurl options man-pages
+
+        my $shcount = scalar(@sh); # before @sh gets shifted
+        if($exsize < 2) {
+            print STDERR "$file:$line missing EXAMPLE section\n";
+            $errors++;
+        }
+
+        if($shcount < 3) {
+            print STDERR "$file:$line too few man page sections!\n";
+            $errors++;
+            return;
+        }
+
+        my $got = "start";
+        my $i = 0;
+        my $shused = 1;
+        my @shorig = @sh;
+        my @order = $optpage ? @optorder : @funcorder;
+        my $blessed = $optpage ? \%optblessed : \%funcblessed;
+
+        while($got) {
+            my $finesh;
+            $got = shift(@sh);
+            if($got) {
+                if($$blessed{$got}) {
+                    $i = $$blessed{$got};
+                    $finesh = $got; # a mandatory one
+                }
+            }
+            if($i && defined($finesh)) {
+                # mandatory section
+
+                if($i != $shused) {
+                    printf STDERR "$file:%u Got %s, when %s was expected\n",
+                        $shline{$finesh},
+                        $finesh,
+                        $order[$shused-1];
+                    $errors++;
+                    return;
+                }
+                $shused++;
+                if($i == scalar(@order)) {
+                    # last mandatory one, exit
+                    last;
+                }
+            }
+        }
+
+        if($i != scalar(@order)) {
+            printf STDERR "$file:$line missing mandatory section: %s\n",
+                $order[$i];
+            printf STDERR "$file:$line section found at index %u: '%s'\n",
+                $i, $shorig[$i];
+            printf STDERR " Found %u used sections\n", $shcount;
+            $errors++;
+        }
+    }
+}
+
+allsymbols();
+
+if(!$symbol{'CURLALTSVC_H1'}) {
+    print STDERR "didn't get the symbols-in-version!\n";
+    exit;
+}
+
+my $ind = 1;
+for my $s (@optorder) {
+    $optblessed{$s} = $ind++
+}
+$ind = 1;
+for my $s (@funcorder) {
+    $funcblessed{$s} = $ind++
+}
+
+for my $m (@manpages) {
+    scanmanpage($m);
+}
+
+print STDERR "ok\n" if(!$errors);
+
+exit $errors;