From simon.urbanek at r-project.org  Fri Jul 12 05:10:21 2013
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Thu, 11 Jul 2013 23:10:21 -0400
Subject: [Rd] robustbase compilation problem: probably boneheaded? maybe
	32-bit?
In-Reply-To: <51DF7098.1080905@gmail.com>
References: <51DF7098.1080905@gmail.com>
Message-ID: <B3B0CB23-1E0F-4AD4-844D-692E4ED7B911@r-project.org>


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.

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
> 
> 



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