This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
POSIX: revert exported functions to 5.20.2 state
authorAristotle Pagaltzis <pagaltzis@gmx.de>
Thu, 7 May 2015 14:59:36 +0000 (16:59 +0200)
committerRicardo Signes <rjbs@cpan.org>
Fri, 8 May 2015 23:57:58 +0000 (19:57 -0400)
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.

ext/POSIX/lib/POSIX.pm
ext/POSIX/t/export.t
ext/POSIX/t/math.t

index 2a78f19..0b5e726 100644 (file)
@@ -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;
index 07f5654..91593e0 100644 (file)
@@ -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);
index 20870e6..7e70753 100644 (file)
@@ -2,7 +2,7 @@
 
 use strict;
 
-use POSIX;
+use POSIX ':math_h_c99';
 use Test::More;
 
 use Config;