Re: git: 320e7e0003db - main - Revert "Fix cross-build support for Ubuntu 16.04"
Date: Tue, 07 Mar 2023 23:13:28 UTC
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… 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>