Re: git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04"

From: Warner Losh <imp_at_bsdimp.com>
Date: Tue, 07 Mar 2023 23:49:18 UTC
On Tue, Mar 7, 2023 at 4:13 PM Jessica Clarke <jrtc27@freebsd.org> wrote:

> On 7 Mar 2023, at 23:11, Warner Losh <imp@FreeBSD.org> wrote:
> >
> > The branch main has been updated by imp:
> >
> > URL:
> https://cgit.FreeBSD.org/src/commit/?id=320e7e0003dbc14ed3fc01b95532924cd3fbda7b
> >
> > commit 320e7e0003dbc14ed3fc01b95532924cd3fbda7b
> > Author:     Jose Luis Duran <jlduran@gmail.com>
> > AuthorDate: 2023-03-02 15:31:31 +0000
> > Commit:     Warner Losh <imp@FreeBSD.org>
> > CommitDate: 2023-03-07 23:11:11 +0000
> >
> >    Revert "Fix cross-build support for Ubuntu 16.04"
> >
> >    This reverts commit d6327ae8c11b73765f100981baca49166b558b70.
> >
> >    Before version 2.25, glibc's unistd.h would define the POSIX subset of
> >    getopt.h by defining __need_getopt, including getopt.h (which would
> >    disable the header guard) and then undefining it so later including
> >    getopt.h explicitly would define the extensions. However, we wrap
> >    getopt, and so the wrapper's #pragma once breaks that. Thus getopt.h
> was
> >    included before the real unistd.h to ensure we get all the extensions.
> >
> >    However, with clang 12 that causes problems where we get a function
> >    mismatch (since getopt can throw exceptions). If we include it after
> >    unistd.h, it will get the full definitions since glibc no longer does
> >    the subsetting thing. This will result in matching definitions and fix
> >    clang 12.
>
> This is the bit I still don’t understand and hoped the author would
> explain…
>

I'll look into it a bit more.

Warner


> Jess
>
> >    Reviewed by: imp, jrtc27 (OK'd on irc)
> >    Pull Request: https://github.com/freebsd/freebsd-src/pull/668
> > ---
> > tools/build/cross-build/include/linux/unistd.h | 10 +---------
> > 1 file changed, 1 insertion(+), 9 deletions(-)
> >
> > diff --git a/tools/build/cross-build/include/linux/unistd.h
> b/tools/build/cross-build/include/linux/unistd.h
> > index f518df2ac9ae..cd0b28ba39ed 100644
> > --- a/tools/build/cross-build/include/linux/unistd.h
> > +++ b/tools/build/cross-build/include/linux/unistd.h
> > @@ -41,17 +41,9 @@
> > /* Ensure that unistd.h pulls in getopt */
> > #define __USE_POSIX2
> > #endif
> > -/*
> > - * Before version 2.25, glibc's unistd.h would define the POSIX subset
> of
> > - * getopt.h by defining __need_getopt,  including getopt.h (which would
> > - * disable the header guard) and then undefining it so later including
> > - * getopt.h explicitly would define the extensions. However, we wrap
> getopt,
> > - * and so the wrapper's #pragma once breaks that. Thus getopt.h must be
> > - * included before the real unistd.h to ensure we get all the
> extensions.
> > - */
> > -#include <getopt.h>
> > #include_next <unistd.h>
> > #include <fcntl.h>
> > +#include <getopt.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include <sys/syscall.h>
>
>