[Rd] Calling Rscript from Makevars

Sean Robert McGuffee sean.mcguffee at gmail.com
Sat May 21 03:00:45 CEST 2011


> Note that setting PKG_LIBS in configure won't work since configure doesn't
> know how to handle it. It may be ok if you don't care that the flags won't be
> checked, but then you better know what you're doing ;).
> 
Why wouldn't PKG_LIBS work in configure?

configure.ac:

PKG_LIBS=`${R_HOME}/bin/Rscript -e "Rcpp:::LdFlags()"`
AC_SUBST(PKG_LIBS)

src/Makefile.in:
PKG_LIBS = @PKG_LIBS@

> You have to run autoconf yourself - R has no way of knowing how to bootstrap
> your setup. Some authors prefer to use the maintainer mode in configure for
> that, but you still have to create some configure script.

Good to know--I hoped that explained what was happening sometimes when
autoconf needed to be run.
NOTE: The manual says,
"1.2 Configure and cleanup
Note that most of this section is specfic to Unix-alikes: see the comments
later on about the Windows port of R.

If your package needs some system-dependent configuration before
installation you can include an executable (Bourne shell) script configure
in your package which (if present) is executed by R CMD INSTALL before any
other action is performed.  This can be a script created by the Autoconf
mechanism, but may also be a script written by yourself.  Use this to detect
if any nonstandard libraries are present such that corresponding code in the
package can be disabled at install time rather than giving error messages
when the package is compiled or used.  To summarize, the full power of
Autoconf is available for your extension package (including variable
substitution, searching for libraries, etc.). "

It might be worth someone revizing this to take out the Autoconf term if it
really isn't even being used.

 


> 
> 
>> Anyway, what this will do is create a configure script when autoconf is run.
>> When ./configure is run by R when installing, it will execute replacement
>> commands on src/Makefile.in to generate the new Makefile.
>> Anything within two @ symbols will be replaced.
>> examples inside my Makefile.in:
>> CC = @CC@
>> CXX = @CXX@
> 
> You can omit all that if you use Makevars. Also using Makefile is discouraged
> because it forces you to replicate the whole building process which is very
> error prone (and may be different for each version of R).
> 
> 
>> I still haven't figured out how to do the Makevars thing,
> 
> 
> It's very simple - just remove all targets from your Makefile and you have
> Makevars since R will do the compilation and linking for you and correctly. If
> you feel like it, you can override its behavior by adding one rule (e.g.,
> all:) that lists your desired dependency and you can pass on to the R default
> by depending on $(SHLIB).
> 
> Cheers,
> Simon
> 
> 
> 
>> but I've
>> completely given up on R documentation. The key part from the R
>> documentation that I found useful was that it calls configure on install, so
>> you can use autoconf documentation to figure out how to set things up.
>> I'm sure I probably left out a ton of info, but those are my two cents.
>> Please feel free to ask me for more details if you are interested.
>> Good luck,
>> Sean 
>> 
>> 
>> On 5/20/11 12:04 PM, "Martyn Byng" <Martyn.Byng at nag.co.uk> wrote:
>> 
>>> Hi,
>>> 
>>> I am trying to package some code to use with R and wanted to call
>>> Rscript from within the Makevars file (I am trying to automate the
>>> setting of the location of a third party library depending on what is
>>> available / the system the package is being installed on).
>>> 
>>> If I just have a simple Makevars containing
>>> 
>>> 
>>> PKG_LIBS= -lnag_nag -L/fserver/nagprod/FL22/fll6a22df/lib
>>> 
>>> 
>>> the package is built without any errors, if I attempt to add a call to
>>> Rscript, for example (which I think is the way that "Writing R
>>> Extensions" recommends):
>>> 
>>> 
>>> R_SCRIPT_NAME=Rscript
>>> ifneq ($(R_HOME),)
>>>  R_SCRIPT=$(R_HOME)/bin$(R_ARCH_BIN)/$(R_SCRIPT_NAME)
>>> else
>>>  R_SCRIPT=$(R_SCRIPT_NAME)
>>> endif
>>> R_ARCH=$(shell $(R_SCRIPT) -e 'cat(R.version$$arch)')
>>> 
>>> PKG_LIBS= -lnag_nag -L/fserver/nagprod/FL22/fll6a22df/lib
>>> 
>>> 
>>> I get the following error:
>>> 
>>> * checking for file 'NAGFWrappers/DESCRIPTION' ... OK
>>> * preparing 'NAGFWrappers':
>>> * checking DESCRIPTION meta-information ... OK
>>> * cleaning src
>>> make: Nothing to be done for `clean'.
>>> * removing junk files
>>> * checking for LF line-endings in source and make files
>>> * checking for empty or unneeded directories
>>> * building binary distribution
>>> * installing *source* package 'NAGFWrappers' ...
>>> ** libs
>>> /usr/share/R/make/shlib.mk:3: /usr/lib64/R/etcx86_64/Makeconf: No such
>>> file or directory
>>> make: *** No rule to make target `/usr/lib64/R/etcx86_64/Makeconf'.
>>> Stop.
>>> ERROR: compilation failed for package 'NAGFWrappers'
>>> * removing '/tmp/Rinst1513764321/NAGFWrappers'
>>> ERROR
>>> * installation failed
>>> 
>>> 
>>> Any help / pointers would be appreciated.
>>> 
>>> Cheers
>>> 
>>> Martyn
>>> 
>>> Output from R.version:
>>> 
>>> platform       x86_64-redhat-linux-gnu
>>> arch           x86_64
>>> os             linux-gnu
>>> system         x86_64, linux-gnu
>>> status         
>>> major          2
>>> minor          11.0
>>> year           2010
>>> month          04
>>> day            22
>>> svn rev        51801
>>> language       R
>>> version.string R version 2.11.0 (2010-04-22)
>>> 
>>> 
>>> ________________________________________________________________________
>>> The Numerical Algorithms Group Ltd is a company registered in England
>>> and Wales with company number 1249803. The registered office is:
>>> Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
>>> 
>>> This e-mail has been scanned for all viruses by Star. Th...{{dropped:4}}
>>> 
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
>> 
>



More information about the R-devel mailing list