On 2/7/23 10:10 PM, Kyle Evans wrote:
The branch main has been updated by kevans:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=29c5f8bf9a011d92462977bae59b4889ec5d95ad

commit 29c5f8bf9a011d92462977bae59b4889ec5d95ad
Author:     Kyle Evans <kev...@freebsd.org>
AuthorDate: 2023-02-08 06:02:56 +0000
Commit:     Kyle Evans <kev...@freebsd.org>
CommitDate: 2023-02-08 06:09:19 +0000

     config: drop dependency on libnv
Compile mkmakefile.c as C++ instead and use an std::unordered_map to
     accomplish the same goal.
Reviewed by: imp
     Sponsored by:   Klara, Inc.
     Sponsored by:   NetApp, Inc.
     Differential Revision:  https://reviews.freebsd.org/D38275

I'm not quite sure how to fix it, but I believe this change is what has broken
the clang-12 cross-build jobs on GitHub's actions.  The error is a mismatch
in the declarations of getopt() as the Linux one adds a 'throw ()' specifier.

Note that clang-13 on the newer Ubuntu 22.04 builds file.  I haven't tried
examining the includes on 22.04 to see what has changed to avoid the error
there.

Here is the error from a recent run:

In file included from /usr/include/x86_64-linux-gnu/bits/getopt_posix.h:27,
14356
                 from /usr/include/unistd.h:869,
14357
                 from 
/home/runner/work/freebsd-src/freebsd-src/tools/build/cross-build/include/linux/unistd.h:53,
14358
                 from 
/home/runner/work/freebsd-src/freebsd-src/tools/build/cross-build/include/common/unistd.h:39,
14359
                 from 
/home/runner/work/freebsd-src/freebsd-src/usr.sbin/config/main.cc:61:
14360
/usr/include/x86_64-linux-gnu/bits/getopt_core.h:91:12: error: declaration of 
‘int getopt(int, char* const*, const char*) throw ()’ has a different exception 
specifier
14361
   91 | extern int getopt (int ___argc, char *const *___argv, const char 
*__shortopts)
14362
      |            ^~~~~~
14363
In file included from 
/home/runner/work/freebsd-src/freebsd-src/tools/build/cross-build/include/linux/unistd.h:52,
14364
                 from 
/home/runner/work/freebsd-src/freebsd-src/tools/build/cross-build/include/common/unistd.h:39,
14365
                 from 
/home/runner/work/freebsd-src/freebsd-src/usr.sbin/config/main.cc:61:
14366
/home/runner/work/freebsd-src/build/home/runner/work/freebsd-src/freebsd-src/amd64.amd64/tmp/legacy/usr/include/getopt.h:69:6:
 note: from previous declaration ‘int getopt(int, char* const*, const char*)’
14367
   69 | int  getopt(int, char * const [], const char *);
14368
      |      ^~~~~~

(FWIW, one odd thing here that I can't figure out yet is that it appears that
our local getopt.h was #included prior to the unistd.h wrapper which I think
is probably the root issue, may just need to wrap some other header?)

--
John Baldwin


Reply via email to