Fix cross-build support for Ubuntu 16.04

Older glibc headers did some very nasty things that have since been
sanitised. We could also fix this by adding a linux/getopt.h wrapper
alongside the existing common/getopt.h that #undef's __need_getopt, but
that seems a little more hacky and complicated.

Reviewed by:	arichardson
This commit is contained in:
Jessica Clarke 2021-01-23 20:59:15 +00:00
parent 0d528e6354
commit d6327ae8c1

View File

@ -41,9 +41,17 @@
/* 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>