[Rcpp-devel] RcppArmadillo fails on FreeBSD
Am 30.05.2011 18:21 (UTC+1) schrieb Dirk Eddelbuettel:
On 30 May 2011 at 17:21, Rainer Hurling wrote: |> I do not understand what you are asking: "as meant in RcppArmadilloConfig" ? |> Neither Romain, Doug nor I use a *BSD variant (if we ignore OS X as a BSD-derivative). |> So nothing in RcppArmadillo explicitly enables or disables *BSD. | | Thanks for answering. Sorry for my bad english and the misunderstanding. | I am not a developer so the following is just a wild guess: | | In FreeBSD there is a function snprintf in stdio of libc. I was | wondering if this could be the function, which RcppArmadillo would | expect to find (on linux etc.) at std:snprintf? | | If yes, is there some chance to use this type of snprintf on FreeBSD | systems? Or is my below patch ok and there is no problem not using | snprintf (on FreeBSD) at all? | | Hope this is not totally nonsense. Between you and me, somebody is confused.
It's me, I am afraid ;-)
snprintf is a standard C library function going (IIRC) back to Kernighan and
Ritchie. My system's manual page shows
int snprintf(char *str, size_t size, const char *format, ...);
which is the same as what you quoted:
int snprintf(char * restrict str, size_t size, const char * restrict format, ...);
apart from the sole difference of 'restrict' which I've never seen before.
I agree.
So per se, we should not need anything special to use snprintf. Can you try
something like this on your box, please?
edd at max:/tmp$ gcc -Wall -o rainer rainer.c
edd at max:/tmp$ ./rainer
Char vector is now [Hello, world]
edd at max:/tmp$ cat rainer.c
#include<stdio.h>
int main(void) {
char foo[32];
snprintf(foo, 31, "Hello, world");
printf("Char vector is now [%s]\n", foo);
return(0);
}
edd at max:/tmp$
I erroneously thought that '#undef ARMA_HAVE_STD_SNPRINTF' will stop using the systems snprintf. ./rainer Char vector is now [Hello, world] So it works as aspected.
We may have turned snprintf off for you by accident, but following your patch we should now be good.
Dirk, sorry again for my misunderstanding. Yes, I also think that FreeBSD people could live with this patch.
Unless I am totally undercaffeinated and missing something here.
Thanks again for your patience and advice, Rainer
Dirk |> You have to tell us what works or doesn't. We cannot test or develop changes |> for *BSD. |> |> | Many thanks in advance, |> | Rainer Hurling |> | |> | ---------------------------------------------------------------------- |> | --- inst/include/RcppArmadilloConfig.h.origin 2011-05-27 17:18:47.000000000 +0200 |> | +++ inst/include/RcppArmadilloConfig.h 2011-05-30 13:53:25.000000000 +0200 |> | @@ -37,7 +37,7 @@ |> | |> | |> | /* TODO: we might need to undef this on other platforms as well */ |> | -#if defined(__GNUC__)&& defined(_WIN64) |> | +#if defined(__GNUC__)&& defined(_WIN64) || defined(__FreeBSD__) |> | #undef ARMA_HAVE_STD_SNPRINTF |> | #endif |> |> That patch looks fine to me and would presumabky play nicely with Armadillo |> as the change would be solely at our level. |> |> I'll apply it it now, so 0.2.22 will have it. | | Thanks for including the patch, | Rainer | |> Dirk