Hi, We prefer full names and affiliations here, just like on the R list. Please introduce yourself.
On 26 April 2012 at 12:58, [email protected] wrote: | Hello. | | I have a question/suggestion concering Rcpp. | Recently I was trying to get the Gnu Binutils Autotools working inside an R-package. | (configure.in, Makefile.am,...autoreconf,...) Ambitious :) We learned the hard way that you shouldn't bother. R does all that for you via 'R CMD ...'. Moreover, R knows how to do it for multiarch packages that do i386 as well as x64 (on Windows and Mac; presumably 'soon' on Linux once all distros support it). Once you have a Makefile, this breaks. Which is bad. | In order to get the Compiler-flags in an Rcpp-project right, usually the file "Makevars" is used, where the function Rcpp:::LdFlags() or RcppClassic:::LdFlags() writes the linkerflags and some additional flags into an environment variable. Not so. It simply runs cat(). I usually assign it to Make variable. See eg the Makefile for RInside's inst/examples/standard/ | In the case of the Gnu autotools however, this does not work, because the gnu autotools expect the linkerflags (-L) and the additional flags to be specified separately. | I tried to "fool" the autotools by putting both types of flags into one of those constants, however the gnu autotools has a built-in condition to reject flags in the wrong constants. | | So my only solution was to sort the flags during the configure-step into the two constants. (see below) | (I separated them depending on whether they start with an "-L" or not.) | The code is so extremly ugly, because many terms have to be double- or tripple-escaped to be syntactically correct. | | Did I overlook a function or an argument in Rcpp::: or RcppClassic::: which outputs these two types of flags separately? | If such functions are definately not there, could they be added? There is no such function. I am very hesitant to add one. Whenever we made changes to this part, it often require more changes and fixes. What we have right now works on all five architectures used by CRAN, and it works well for lots of users. Plus, your motivation is, as I argue above, not quite on target as Writing R Extensions etc do not suggest to use autotools inside a package. So while I remained unconvinced that this is a good change, there is one thing that you could to in the meantime is to just write a local package of your own which shadows our RcppLdFlags.R file but uses your local variant for -l as well as -L. Sorry, Dirk | | regards, Mr.M | PS.: I hope that I have not overlooked a solution or a post that deals with this... | | +-------------------+ | | /src/configure.in | | +-------------------+ | | AC_INIT(Rmyproject.cpp) | | PACKAGE=rmyproject | VERSION=0.1.0 | | AM_INIT_AUTOMAKE($PACKAGE, $VERSION) | | AC_PROG_CXX | | RCPPCXXFLAGS=`Rscript -e "Rcpp:::CxxFlags()"``Rscript -e "cat(paste(\" -I\",RcppClassic:::RcppClassic.system.file(),\"/include\",sep=\"\"))"` | | RCPPLDFLAGS=`Rscript -e "cat(paste(grep(\" -L\",paste(\" \",strsplit(capture.output(Rcpp:::LdFlags()),\" \")@<:@@<:@1@:>@@:>@), value = TRUE, invert=TRUE, ignore.case=TRUE),collapse=\"\"))"``Rscript -e "cat(paste(grep(\" -L\",paste(\" \",strsplit(capture.output(RcppClassic:::LdFlags()),\" \")@<:@@<:@1@:>@@:>@), value = TRUE, invert=TRUE, ignore.case=TRUE),collapse=\"\"))"` | | RCPPLDADD=`Rscript -e "cat(paste(grep(\" -L\",paste(\" \",strsplit(capture.output(Rcpp:::LdFlags()),\" \")@<:@@<:@1@:>@@:>@), value = TRUE, ignore.case=TRUE),collapse=\"\"))"``Rscript -e "cat(paste(grep(\" -L\",paste(\" \",strsplit(capture.output(RcppClassic:::LdFlags()),\" \")@<:@@<:@1@:>@@:>@), value = TRUE, ignore.case=TRUE),collapse=\"\"))"` | | AC_SUBST(RCPPCXXFLAGS) | AC_SUBST(RCPPLDFLAGS) | AC_SUBST(RCPPLDADD) | | AC_OUTPUT(Makefile myproject/src/Makefile) | | +------------------+ | | /src/Makefile.am | | +------------------+ | | EXTRA_PROGRAMS = Rmyproject.so | | Rmyproject_so_SOURCES = Rmyproject.cpp coding2.cpp coding3.cpp | | Rmyproject_so_CXXFLAGS = -fPIC @RCPPCXXFLAGS@ -I$(R_INCLUDE_DIR) -I./myproject/src | | Rmyproject_so_LDFLAGS = -shared @RCPPLDFLAGS@ -Wl,-rpath,$(R_PACKAGE_DIR)/libs | | Rmyproject_so_LDADD = @RCPPLDADD@ $(LIBR) -L./ -lmyproject | | all: Rmyproject.so | | +------------+ | | /configure | | +------------+ | | cd ./src | ./configure | cd .. | | -- | NEU: FreePhone 3-fach-Flat mit kostenlosem Smartphone! | Jetzt informieren: http://mobile.1und1.de/?ac=OM.PW.PW003K20328T7073a | _______________________________________________ | Rcpp-devel mailing list | [email protected] | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel -- R/Finance 2012 Conference on May 11 and 12, 2012 at UIC in Chicago, IL See agenda, registration details and more at http://www.RinFinance.com _______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
