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

From: Jessica Clarke <jrtc27_at_freebsd.org>
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>