[Pkg-scicomp-devel] Bug#430303: Bug#430303: ldbl128 transition for alpha, powerpc, sparc, s390

Rafael Laboissiere rafael at debian.org
Sun Jun 24 15:26:24 UTC 2007


* Matthias Klose <doko at cs.tu-berlin.de> [2007-06-23 15:48]:

> Package: libsundials-serial-dev
> Severity: serious
> User: debian-release at lists.debian.org
> Usertags: goal-ldbl128
> 
> Discussed in http://lists.debian.org/debian-devel/2007/05/msg01173.html
> 
> With glibc-2.5 and gcc-4.1.2 (and gcc-4.2), the 'long double'
> data type did change from a 64bit representation to a 128bit
> representation on alpha, powerpc, sparc, s390. To allow
> partial upgrades of packages, we will need to rename all
> packages holding libraries with the long double data type in
> their API.  Both libc and libstdc++ do not need to be renamed,
> because they support both representations.  We rename the library
> packages on all architectures to avoid name mismatches between
> architectures (you can avoid the renaming by supporting both
> datatype representations in the library as done in glibc and
> libstdc++, but unless a library is prepared for that, it does not
>         seem to be worth the effort).
> 
> It is suggested to rename a package libfoo1 to libfoo1ldbl;
> please wait with the renaming if the package depends on
> another library package which needs renaming.
> 
> This package has been indentified as one with header files in
> /usr/include matching 'long *double'. Please close this bug report
> if it is a false positive, or rename the package accordingly.

I think that this bug report filed against libsundials-serial-dev is a false
positive.  It was probably triggered by the presence of the "long double"
string in /usr/include/sundials/sundials_types.h.  The relevant part of this
file is:

########## [snip] ###################################
#if defined(SUNDIALS_SINGLE_PRECISION)

typedef float realtype;
#define RCONST(x) x##F
#define BIG_REAL FLT_MAX
#define SMALL_REAL FLT_MIN
#define UNIT_ROUNDOFF FLT_EPSILON

#elif defined(SUNDIALS_DOUBLE_PRECISION)

typedef double realtype;
#define RCONST(x) x
#define BIG_REAL DBL_MAX
#define SMALL_REAL DBL_MIN
#define UNIT_ROUNDOFF DBL_EPSILON

#elif defined(SUNDIALS_EXTENDED_PRECISION)

typedef long double realtype;
#define RCONST(x) x##L
#define BIG_REAL LDBL_MAX
#define SMALL_REAL LDBL_MIN
#define UNIT_ROUNDOFF LDBL_EPSILON

#endif
########## [snip] ###################################

The macro variables above are chosen by configure according to the
--with-precision flag:

    $ ./configure --help| grep '\(precision\|extended\)'
      --with-precision=ARG    specify floating-point precision
                              (single/double/extended) [double]

whose value defaults to "double".  As debian/rules does not set the flag
above:

    $ grep FLAG debian/rules
    DEB_CONFIGURE_EXTRA_FLAGS := --enable-shared --enable-fortran --disable-mpi --enable-examples

we end up with the following:

    $ grep PRECISION /usr/include/sundials/sundials_config.h
    #define SUNDIALS_DOUBLE_PRECISION 1

This means that there will be no "long double" declaration in the
libsundials-serial headers.

If nobody objects, I will close this bug report soon.

-- 
Rafael




More information about the Pkg-scicomp-devel mailing list