Saturday 7th April 2012
Fedora Project
Updated perl-Digest-MD5-File to 0.08 in F-15, F-16, F-17, Rawhide, EPEL-5 and EPEL-6:
CPAN RT#39898: Inconsistent results from adddir
CPAN RT#44106: Typos in documentation
CPAN RT#76174: Handle file names with trailing spaces
Updated perl-IO-AIO to 4.14 in F-17 and Rawhide:
Fix stat structure usage on windows, which caused bogus stat results
(libeio) make readahead emulation behave more like actual readahead by never failing
New request aio_seek
New request aio_fiemap
Auto-generate the #ifdef/#define 0 blocks for symbols we export
Updated perl-IO-Socket-SSL to 1.64 in Rawhide:
Ignore die from within eval to make tests more stable on Win32 (CPAN RT#76147)
- Clarify some behaviour regarding hostname verification
Local Packages
Updated perl-IO-AIO to 4.14 as per the Fedora version; this went without problems except on EL-5, where it failed to compile:
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION=\"4.14\" -DXS_VERSION=\"4.14\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" AIO.c In file included from AIO.xs:9: schmorp.h: In function 's_epipe_signal': schmorp.h:450: warning: ignoring return value of 'write', declared with attribute warn_unused_result schmorp.h: In function 's_epipe_drain': schmorp.h:463: warning: ignoring return value of 'read', declared with attribute warn_unused_result In file included from AIO.xs:27: /usr/include/linux/fiemap.h: At top level: /usr/include/linux/fiemap.h:15: error: expected specifier-qualifier-list before '__u64' /usr/include/linux/fiemap.h:26: error: expected specifier-qualifier-list before '__u64'
The problem there was that EL-5's <linux/fiemap.h> header file uses the __u64 type without pulling in <linux/types.h> to define it, so I tweaked the configure script to check for <linux/types.h> and used it:
diff -up IO-AIO-4.14/AIO.xs.orig IO-AIO-4.14/AIO.xs --- IO-AIO-4.14/AIO.xs.orig 2012-04-07 01:49:49.000000000 +0100 +++ IO-AIO-4.14/AIO.xs 2012-04-07 21:17:08.055812147 +0100 @@ -22,6 +22,7 @@ #endif #if __linux__ +# include <linux/types.h> # include <linux/fs.h> # ifdef FS_IOC_FIEMAP # include <linux/fiemap.h> diff -up IO-AIO-4.14/configure.ac.orig IO-AIO-4.14/configure.ac --- IO-AIO-4.14/configure.ac.orig 2012-04-06 10:57:56.000000000 +0100 +++ IO-AIO-4.14/configure.ac 2012-04-07 21:17:08.066812142 +0100 @@ -5,7 +5,12 @@ AC_CONFIG_HEADERS([libeio/config.h]) AC_PROG_CC -AC_CHECK_HEADERS([linux/fs.h linux/fiemap.h]) +AC_CHECK_HEADERS([linux/fs.h linux/types.h]) +AC_CHECK_HEADERS([linux/fiemap.h], [], [], +[#ifdef HAVE_LINUX_TYPES_H +#include <linux/types.h> +#endif +]) m4_include([libeio/libeio.m4])
- I sent that fix upstream and it (or something like it) will be included in subsequent releases.
- However, it still didn't build:
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION=\"4.14\" -DXS_VERSION=\"4.14\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" AIO.c In file included from AIO.xs:9: schmorp.h: In function 's_epipe_signal': schmorp.h:450: warning: ignoring return value of 'write', declared with attribute warn_unused_result schmorp.h: In function 's_epipe_drain': schmorp.h:463: warning: ignoring return value of 'read', declared with attribute warn_unused_result In file included from AIO.xs:127: libeio/eio.c: In function 'etp_start_thread': libeio/eio.c:577: warning: left-hand operand of comma expression has no effect In file included from AIO.xs:127: libeio/eio.c:1078:19: error: #if with no expression
- This one was somewhat more difficult to track down. The line with the error was:
#if HAVE_FALLOCATE
Looking though the code, it was clear that the HAVE_FALLOCATE macro was either defined to 1 or left undefined, neither of which should have caused the error; this bit of code had also not changed from the previous version, which did compile OK. It turned out that this file now #includes <linux/fs.h>, and in RHEL-5, that includes these lines of code:
/* public flags for file_system_type */ #define FS_REQUIRES_DEV 1 #define FS_BINARY_MOUNTDATA 2 #define HAVE_FALLOCATE #define FS_HAS_FALLOCATE 4 /* Safe to check for ->fallocate */ #define FS_HAS_FIEMAP 8 /* Safe to check for ->fiemap */ #define FS_HAS_FREEZE 16 /* Safe to check for ->freeze_fs etc */ #define FS_HAS_TRYTOFREE 32 /* Safe to check for ->bdev_try_to_free... */ #define FS_HAS_GETRESV 64 /* Safe to check for ->get_reserved_space */ #define FS_HAS_IODONE2 128 /* dio->io_done is type dio_iodone2_t */ #define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */ #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() * during rename() internally. */
So there was the empty definition of HAVE_FALLOCATE that was causing the problem, and I wasn't the first person to come across this issue. I patched the IO::AIO code to use the symbol HAVE_LINUX_FALLOCATE instead of HAVE_FALLOCATE and that fixed the problem:
diff -up IO-AIO-4.14/libeio/eio.c.orig IO-AIO-4.14/libeio/eio.c --- IO-AIO-4.14/libeio/eio.c.orig 2012-04-02 18:53:19.000000000 +0100 +++ IO-AIO-4.14/libeio/eio.c 2012-04-07 21:17:08.076812137 +0100 @@ -1075,7 +1075,7 @@ eio__sync_file_range (int fd, off_t offs static int eio__fallocate (int fd, int mode, off_t offset, size_t len) { -#if HAVE_FALLOCATE +#if HAVE_LINUX_FALLOCATE return fallocate (fd, mode, offset, len); #else errno = ENOSYS; diff -up IO-AIO-4.14/libeio/libeio.m4.orig IO-AIO-4.14/libeio/libeio.m4 --- IO-AIO-4.14/libeio/libeio.m4.orig 2011-07-24 06:46:26.000000000 +0100 +++ IO-AIO-4.14/libeio/libeio.m4 2012-04-07 21:17:54.640785066 +0100 @@ -136,7 +136,7 @@ int main (void) return 0; } ],ac_cv_fallocate=yes,ac_cv_fallocate=no)]) -test $ac_cv_fallocate = yes && AC_DEFINE(HAVE_FALLOCATE, 1, fallocate(2) is available) +test $ac_cv_fallocate = yes && AC_DEFINE(HAVE_LINUX_FALLOCATE, 1, fallocate(2) is available) AC_CACHE_CHECK(for sys_syncfs, ac_cv_sys_syncfs, [AC_LINK_IFELSE([ #include <unistd.h>
- I sent that fix upstream too but Marc insists that that's a Red Hat bug that needs fixing; I can try raising a bug on that but I don't hold out much hope of it getting fixed, and certainly not any time soon, so it seems I'll be carrying this patch for a while.
Updated perl-IO-Socket-SSL to 1.64 as per the Fedora version
Rebuilt sendmail for libdb 5.3 in Rawhide