[Rd] Re: [R] R CMD build (moved from r-help)

Paul Gilbert pgilbert@bank-banque-canada.ca
Mon, 25 Nov 2002 12:50:40 -0500

> Frank E Harrell Jr <fharrell@virginia.edu> writes:
> > I used to get html and latex files recreated only when the source
> > .Rd file changed. Now I am getting html and latex (and text and
> > example) recreated whenever I run R CMD INSTALL when I do not change
> > any .Rd files. Does anyone know how to get the old behavior or have
> > an idea what I'm doing wrong, to save processing time? Thanks -Frank

Peter Dalgaard BSA wrote:
>You're not doing anything wrong, but the old code was. The basic issue
>was that if you built an old package after a newer one was issued, and
>then tried to upgrade, then the old object files were newer than the
>new source files, and hence weren't updated. Someone got bitten by
>this during the 1.6.1 burn-in so we changed it to rebuild
>unconditionally.  If you have a better scheme for avoiding that effect,
> please tell...

I've been re-working the Makefiles I use for maintaining my packages, not
because of the change in R but because my own Makefiles re-built on changes in
Rd files and vignettes, and it became a bit too much to recheck all my code
because of changes in a vignette. My Makefiles are still a bit rough for broad
distribution, but if anyone would like to look at them and comment then that
might help get them in better shape for others to use. Below are a few more
details on the general approach.

I have about twenty packages, some of which are rolled into bundles and put on
CRAN. I have now separated the bundling into a layer above the packages, so I
can treat the packages individually. There are several interdependencies in the
packages. I consider these to be all in the code, not the "documentation," that
is, examples, vignettes, and demos. Thus I have dependencies among packages, but
I want to trigger these only on code changes, not documentation changes. (The
down side of this is that the documentation tests sometimes point out code
errors, which I will now not find until later.)  To do this I have relegated R
CMD build and check to final pass testing and have my Makefile targets go
directly to the QA tools instead. A change in a single package's  R/*.R or
tests/*.R file triggers a remake of the its code, which does checkMethods() and
checkAssignFuns(), runs anything in the tests/ directory, and installs the code
in a test library. This may trigger remaking of code in other packages. It also
triggers remaking of the documentation for the single package. A change in the
documentation of a single package will trigger remaking of that part of the
documentation of the package, but will not trigger any other remakes. For
example, a change to an Rd file will result in running codoc and related tools,
but only for the single package where the Rd file was changed.

Paul Gilbert