R CMD build (moved from r-help)
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