opnsense-src/lib/libc/tests/gen/Makefile

110 lines
3 KiB
Makefile
Raw Normal View History

# $FreeBSD$
.include <bsd.own.mk>
ATF_TESTS_C+= arc4random_test
ATF_TESTS_C+= dir2_test
ATF_TESTS_C+= dlopen_empty_test
ATF_TESTS_C+= fmtcheck2_test
ATF_TESTS_C+= fmtmsg_test
ATF_TESTS_C+= fnmatch2_test
ATF_TESTS_C+= fpclassify2_test
ATF_TESTS_C+= ftw_test
ATF_TESTS_C+= getentropy_test
ATF_TESTS_C+= getmntinfo_test
ATF_TESTS_C+= glob2_test
ATF_TESTS_C+= makecontext_test
ATF_TESTS_C+= popen_test
ATF_TESTS_C+= posix_spawn_test
ATF_TESTS_C+= realpath2_test
ATF_TESTS_C+= sigsetops_test
ATF_TESTS_C+= wordexp_test
# TODO: t_closefrom, t_cpuset, t_fmtcheck, t_randomid,
# TODO: t_siginfo (fixes require further inspection)
# TODO: t_sethostname_test (consistently screws up the hostname)
execvp: fix up the ENOEXEC fallback If execve fails with ENOEXEC, execvp is expected to rebuild the command with /bin/sh instead and try again. The previous version did this, but overlooked two details: argv[0] can conceivably be NULL, in which case memp would never get terminated. We must allocate no less than three * sizeof(char *) so we can properly terminate at all times. For the non-NULL argv standard case, we count all the non-NULL elements and actually skip the first argument, so we end up capturing the NULL terminator in our bcopy(). The second detail is that the spec is actually worded such that we should have been preserving argv[0] as passed to execvp: "[...] executed command shall be as if the process invoked the sh utility using execl() as follows: execl(<shell path>, arg0, file, arg1, ..., (char *)0); where <shell path> is an unspecified pathname for the sh utility, file is the process image file, and for execvp(), where arg0, arg1, and so on correspond to the values passed to execvp() in argv[0], argv[1], and so on." So we make this change at this time as well, while we're already touching it. We decidedly can't preserve a NULL argv[0] as this would be incredibly, incredibly fragile, so we retain our legacy behavior of using "sh" for argv[] in this specific instance. Some light tests are added to try and detect some components of handling the ENOEXEC fallback; posix_spawnp_enoexec_fallback_null_argv0 is likely not 100% reliable, but it at least won't raise false-alarms and it did result in useful failures with pre-change libc on my machine. This is a secondary change in D25038. Reported by: Andrew Gierth <andrew_tao173.riddles.org.uk> Reviewed by: jilles, kib, Andrew Gierth MFC after: 1 week
2020-06-09 21:30:37 -04:00
FILESGROUPS+= posix_spawn_test_FILES
posix_spawn_test_FILES= spawnp_enoexec.sh
posix_spawn_test_FILESDIR= ${TESTSDIR}
posix_spawn_test_FILESMODE= 0755
posix_spawn_test_FILESOWN= root
posix_spawn_test_FILESGRP= wheel
posix_spawn_test_FILESPACKAGE= ${PACKAGE}
CFLAGS+= -DTEST_LONG_DOUBLE
# Define __HAVE_LONG_DOUBLE for architectures whose long double has greater
# precision than their double.
.if ${MACHINE_CPUARCH} == "aarch64" || \
${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386" || \
${MACHINE_CPUARCH} == "riscv"
CFLAGS+= -D__HAVE_LONG_DOUBLE
.endif
NETBSD_ATF_TESTS_C= alarm_test
NETBSD_ATF_TESTS_C+= assert_test
NETBSD_ATF_TESTS_C+= basedirname_test
NETBSD_ATF_TESTS_C+= dir_test
NETBSD_ATF_TESTS_C+= floatunditf_test
NETBSD_ATF_TESTS_C+= fnmatch_test
NETBSD_ATF_TESTS_C+= fpclassify_test
NETBSD_ATF_TESTS_C+= fpsetmask_test
NETBSD_ATF_TESTS_C+= fpsetround_test
NETBSD_ATF_TESTS_C+= ftok_test
NETBSD_ATF_TESTS_C+= getcwd_test
NETBSD_ATF_TESTS_C+= getgrent_test
NETBSD_ATF_TESTS_C+= glob_test
NETBSD_ATF_TESTS_C+= humanize_number_test
NETBSD_ATF_TESTS_C+= isnan_test
NETBSD_ATF_TESTS_C+= nice_test
NETBSD_ATF_TESTS_C+= pause_test
NETBSD_ATF_TESTS_C+= raise_test
NETBSD_ATF_TESTS_C+= realpath_test
NETBSD_ATF_TESTS_C+= setdomainname_test
NETBSD_ATF_TESTS_C+= sethostname_test
NETBSD_ATF_TESTS_C+= sleep_test
NETBSD_ATF_TESTS_C+= syslog_test
NETBSD_ATF_TESTS_C+= time_test
NETBSD_ATF_TESTS_C+= ttyname_test
NETBSD_ATF_TESTS_C+= vis_test
.include "../Makefile.netbsd-tests"
CFLAGS.getentropy_test+= -I${SRCTOP}/include
LIBADD.getentropy_test+= c
LIBADD.humanize_number_test+= util
LIBADD.fpclassify_test+=m
LIBADD.fpsetround_test+=m
LIBADD.siginfo_test+= m
LIBADD.nice_test+= pthread
LIBADD.syslog_test+= pthread
CFLAGS+= -I${.CURDIR}
SRCS.fmtcheck2_test= fmtcheck_test.c
SRCS.fnmatch2_test= fnmatch_test.c
TEST_METADATA.setdomainname_test+= is_exclusive=true
TESTS_SUBDIRS= execve
TESTS_SUBDIRS+= posix_spawn
# The old testcase name
TEST_FNMATCH= test-fnmatch
CLEANFILES+= ${GEN_SH_CASE_TESTCASES}
sh-tests: .PHONY
.for target in clean obj depend all
@cd ${.CURDIR} && ${MAKE} PROG=${TEST_FNMATCH} \
-DNO_SUBDIR ${target}
.endfor
@cd ${.OBJDIR} && ./${TEST_FNMATCH} -s 1 > \
${SRCTOP}/bin/sh/tests/builtins/case2.0
@cd ${.OBJDIR} && ./${TEST_FNMATCH} -s 2 > \
${SRCTOP}/bin/sh/tests/builtins/case3.0
.include <bsd.test.mk>