8f0dd9478e
Future releases of GCC are planning to remove[0] default support for some old features that were removed from C99 but GCC still accepts. We can test for these changes by using the following -Werror= directives -Werror=implicit-int -Werror=implicit-function-declaration -Werror=int-conversion -Werror=strict-prototypes -Werror=old-style-definition Doing so revealed an issue with the auto/ tests in that the test programs always define main as int main() rather than int main(void) which results in a bunch of errors like build/autotest.c:3:23: error: function declaration isn't a prototype [-Werror=strict-prototypes] 3 | int main() { | ^~~~ build/autotest.c: In function 'main': build/autotest.c:3:23: error: old-style function definition [-Werror=old-style-definition] The fix was easy, it only required fixing the main prototype with find -type f -exec sed -i 's/int main() {/int main(void) {/g' {} \; Regardless of these upcoming GCC changes, this is probably a good thing to do anyway for correctness. [0]: https://fedoraproject.org/wiki/Changes/PortingToModernC Link: <https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/CJXKTLXJUPZ4F2C2VQOTNMEA5JAUPMBD/> Link: <https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/6SGHPHPAXKCVJ6PUZ57WVDQ5TDBVIRMF/> Reviewed-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
211 lines
5.1 KiB
Text
211 lines
5.1 KiB
Text
|
|
# Copyright (C) Igor Sysoev
|
|
# Copyright (C) NGINX, Inc.
|
|
|
|
|
|
# Linux 3.17 with glibc 2.25, FreeBSD 12, Solaris 11.3.
|
|
|
|
nxt_feature="getrandom()"
|
|
nxt_feature_name=NXT_HAVE_GETRANDOM
|
|
nxt_feature_run=yes
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#include <unistd.h>
|
|
#include <sys/random.h>
|
|
|
|
int main(void) {
|
|
char buf[4];
|
|
|
|
if (getrandom(buf, 4, 0) < 0) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
|
|
|
|
if [ $nxt_found = no ]; then
|
|
|
|
# Linux 3.17 SYS_getrandom.
|
|
|
|
nxt_feature="SYS_getrandom in Linux"
|
|
nxt_feature_name=NXT_HAVE_LINUX_SYS_GETRANDOM
|
|
nxt_feature_test="#include <unistd.h>
|
|
#include <sys/syscall.h>
|
|
#include <linux/random.h>
|
|
|
|
int main(void) {
|
|
char buf[4];
|
|
|
|
if (syscall(SYS_getrandom, buf, 4, 0) < 0) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
fi
|
|
|
|
|
|
if [ $nxt_found = no ]; then
|
|
|
|
# OpenBSD 5.6 lacks <sys/random.h>.
|
|
|
|
nxt_feature="getentropy()"
|
|
nxt_feature_name=NXT_HAVE_GETENTROPY
|
|
nxt_feature_test="#include <unistd.h>
|
|
|
|
int main(void) {
|
|
char buf[4];
|
|
|
|
if (getentropy(buf, 4) == -1) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
fi
|
|
|
|
|
|
if [ $nxt_found = no ]; then
|
|
|
|
# macOS 10.12.
|
|
|
|
nxt_feature="getentropy() in sys/random.h"
|
|
nxt_feature_name=NXT_HAVE_GETENTROPY_SYS_RANDOM
|
|
nxt_feature_test="#include <unistd.h>
|
|
#include <sys/random.h>
|
|
|
|
int main(void) {
|
|
char buf[4];
|
|
|
|
if (getentropy(buf, 4) == -1) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
fi
|
|
|
|
|
|
nxt_feature="ucontext"
|
|
nxt_feature_name=NXT_HAVE_UCONTEXT
|
|
nxt_feature_run=
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#include <stdlib.h>
|
|
#include <ucontext.h>
|
|
|
|
int main(void) {
|
|
ucontext_t uc;
|
|
|
|
if (getcontext(&uc) == 0) {
|
|
makecontext(&uc, NULL, 0);
|
|
setcontext(&uc);
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
|
|
|
|
if [ $nxt_found = no ]; then
|
|
|
|
# MacOSX 10.6 (Snow Leopard) has deprecated ucontext
|
|
# and requires _XOPEN_SOURCE to be defined.
|
|
|
|
nxt_feature="_XOPEN_SOURCE ucontext"
|
|
nxt_feature_name=NXT_HAVE_UCONTEXT
|
|
nxt_feature_run=
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#define _XOPEN_SOURCE
|
|
#include <stdlib.h>
|
|
#include <ucontext.h>
|
|
|
|
int main(void) {
|
|
ucontext_t uc;
|
|
|
|
if (getcontext(&uc) == 0) {
|
|
makecontext(&uc, NULL, 0);
|
|
setcontext(&uc);
|
|
}
|
|
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
fi
|
|
|
|
|
|
# FreeBSD dlopen() is in libc.
|
|
# MacOSX libdl.dylib is a symlink to libSystem.dylib.
|
|
# GCC5 AddressSanitizer intercepts dlopen() and dlclose() but not dlsym()
|
|
# so all dynamic linker functions should be tested.
|
|
|
|
NXT_LIBDL=
|
|
|
|
nxt_feature="dlopen()"
|
|
nxt_feature_name=NXT_HAVE_DLOPEN
|
|
nxt_feature_run=
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#include <stdlib.h>
|
|
#include <dlfcn.h>
|
|
|
|
int main(void) {
|
|
void *h = dlopen(NULL, RTLD_NOW | RTLD_GLOBAL);
|
|
dlsym(h, \"\");
|
|
dlclose(h);
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
|
|
if [ $nxt_found = no ]; then
|
|
|
|
# Linux and Solaris prior to 10 require libdl.
|
|
# Solaris 10 libdl.so.1 is a filter to /usr/lib/ld.so.1.
|
|
|
|
nxt_feature="dlopen() in libdl"
|
|
nxt_feature_libs="-ldl"
|
|
. auto/feature
|
|
|
|
if [ $nxt_found = yes ]; then
|
|
NXT_LIBDL="-ldl"
|
|
fi
|
|
fi
|
|
|
|
|
|
# NetBSD 1.0, OpenBSD 1.0, FreeBSD 2.2 setproctitle().
|
|
|
|
nxt_feature="setproctitle()"
|
|
nxt_feature_name=NXT_HAVE_SETPROCTITLE
|
|
nxt_feature_run=
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#include <stdlib.h>
|
|
#include <unistd.h>
|
|
|
|
int main(void) {
|
|
setproctitle(\"%s\", \"title\");
|
|
return 0;
|
|
}"
|
|
. auto/feature
|
|
|
|
|
|
# Linux, FreeBSD, Solaris getgrouplist()
|
|
nxt_feature="getgrouplist()"
|
|
nxt_feature_name=NXT_HAVE_GETGROUPLIST
|
|
nxt_feature_run=
|
|
nxt_feature_incs=
|
|
nxt_feature_libs=
|
|
nxt_feature_test="#include <unistd.h>
|
|
#include <grp.h>
|
|
|
|
int main(void) {
|
|
getgrouplist(\"root\", 0, NULL, NULL);
|
|
return 0;
|
|
}"
|
|
. auto/feature
|