summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAristotle Pagaltzis <pagaltzis@gmx.de>2015-05-07 16:59:36 +0200
committerRicardo Signes <rjbs@cpan.org>2015-05-08 19:57:58 -0400
commit7658eeca18ada6eb35464b1f6fd79d7b436baeb8 (patch)
treeec183de1862939a7d96d334a2aee7353e6a3a1f9 /ext
parent2b7f2baac00a53ef29d394eeca496855f8a34e79 (diff)
downloadperl-7658eeca18ada6eb35464b1f6fd79d7b436baeb8.tar.gz
POSIX: revert exported functions to 5.20.2 state
This patch does 3 things. For the purposes of bisectability it is unfortunately not feasible to split them up into separate patches. They are as follows: 1. Revert the list of default exports in t/export.t to what it was in the commit tagged v5.20.2, but take the opportunity to retab it since the blame log is messed up anyway. (This can be verified with a whitespace-ignoring diff.) Then add the new exports in new, separate sections. 2. In POSIX.pm, remove the new fenv_h tag from default exports and revert the math_h and stdlib_h tags to their state in Perl 5.20.2. 3. Add infrastructure for adding export tags that will not automatically get added into @EXPORT when it is generated, and use this to add new tags for the stuff added since 5.20.2. Since tags named after math_h and stdlib_h already exist, duplicate them as stdlib_h_c99/math_h_c99 with their new additions included.
Diffstat (limited to 'ext')
-rw-r--r--ext/POSIX/lib/POSIX.pm53
-rw-r--r--ext/POSIX/t/export.t243
-rw-r--r--ext/POSIX/t/math.t2
3 files changed, 155 insertions, 143 deletions
diff --git a/ext/POSIX/lib/POSIX.pm b/ext/POSIX/lib/POSIX.pm
index 2a78f19d60..0b5e726bfa 100644
--- a/ext/POSIX/lib/POSIX.pm
+++ b/ext/POSIX/lib/POSIX.pm
@@ -234,7 +234,7 @@ sub sprintf {
}
sub load_imports {
-our %EXPORT_TAGS = (
+my %default_export_tags = (
assert_h => [qw(assert NDEBUG)],
@@ -268,9 +268,6 @@ our %EXPORT_TAGS = (
S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID
S_IWGRP S_IWOTH S_IWUSR)],
- fenv_h => [qw(FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD
- fegetround fesetround)],
-
float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG
DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP
@@ -299,19 +296,13 @@ our %EXPORT_TAGS = (
LC_MONETARY LC_NUMERIC LC_TIME NULL
localeconv setlocale)],
- math_h => [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
- FP_SUBNORMAL FP_ZERO HUGE_VAL INFINITY Inf M_1_PI
- M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E M_PI
- M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2 NAN NaN acos acosh
- asin asinh atan atanh cbrt ceil copysign cosh erf
- erfc exp2 expm1 fabs fdim floor fma fmax fmin fmod
- fpclassify frexp hypot ilogb isfinite isgreater
- isgreaterequal isinf isless islessequal
- islessgreater isnan isnormal isunordered j0 j1 jn
- ldexp lgamma log10 log1p log2 logb lrint modf nan
- nearbyint nextafter nexttoward pow remainder remquo
- rint round scalbn signbit sinh tan tanh tgamma trunc
- y0 y1 yn)],
+ math_h => [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
+ FP_SUBNORMAL FP_ZERO
+ M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E
+ M_PI M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2
+ HUGE_VAL INFINITY NAN
+ acos asin atan ceil cosh fabs floor fmod
+ frexp ldexp log10 modf pow sinh tan tanh)],
pwd_h => [],
@@ -343,7 +334,7 @@ our %EXPORT_TAGS = (
stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX
abort atexit atof atoi atol bsearch calloc div
free getenv labs ldiv malloc mblen mbstowcs mbtowc
- qsort realloc strtod strtol strtold strtoul wcstombs wctomb)],
+ qsort realloc strtod strtol strtoul wcstombs wctomb)],
string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat
strchr strcmp strcoll strcpy strcspn strerror strlen
@@ -398,18 +389,36 @@ our %EXPORT_TAGS = (
utime_h => [],
);
-# Exporter::export_tags();
+my %other_export_tags = (
+ fenv_h => [qw(
+ FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD fegetround fesetround
+ )],
+
+ math_h_c99 => [ @{$default_export_tags{math_h}}, qw(
+ Inf NaN acosh asinh atanh cbrt copysign erf erfc exp2 expm1 fdim fma
+ fmax fmin fpclassify hypot ilogb isfinite isgreater isgreaterequal
+ isinf isless islessequal islessgreater isnan isnormal isunordered j0 j1
+ jn lgamma log1p log2 logb lrint nan nearbyint nextafter nexttoward
+ remainder remquo rint round scalbn signbit tgamma trunc y0 y1 yn
+ )],
+
+ stdlib_h_c99 => [ @{$default_export_tags{stdlib_h}}, 'strtold' ],
+);
+
{
# De-duplicate the export list:
- my %export;
- @export{map {@$_} values %EXPORT_TAGS} = ();
+ my ( %export, %export_ok );
+ @export {map {@$_} values %default_export_tags} = ();
+ @export_ok{map {@$_} values %other_export_tags} = ();
# Doing the de-dup with a temporary hash has the advantage that the SVs in
# @EXPORT are actually shared hash key scalars, which will save some memory.
our @EXPORT = keys %export;
our @EXPORT_OK = (qw(close lchown nice open pipe read sleep times write
printf sprintf),
- grep {!exists $export{$_}} keys %reimpl, keys %replacement);
+ grep {!exists $export{$_}} keys %reimpl, keys %replacement, keys %export_ok);
+
+ our %EXPORT_TAGS = ( %default_export_tags, %other_export_tags );
}
require Exporter;
diff --git a/ext/POSIX/t/export.t b/ext/POSIX/t/export.t
index 07f5654bab..91593e0152 100644
--- a/ext/POSIX/t/export.t
+++ b/ext/POSIX/t/export.t
@@ -16,126 +16,129 @@ POSIX->import();
# N.B. the data must be sorted at runtime even though it appears sorted here
# because it is given in ASCII order and we might be on a non-ASCII platform
my %expect = (
- EXPORT => [sort qw(
- %SIGRT ARG_MAX B0 B110 B1200 B134 B150 B1800 B19200 B200
- B2400 B300 B38400 B4800 B50 B600 B75 B9600 BRKINT BUFSIZ
- CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX CLK_TCK CLOCAL
- CLOCKS_PER_SEC CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB DBL_DIG
- DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
- DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP E2BIG EACCES EADDRINUSE
- EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBADMSG EBUSY
- ECANCELED ECHILD ECHO ECHOE ECHOK ECHONL ECONNABORTED
- ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
- EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ
- EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE
- EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
- ENFILE ENOBUFS ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK
- ENOMEM ENOMSG ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK
- ENOTCONN ENOTDIR ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP
- ENOTTY ENXIO EOF EOPNOTSUPP EOTHER EOVERFLOW EOWNERDEAD EPERM
- EPFNOSUPPORT EPIPE EPROCLIM EPROTO EPROTONOSUPPORT EPROTOTYPE
- ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE
- ESRCH ESTALE ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS
- EWOULDBLOCK EXDEV
- EXIT_FAILURE EXIT_SUCCESS FD_CLOEXEC
- FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD
- FILENAME_MAX FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX
- FLT_MAX_10_EXP FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP
- FLT_MIN_EXP FLT_RADIX FLT_ROUNDS FP_ILOGB0
- FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL
- FP_SUBNORMAL FP_ZERO F_DUPFD F_GETFD F_GETFL F_GETLK
- F_OK F_RDLCK F_SETFD F_SETFL F_SETLK F_SETLKW
- F_UNLCK F_WRLCK HUGE_VAL HUPCL ICANON ICRNL IEXTEN
- IGNBRK IGNCR IGNPAR INFINITY INLCR INPCK INT_MAX
- INT_MIN ISIG ISTRIP IXOFF IXON Inf LC_ALL LC_COLLATE
- LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME
- LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX
- LDBL_MAX_10_EXP LDBL_MAX_EXP LDBL_MIN
- LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX LONG_MAX
- LONG_MIN L_ctermid L_cuserid L_tmpname MAX_CANON
- MAX_INPUT MB_CUR_MAX MB_LEN_MAX M_1_PI M_2_PI M_2_SQRTPI
- M_E M_LN10 M_LN2 M_LOG10E M_LOG2E M_PI M_PI_2 M_PI_4
- M_SQRT1_2 M_SQRT2 NAME_MAX NAN NCCS NDEBUG
- NGROUPS_MAX NOFLSH NULL NaN OPEN_MAX OPOST O_ACCMODE
- O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY
- O_RDWR O_TRUNC O_WRONLY PARENB PARMRK PARODD
- PATH_MAX PIPE_BUF RAND_MAX R_OK SA_NOCLDSTOP
- SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND
- SA_RESTART SA_SIGINFO SCHAR_MAX SCHAR_MIN SEEK_CUR
- SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM
- SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT
- SIGKILL SIGPIPE SIGPOLL SIGPROF SIGQUIT SIGRTMAX
- SIGRTMIN SIGSEGV SIGSTOP SIGSYS SIGTERM SIGTRAP
- SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 SIGUSR2
- SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_DFL SIG_ERR
- SIG_IGN SIG_SETMASK SIG_UNBLOCK SSIZE_MAX
- STDERR_FILENO STDIN_FILENO STDOUT_FILENO STREAM_MAX
- S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU
- S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG
- S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH
- S_IXUSR TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH
- TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW TMP_MAX
- TOSTOP TZNAME_MAX UCHAR_MAX UINT_MAX ULONG_MAX
- USHRT_MAX VEOF VEOL VERASE VINTR VKILL VMIN VQUIT
- VSTART VSTOP VSUSP VTIME WEXITSTATUS WIFEXITED
- WIFSIGNALED WIFSTOPPED WNOHANG WSTOPSIG WTERMSIG
- WUNTRACED W_OK X_OK _PC_CHOWN_RESTRICTED
- _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT
- _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF
- _PC_VDISABLE _POSIX_ARG_MAX _POSIX_CHILD_MAX
- _POSIX_CHOWN_RESTRICTED _POSIX_JOB_CONTROL
- _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT
- _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_NO_TRUNC
- _POSIX_OPEN_MAX _POSIX_PATH_MAX _POSIX_PIPE_BUF
- _POSIX_SAVED_IDS _POSIX_SSIZE_MAX _POSIX_STREAM_MAX
- _POSIX_TZNAME_MAX _POSIX_VDISABLE _POSIX_VERSION
- _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK
- _SC_JOB_CONTROL _SC_NGROUPS_MAX _SC_OPEN_MAX
- _SC_PAGESIZE _SC_SAVED_IDS _SC_STREAM_MAX
- _SC_TZNAME_MAX _SC_VERSION _exit abort access acos
- acosh asctime asin asinh assert atan atanh atexit
- atof atoi atol bsearch calloc cbrt ceil cfgetispeed
- cfgetospeed cfsetispeed cfsetospeed clearerr clock
- copysign cosh creat ctermid ctime cuserid difftime
- div dup dup2 erf erfc errno execl execle execlp
- execv execve execvp exp2 expm1 fabs fclose fdim
- fdopen fegetround feof ferror fesetround fflush
- fgetc fgetpos fgets floor fma fmax fmin fmod fopen
- fpathconf fpclassify fprintf fputc fputs fread free
- freopen frexp fscanf fseek fsetpos fstat fsync ftell
- fwrite getchar getcwd getegid getenv geteuid getgid getgroups
- getpid gets getuid hypot ilogb isalnum isalpha
- isatty iscntrl isdigit isfinite isgraph isgreater
- isgreaterequal isinf isless islessequal
- islessgreater islower isnan isnormal isprint ispunct
- isspace isunordered isupper isxdigit j0 j1 jn labs
- ldexp ldiv lgamma localeconv log10 log1p log2 logb
- longjmp lrint lseek malloc mblen mbstowcs mbtowc
- memchr memcmp memcpy memmove memset mkfifo mktime
- modf nan nearbyint nextafter nexttoward offsetof
- pathconf pause perror pow putc putchar puts qsort
- raise realloc remainder remove remquo rewind rint
- round scalbn scanf setbuf setgid setjmp setlocale
- setpgid setsid setuid setvbuf sigaction siglongjmp
- signal signbit sigpending sigprocmask sigsetjmp
- sigsuspend sinh sscanf stderr stdin stdout strcat
- strchr strcmp strcoll strcpy strcspn strerror
- strftime strlen strncat strncmp strncpy strpbrk
- strrchr strspn strstr strtod strtok strtol strtold
- strtoul strxfrm sysconf tan tanh tcdrain tcflow
- tcflush tcgetattr tcgetpgrp tcsendbreak tcsetattr
- tcsetpgrp tgamma tmpfile tmpnam tolower toupper
- trunc ttyname tzname tzset uname ungetc vfprintf
- vprintf vsprintf wcstombs wctomb y0 y1 yn )],
- EXPORT_OK => [sort qw(
- abs alarm atan2 chdir chmod chown
- close closedir cos exit exp fcntl fileno fork getc
- getgrgid getgrnam getlogin getpgrp getppid getpwnam
- getpwuid gmtime kill lchown link localtime log mkdir
- nice open opendir pipe printf rand read readdir
- rename rewinddir rmdir sin sleep sprintf sqrt srand
- stat system time times umask unlink utime wait
- waitpid write)],
+ EXPORT => [sort
+ # this stuff was in 5.20.2
+ qw(
+ %SIGRT ARG_MAX B0 B110 B1200 B134 B150 B1800 B19200 B200
+ B2400 B300 B38400 B4800 B50 B600 B75 B9600 BRKINT BUFSIZ
+ CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX CLK_TCK CLOCAL
+ CLOCKS_PER_SEC CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB DBL_DIG
+ DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP
+ DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP E2BIG EACCES EADDRINUSE
+ EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBADMSG EBUSY
+ ECANCELED ECHILD ECHO ECHOE ECHOK ECHONL ECONNABORTED
+ ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT
+ EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EIDRM EILSEQ
+ EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE
+ EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH
+ ENFILE ENOBUFS ENODATA ENODEV ENOENT ENOEXEC ENOLCK ENOLINK
+ ENOMEM ENOMSG ENOPROTOOPT ENOSPC ENOSR ENOSTR ENOSYS ENOTBLK
+ ENOTCONN ENOTDIR ENOTEMPTY ENOTRECOVERABLE ENOTSOCK ENOTSUP
+ ENOTTY ENXIO EOF EOPNOTSUPP EOTHER EOVERFLOW EOWNERDEAD EPERM
+ EPFNOSUPPORT EPIPE EPROCLIM EPROTO EPROTONOSUPPORT EPROTOTYPE
+ ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE
+ ESRCH ESTALE ETIME ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS
+ EWOULDBLOCK EXDEV
+ EXIT_FAILURE EXIT_SUCCESS FD_CLOEXEC FILENAME_MAX
+ FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX FLT_MAX_10_EXP
+ FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX
+ FLT_ROUNDS F_DUPFD F_GETFD F_GETFL F_GETLK F_OK F_RDLCK
+ F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK HUGE_VAL
+ HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR INLCR INPCK
+ INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON LC_ALL LC_COLLATE
+ LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LDBL_DIG
+ LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP
+ LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX
+ LONG_MAX LONG_MIN L_ctermid L_cuserid L_tmpname MAX_CANON
+ MAX_INPUT MB_CUR_MAX MB_LEN_MAX NAME_MAX NCCS NDEBUG
+ NGROUPS_MAX NOFLSH NULL OPEN_MAX OPOST O_ACCMODE O_APPEND
+ O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC
+ O_WRONLY PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK
+ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND
+ SA_RESTART SA_SIGINFO SCHAR_MAX SCHAR_MIN SEEK_CUR SEEK_END
+ SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM SIGBUS SIGCHLD
+ SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGPOLL
+ SIGPROF SIGQUIT SIGRTMAX SIGRTMIN SIGSEGV SIGSTOP SIGSYS
+ SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1
+ SIGUSR2 SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_DFL SIG_ERR
+ SIG_IGN SIG_SETMASK SIG_UNBLOCK SSIZE_MAX STDERR_FILENO
+ STDIN_FILENO STDOUT_FILENO STREAM_MAX S_IRGRP S_IROTH S_IRUSR
+ S_IRWXG S_IRWXO S_IRWXU S_ISBLK S_ISCHR S_ISDIR S_ISFIFO
+ S_ISGID S_ISREG S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP
+ S_IXOTH S_IXUSR TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH
+ TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW TMP_MAX TOSTOP
+ TZNAME_MAX UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX VEOF VEOL
+ VERASE VINTR VKILL VMIN VQUIT VSTART VSTOP VSUSP VTIME
+ WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED WNOHANG WSTOPSIG
+ WTERMSIG WUNTRACED W_OK X_OK _PC_CHOWN_RESTRICTED
+ _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT _PC_NAME_MAX
+ _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_VDISABLE
+ _POSIX_ARG_MAX _POSIX_CHILD_MAX _POSIX_CHOWN_RESTRICTED
+ _POSIX_JOB_CONTROL _POSIX_LINK_MAX _POSIX_MAX_CANON
+ _POSIX_MAX_INPUT _POSIX_NAME_MAX _POSIX_NGROUPS_MAX
+ _POSIX_NO_TRUNC _POSIX_OPEN_MAX _POSIX_PATH_MAX
+ _POSIX_PIPE_BUF _POSIX_SAVED_IDS _POSIX_SSIZE_MAX
+ _POSIX_STREAM_MAX _POSIX_TZNAME_MAX _POSIX_VDISABLE
+ _POSIX_VERSION _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK
+ _SC_JOB_CONTROL _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE
+ _SC_SAVED_IDS _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION _exit
+ abort access acos asctime asin assert atan atexit atof atoi
+ atol bsearch calloc ceil cfgetispeed cfgetospeed cfsetispeed
+ cfsetospeed clearerr clock cosh creat ctermid ctime cuserid
+ difftime div dup dup2 errno execl execle execlp execv execve
+ execvp fabs fclose fdopen feof ferror fflush fgetc fgetpos
+ fgets floor fmod fopen fpathconf fprintf fputc fputs fread
+ free freopen frexp fscanf fseek fsetpos fstat fsync ftell
+ fwrite getchar getcwd getegid getenv geteuid getgid getgroups
+ getpid gets getuid isalnum isalpha isatty iscntrl isdigit
+ isgraph islower isprint ispunct isspace isupper isxdigit labs
+ ldexp ldiv localeconv log10 longjmp lseek malloc mblen
+ mbstowcs mbtowc memchr memcmp memcpy memmove memset mkfifo
+ mktime modf offsetof pathconf pause perror pow putc putchar
+ puts qsort raise realloc remove rewind scanf setbuf setgid
+ setjmp setlocale setpgid setsid setuid setvbuf sigaction
+ siglongjmp signal sigpending sigprocmask sigsetjmp sigsuspend
+ sinh sscanf stderr stdin stdout strcat strchr strcmp strcoll
+ strcpy strcspn strerror strftime strlen strncat strncmp
+ strncpy strpbrk strrchr strspn strstr strtod strtok strtol
+ strtoul strxfrm sysconf tan tanh tcdrain tcflow tcflush
+ tcgetattr tcgetpgrp tcsendbreak tcsetattr tcsetpgrp tmpfile
+ tmpnam tolower toupper ttyname tzname tzset uname ungetc
+ vfprintf vprintf vsprintf wcstombs wctomb
+ ),
+ # this stuff was added in 5.21
+ qw(
+ FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL FP_SUBNORMAL FP_ZERO
+ M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E M_PI
+ M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2 INFINITY NAN
+ ),
+ # adding new functions to EXPORT is a BACKWARD COMPATIBILITY BREAKING CHANGE
+ # it is OK to add new constants, but new functions may only go in EXPORT_OK
+ ],
+ EXPORT_OK => [sort
+ # this stuff was in 5.20.2
+ qw(
+ abs alarm atan2 chdir chmod chown close closedir cos exit
+ exp fcntl fileno fork getc getgrgid getgrnam getlogin
+ getpgrp getppid getpwnam getpwuid gmtime kill lchown link
+ localtime log mkdir nice open opendir pipe printf rand
+ read readdir rename rewinddir rmdir sin sleep sprintf sqrt
+ srand stat system time times umask unlink utime wait
+ waitpid write
+ ),
+ # this stuff was added in 5.21
+ qw(
+ FE_DOWNWARD FE_TONEAREST FE_TOWARDZERO FE_UPWARD
+ fegetround fesetround
+ Inf NaN
+ acosh asinh atanh cbrt copysign erf erfc exp2 expm1 fdim
+ fma fmax fmin fpclassify hypot ilogb isfinite isgreater
+ isgreaterequal isinf isless islessequal islessgreater isnan
+ isnormal isunordered j0 j1 jn lgamma log1p log2 logb lrint nan
+ nearbyint nextafter nexttoward remainder remquo rint round scalbn
+ signbit tgamma trunc y0 y1 yn strtold
+ ),
+ ],
);
plan (tests => 2 * keys %expect);
diff --git a/ext/POSIX/t/math.t b/ext/POSIX/t/math.t
index 20870e6942..7e707532d5 100644
--- a/ext/POSIX/t/math.t
+++ b/ext/POSIX/t/math.t
@@ -2,7 +2,7 @@
use strict;
-use POSIX;
+use POSIX ':math_h_c99';
use Test::More;
use Config;