From simon.urbanek at r-project.org  Sat May 21 03:40:09 2011
From: simon.urbanek at r-project.org (Simon Urbanek)
Date: Fri, 20 May 2011 21:40:09 -0400
Subject: [Rd] Calling Rscript from Makevars
In-Reply-To: <C9FC86FD.4323%sean.mcguffee@gmail.com>
References: <C9FC86FD.4323%sean.mcguffee@gmail.com>
Message-ID: <1DF2EDDB-A441-42B7-96CF-E267E74877AE@r-project.org>

Sean,

On May 20, 2011, at 9:00 PM, Sean Robert McGuffee wrote:

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

It will "work" as in the substitution will take place but any tests you run in configure will ignore it since autoconf only uses LIBS and not PKG_LIBS. That's why the standard procedure is to set LIBS and then use PKG_LIBS=@LIBS@ in Makevars.in (there are many ways to do this, though).


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

It simply says that the configure can be created by autoconf or manually - entirely up to you. It also says explicitly that for this you must include a script named configure so it's quite unmistakable that R won't be creating it.

Cheers,
Simon


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



[Rd] Calling Rscript from Makevars
Simon Urbanek