[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