From e7112a726bf6f80586adc173d83a5407da914b5e Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 24 Nov 2023 20:29:52 +0100 Subject: [PATCH] CI: verify libcurl function SYNPOSIS sections With the .github/scripits/verify-synopsis.pl script Closes #12402 --- .github/scripts/verify-synopsis.pl | 81 ++++++++++++++++++++++++++++++ .github/workflows/synopsis.yml | 28 +++++++++++ 2 files changed, 109 insertions(+) create mode 100755 .github/scripts/verify-synopsis.pl create mode 100644 .github/workflows/synopsis.yml diff --git a/.github/scripts/verify-synopsis.pl b/.github/scripts/verify-synopsis.pl new file mode 100755 index 0000000000..34f15a8e0c --- /dev/null +++ b/.github/scripts/verify-synopsis.pl @@ -0,0 +1,81 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , 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 +# +########################################################################### + +my @files = @ARGV; +my $cfile = "test.c"; + +if($files[0] eq "-h") { + print "Usage: verify-synopsis [man pages]\n"; + exit; +} + +sub testcompile { + my $rc = system("gcc -c test.c -DCURL_DISABLE_TYPECHECK -DCURL_ALLOW_OLD_MULTI_SOCKET -I include") >> 8; + return $rc; +} + + +sub extract { + my($f) = @_; + my $syn = 0; + my $l = 0; + my $iline = 0; + open(F, "<$f"); + open(O, ">$cfile"); + while() { + $iline++; + if(/^.SH SYNOPSIS/) { + $syn = 1 + } + elsif($syn == 1) { + if(/^.nf/) { + $syn++; + print O "#line $iline \"$f\"\n"; + } + } + elsif($syn == 2) { + if(/^.fi/) { + last; + } + # turn the vararg argument into vararg + $_ =~ s/, parameter\)\;/, ...);/; + print O $_; + $l++; + } + } + close(F); + close(O); + + return 0; +} + +my $error; +for my $m (@files) { + print "Verify $m\n"; + extract($m); + $error |= testcompile($m); +} +exit $error; + diff --git a/.github/workflows/synopsis.yml b/.github/workflows/synopsis.yml new file mode 100644 index 0000000000..948a83acb2 --- /dev/null +++ b/.github/workflows/synopsis.yml @@ -0,0 +1,28 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: SYNOPSIS + +on: + push: + branches: + - master + - '*/ci' + paths: + - 'docs/libcurl/curl_*.3' + pull_request: + branches: + - master + paths: + - 'docs/libcurl/curl_*.3' + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: verify-synopsis + run: ./.github/scripts/verify-synopsis.pl docs/libcurl/curl*.3