Hello community, here is the log from the commit of package hdf5 for openSUSE:Factory checked in at 2014-01-16 15:37:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hdf5 (Old) and /work/SRC/openSUSE:Factory/.hdf5.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hdf5" Changes: -------- --- /work/SRC/openSUSE:Factory/hdf5/hdf5.changes 2013-11-26 21:06:03.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.hdf5.new/hdf5.changes 2014-01-23 15:45:07.000000000 +0100 @@ -1,0 +2,8 @@ +Sun Jan 5 03:59:20 UTC 2014 - [email protected] + +- Detect IBM long double specialness on ppc64le and don't segfault + int the testsuite when checking that type. + Added patches: + * hdf5-ldouble-ppc64le.patch + +------------------------------------------------------------------- New: ---- hdf5-ldouble-ppc64le.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hdf5.spec ++++++ --- /var/tmp/diff_new_pack.T3prQB/_old 2014-01-23 15:45:08.000000000 +0100 +++ /var/tmp/diff_new_pack.T3prQB/_new 2014-01-23 15:45:08.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package hdf5 # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -47,6 +47,7 @@ Patch4: hdf5-1.8.10-tests-arm.patch %endif Patch5: hdf5-configure-long-double.patch +Patch6: hdf5-ldouble-ppc64le.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: gcc-c++ %if 0%{?suse_version} > 1140 @@ -288,6 +289,7 @@ %patch4 -p0 -b .tests-arm %endif %patch5 -p1 +%patch6 -p1 echo "prepare parallel builds: %_mpi" for build_dir in build %_mpi; do ++++++ hdf5-ldouble-ppc64le.patch ++++++ Index: hdf5-1.8.12/configure =================================================================== --- hdf5-1.8.12/configure.orig +++ hdf5-1.8.12/configure @@ -30364,6 +30364,13 @@ else unsigned char s2[8]; int ret = 1; +#if defined __powerpc64__ && defined _LITTLE_ENDIAN + /* Don't bother checking on ppc64le, we know it'll work, and + that what hdf5 calls 'special algorithm' simply is + IBM ldouble 128 (i.e. two seperately scaled doubles). + The check below assumes big endian. */ + ret = 0; +#endif if(sizeof(long double) == 16 && sizeof(long) == 8) { /*make sure the long double type has 16 bytes in size and * 11 bits of exponent. If it is, @@ -30468,6 +30475,13 @@ else unsigned char s[16]; int flag=0, ret=1; +#if defined __powerpc64__ && defined _LITTLE_ENDIAN + /* Don't bother checking on ppc64le, we know it'll work, and + that what hdf5 calls 'special algorithm' simply is + IBM ldouble 128 (i.e. two seperately scaled doubles). + The check below assumes big endian. */ + ret = 0; +#endif /*Determine if long double has 16 byte in size, 11 bit exponent, and *the bias is 0x3ff */ if(sizeof(long double) == 16) { Index: hdf5-1.8.12/configure.ac =================================================================== --- hdf5-1.8.12/configure.ac.orig +++ hdf5-1.8.12/configure.ac @@ -3768,6 +3768,13 @@ else unsigned char s2[8]; int ret = 1; +#if defined __powerpc64__ && defined _LITTLE_ENDIAN + /* Don't bother checking on ppc64le, we know it'll work, and + that what hdf5 calls 'special algorithm' simply is + IBM ldouble 128 (i.e. two seperately scaled doubles). + The check below assumes big endian. */ + ret = 0; +#endif if(sizeof(long double) == 16 && sizeof(long) == 8) { /*make sure the long double type has 16 bytes in size and * 11 bits of exponent. If it is, @@ -3846,6 +3853,13 @@ else unsigned char s[16]; int flag=0, ret=1; +#if defined __powerpc64__ && defined _LITTLE_ENDIAN + /* Don't bother checking on ppc64le, we know it'll work, and + that what hdf5 calls 'special algorithm' simply is + IBM ldouble 128 (i.e. two seperately scaled doubles). + The check below assumes big endian. */ + ret = 0; +#endif /*Determine if long double has 16 byte in size, 11 bit exponent, and *the bias is 0x3ff */ if(sizeof(long double) == 16) { Index: hdf5-1.8.12/test/dt_arith.c =================================================================== --- hdf5-1.8.12/test/dt_arith.c.orig +++ hdf5-1.8.12/test/dt_arith.c @@ -3072,7 +3072,18 @@ test_conv_flt_1 (const char *name, int r buf, saved, nelmts); #if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE && H5_SIZEOF_LONG_DOUBLE!=0 } else if(src_type == FLT_LDOUBLE) { - INIT_FP_SPECIAL(src_size, src_nbits, sendian, LDBL_MANT_DIG, dst_size, + size_t mant_dig = LDBL_MANT_DIG; + if (mant_dig >= src_nbits) { + /* This happens for IBM long double in little endian. + The macro LDBL_MANT_DIG says 106 mantissa bits, but the + HDF5 detection code actually represents it as a normal 64bit + double (52 bit mantissa) with the upper double being + unspec bits (which is sort of okay as the testsuite + wouldn't deal with that format correctly anyway). So + override the mantissa size. */ + mant_dig = 52; + } + INIT_FP_SPECIAL(src_size, src_nbits, sendian, mant_dig, dst_size, buf, saved, nelmts); #endif } else @@ -3808,7 +3819,18 @@ test_conv_int_fp(const char *name, int r INIT_FP_DENORM(long double, LDBL_MANT_DIG, src_size, src_nbits, sendian, dst_size, buf, saved, nelmts); } else { - INIT_FP_SPECIAL(src_size, src_nbits, sendian, LDBL_MANT_DIG, dst_size, buf, saved, nelmts); + size_t mant_dig = LDBL_MANT_DIG; + if (mant_dig >= src_nbits) { + /* This happens for IBM long double in little endian. + The macro LDBL_MANT_DIG says 106 mantissa bits, but the + HDF5 detection code actually represents it as a normal 64bit + double (52 bit mantissa) with the upper double being + unspec bits (which is sort of okay as the testsuite + wouldn't deal with that format correctly anyway). So + override the mantissa size. */ + mant_dig = 52; + } + INIT_FP_SPECIAL(src_size, src_nbits, sendian, mant_dig, dst_size, buf, saved, nelmts); } #endif } else -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
