mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00

The non-standard major(), minor(), and makedev() can be defined as macros. These are usually used together with the Autoconf macro AC_HEADER_MAJOR, which defines the MAJOR_IN_MKDEV if sys/mkdev.h is available, or MAJOR_IN_SYSMACROS if sys/sysmacros.h is available. On Solaris/illumos they are in the sys/mkdev.h header (macro defined to libc implementation) and in sys/sysmacros.h (macro defined with binary operators and bits shifting). On systems with musl and glibc 2.28 or later they are defined in sys/sysmacros.h, in glibc 2.27 and earlier they were in sys/types.h. On BSD-based systems and macOS they are in the sys/types.h. Autoconf 2.70 has fixed the AC_HEADER_MAJOR macro, so it detects the headers properly due to glibc 2.25 throwing deprecation warnings when using the macros from sys/types.h. With Autoconf 2.69 and earlier the ac_cv_header_sys_types_h_makedev cache variable can skip the improper sys/types.h check in the macro. This change syncs the usage within the ext/fileinfo/libmagic bundled library and ext/posix. When sys/mkdev.h header is available, code includes that, otherwise it conditionally includes the sys/sysmacros.h. The ext/posix has additional check whether linker sees the makedev, otherwise it checks if makedev is declared within the given set of headers accoring to the AC_HEADER_MAJOR logic. Previously the AC_CHECK_FUNCS didn't detect it.
55 lines
1.8 KiB
Text
55 lines
1.8 KiB
Text
PHP_ARG_ENABLE([posix],
|
|
[whether to enable POSIX-like functions],
|
|
[AS_HELP_STRING([--disable-posix],
|
|
[Disable POSIX-like functions])],
|
|
[yes])
|
|
|
|
if test "$PHP_POSIX" = "yes"; then
|
|
AC_DEFINE(HAVE_POSIX, 1, [whether to include POSIX-like functions])
|
|
PHP_NEW_EXTENSION(posix, posix.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
|
|
|
AC_CHECK_FUNCS(seteuid setegid setsid getsid getpgid ctermid mkfifo mknod setrlimit getrlimit getgroups initgroups getgrgid_r eaccess)
|
|
|
|
dnl Check for makedev. If it's defined as a macro, AC_CHECK_FUNCS won't work.
|
|
dnl Required headers are included by the AC_HEADER_MAJOR logic.
|
|
AC_CHECK_FUNCS([makedev],,
|
|
[AC_CHECK_DECL([makedev], [AC_DEFINE([HAVE_MAKEDEV], [1])],, [
|
|
#include <sys/types.h>
|
|
#ifdef MAJOR_IN_MKDEV
|
|
# include <sys/mkdev.h>
|
|
#elif defined(MAJOR_IN_SYSMACROS)
|
|
# include <sys/sysmacros.h>
|
|
#endif
|
|
])])
|
|
|
|
dnl Skip pathconf and fpathconf check on musl libc due to limited implementation
|
|
dnl (first argument is not validated and has different error).
|
|
AS_IF([command -v ldd >/dev/null && ldd --version 2>&1 | grep -q "^musl"],[],
|
|
[AC_CHECK_FUNCS(pathconf fpathconf)])
|
|
|
|
AC_MSG_CHECKING([for working ttyname_r() implementation])
|
|
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
#include <unistd.h>
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
char buf[64];
|
|
|
|
return !ttyname_r(0, buf, 64);
|
|
}
|
|
]])],[
|
|
AC_MSG_RESULT([yes])
|
|
AC_DEFINE(HAVE_TTYNAME_R, 1, [Whether you have a working ttyname_r])
|
|
],[
|
|
AC_MSG_RESULT([no, posix_ttyname() will be thread-unsafe])
|
|
], [
|
|
AC_MSG_RESULT([no, cannot detect working ttyname_r() when cross compiling. posix_ttyname() will be thread-unsafe])
|
|
])
|
|
|
|
AC_CHECK_MEMBERS([struct utsname.domainname],,,[
|
|
#ifndef _GNU_SOURCE
|
|
#define _GNU_SOURCE
|
|
#endif
|
|
#include <sys/utsname.h>
|
|
])
|
|
fi
|