[Rd] robustbase compilation problem: probably boneheaded? maybe 32-bit?

Martin Maechler maechler at stat.math.ethz.ch
Mon Jul 22 15:32:55 CEST 2013


>>>>> Simon Urbanek <simon.urbanek at r-project.org>
>>>>>     on Thu, 11 Jul 2013 23:10:21 -0400 writes:

    > On Jul 11, 2013, at 10:57 PM, Ben Bolker wrote:

    >> 
    >> With a recent SVN build (R Under development (unstable) (2013-07-10
    >> r63264) -- "Unsuffered Consequences"), I'm having trouble installing the
    >> robustbase package.  The bottom line is that I *think* it's a
    >> 32-bit-system problem, but I could easily be mistaken.
    >> 

    > It's a bug in robustbase - it redefines R_xlen_t without checking the R version. I think the author's true intention was to make it conditional on R version for compatibility so it should be using R_VERSION and not LONG_VECTOR_SUPPORT since the latter is irrelevant here as R 3.0.0+ will have R_xlen_t regardless of the long vector support.

I'm about to upload a new version of robustbase 0.9-9 which
should fix this problem.

However, note that all the CRAN checks of robustbase,
nor my own checks, with R 2.15.1 and R-patched and R-devel,
on both 32-bit or 64-bit do *NOT* reproduce the problem you
report. 

Hence, I'm sending the tar file to Ben and someone else who
enquired in direct private e-mail the tarball of the source
package for robustbase, asking them to check if my changes fix
the problem.

    > Cheers,
    > Simon


    >> robustbase is passing its package checks:
    >> http://cran.r-project.org/web/checks/check_results_robustbase.html
    >> 
    >> ... but from the names of the targets it doesn't look like it is tested
    >> on 32-bit platforms?
    >> 
    >> The error is:
    >> 
    >> gcc -std=gnu99 -I/usr/local/lib/R/include -DNDEBUG  -I/usr/local/include
    >> -fpic  -g -O2  -c init.c -o init.o
    >> In file included from init.c:3:
    >> robustbase.h:20: error: redefinition of typedef ‘R_xlen_t’
    >> /usr/local/lib/R/include/Rinternals.h:69: note: previous declaration of
    >> ‘R_xlen_t’ was here
    >> 
    >> As far as I can see there isn't any junk left over in my systems from
    >> previous installs.
    >> 
    >> Rinternals.h has
    >> 
    >> #ifdef LONG_VECTOR_SUPPORT
    >> typedef ptrdiff_t R_xlen_t;
    >> typedef struct { R_xlen_t lv_length, lv_truelength; } R_long_vec_hdr_t;
    >> # define R_XLEN_T_MAX 4503599627370496
    >> # define R_SHORT_LEN_MAX 2147483647
    >> # define R_LONG_VEC_TOKEN -1
    >> #else
    >> typedef int R_xlen_t;
    >> # define R_XLEN_T_MAX R_LEN_T_MAX
    >> #endif
    >> 
    >> while robustbase has
    >> 
    >> #ifndef LONG_VECTOR_SUPPORT
    >> # ifndef XLENGTH
    >> // for  R <= 2.15.x :
    >> #  define XLENGTH(x) LENGTH(x)
    >> typedef int R_xlen_t;
    >> # endif
    >> #endif
    >> 
    >> It seems the problem is that I have
    >> 
    >> #define SIZEOF_SIZE_T 4
    >> 
    >> in my config.log , which in turn turns off LONG_VECTOR_SUPPORT, which is
    >> otherwise (?) assumed only to be true for R<=2.15.x ... can this be
    >> because I'm on 32-bit Linux , or on old linux with gcc 4.4.3, or ... ?
    >> <http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models>
    >> 
    >> Can anyone confirm/enlighten me?
    >> 
    >> cheers
    >> Ben Bolker
    >> 
    >> ______________________________________________
    >> R-devel at r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel
    >> 
    >>



More information about the R-devel mailing list