[R-pkg-devel] is R CMD build --compact-vignettes working as expected?

Ben Bolker bbo|ker @end|ng |rom gm@||@com
Thu Oct 8 17:14:04 CEST 2020


   Huh, weird. "both" worked for me.

   My debugging process involved instrumenting the compression function 
to report what it was doing (see below), rebuilding R, and running the 
build and check --as-cran processes again. (If the package you're 
experiencing problems with is public, feel free to point me to it and 
I'll try to take a look.)

   cheers
    Ben

Index: src/library/tools/R/admin.R
===================================================================
--- src/library/tools/R/admin.R	(revision 79311)
+++ src/library/tools/R/admin.R	(working copy)
@@ -1088,6 +1088,7 @@
          }
          if(!res && file.exists(tf)) {
              old <- file.size(p); new <-  file.size(tf)
+            cat(sprintf("compression: old=%f, new=%f, new/old=%f, 
old-new=%f",old, new, new/old,old-new),"\n")
              if(new/old < 0.9 && new < old - 1e4) {
                  file.copy(tf, p, overwrite = TRUE)
                  ans[p, ] <- c(old, new)


On 10/8/20 11:10 AM, John Fox wrote:
> Dear Ben,
> 
> Actually, what I used was --compact-vignettes="both", with qpdf and gs 
> installed on my Windows and Mac machines, and that apparently didn't 
> work for me.
> 
> Best,
>   John
> 
> On 2020-10-07 10:06 p.m., Ben Bolker wrote:
>>    OK, I think I see the problem. tl;dr use --compact-vignettes="both" 
>> when building the vignettes.
>>
>>    --compact-vignettes  by default only tries qpdf.
>>
>>    when the R CMD check --as-cran is run, it tries both qpdf and gs. 
>> Since gs (apparently, in this case) compresses more aggressively than 
>> qpdf, it succeeds in compressing further, and the check complains.
>>
>>  From R CMD build --help:
>>
>>   --compact-vignettes=  try to compact PDF files under inst/doc:
>>                          "no" (default), "qpdf", "gs", "gs+qpdf", "both"
>>    --compact-vignettes   same as --compact-vignettes=qpdf
>>
>>
>>    I don't know if this is worth documenting somewhere, or modifying 
>> the behaviour to make "both" the default for --compact-vignettes ?
>>
>>
>> On 10/7/20 8:35 PM, Duncan Murdoch wrote:
>>> On 07/10/2020 8:32 p.m., Ben Bolker wrote:
>>>>     Thanks for the tip, I'll take a look.
>>>>
>>>>     Given that three relatively experienced package authors all seem to
>>>> have experienced similar issues, it seems that maybe this is worth
>>>> figuring out/maybe I'm not just doing something boneheaded.
>>>
>>> Just to clarify:  I've never noticed the problem you mention.  I just 
>>> know how to debug R CMD build.
>>>
>>> Duncan
>>>
>>>>
>>>>     cheers
>>>>       Ben
>>>>
>>>> On 10/7/20 8:31 PM, Duncan Murdoch wrote:
>>>>> I don't know the answer to your question, but you can debug the
>>>>> --compact-vignettes option as follows.
>>>>>
>>>>> debug(tools::compactPDF)
>>>>> tools:::.build_packages(c("--compact-vignettes", "pkgdir"))
>>>>>
>>>>> where "pkgdir" is the directory of the source of your package.  Add
>>>>> extra options to the build as separate elements of the argument to
>>>>> .build():  this function is called after args have been parsed.
>>>>>
>>>>> When I do that, I see that it rejects the compaction, because none of
>>>>> mine benefit much from it:  it wants at least a 10% and 10K reduction.
>>>>> But Ben's example met those criteria.  When I trick it into accepting
>>>>> the compaction, it does put the compacted PDF into the tarball.
>>>>>
>>>>> Duncan Murdoch
>>>>>
>>>>> On 07/10/2020 6:03 p.m., John Fox wrote:
>>>>>> Dear Ben,
>>>>>>
>>>>>> On 2020-10-07 5:26 p.m., Ben Bolker wrote:
>>>>>>>      I hope so too. The (annoying) workaround is to compact the 
>>>>>>> vignette
>>>>>>> yourself (using qpdf directly or using tools::compactPDF), then use
>>>>>>> no-build-vignettes.  The problem there is whatever's supposed to 
>>>>>>> happen
>>>>>>> with building vignette indices.  The uuuuugly workaround, I 
>>>>>>> guess, is to
>>>>>>> build the tarball, compact the vignettes oneself, then *replace* 
>>>>>>> them in
>>>>>>> the tarball.  (Obviously I can automate that, but it seems as 
>>>>>>> though it
>>>>>>> would be unnecessary if I knew what was going on ...)
>>>>>>
>>>>>> I've used both of these workarounds and agree that it would be 
>>>>>> nice to
>>>>>> avoid them. After all, what is the --compact-vignettes argument for?
>>>>>>
>>>>>> Best,
>>>>>>     John
>>>>>>
>>>>>>>
>>>>>>>      cheers
>>>>>>>       Ben
>>>>>>>
>>>>>>>
>>>>>>> On 10/7/20 4:10 PM, John Fox wrote:
>>>>>>>> Dear Ben,
>>>>>>>>
>>>>>>>> I was hoping that someone would pick up on this problem, because 
>>>>>>>> I've
>>>>>>>> experienced the same issue of --compact-vignettes apparently 
>>>>>>>> ignored,
>>>>>>>> e.g., with the Rcmdr package under R 4.0.2 on both macOS and 
>>>>>>>> Windows.
>>>>>>>>
>>>>>>>> Best,
>>>>>>>>     John
>>>>>>>>
>>>>>>>> John Fox, Professor Emeritus
>>>>>>>> McMaster University
>>>>>>>> Hamilton, Ontario, Canada
>>>>>>>> web: https://socialsciences.mcmaster.ca/jfox/
>>>>>>>>
>>>>>>>> On 2020-10-05 1:09 p.m., Ben Bolker wrote:
>>>>>>>>>      Am I confused, or doing something wrong, or ... ?
>>>>>>>>>
>>>>>>>>>      I have qpdf installed, and am running R CMD build with
>>>>>>>>> --compact-vignettes, but the PDF in the tarball doesn't seem to be
>>>>>>>>> compressed despite the fact that the output messages say 
>>>>>>>>> "compacting
>>>>>>>>> vignettes ..."
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>      $ R CMD build --compact-vignettes lme4
>>>>>>>>> * checking for file ‘lme4/DESCRIPTION’ ... OK
>>>>>>>>> * preparing ‘lme4’:
>>>>>>>>> * checking DESCRIPTION meta-information ... OK
>>>>>>>>> * cleaning src
>>>>>>>>> * installing the package to process help pages
>>>>>>>>> * saving partial Rd database
>>>>>>>>> * creating vignettes ... OK
>>>>>>>>> Warning: ‘inst/doc’ files
>>>>>>>>>        ‘lmerperf.html’, ‘lmer.pdf’, ‘PLSvGLS.pdf’, ‘Theory.pdf’
>>>>>>>>>      ignored as vignettes have been rebuilt.
>>>>>>>>>      Run R CMD build with --no-build-vignettes to prevent 
>>>>>>>>> rebuilding.
>>>>>>>>> * compacting vignettes and other PDF files
>>>>>>>>> * cleaning src
>>>>>>>>> * checking for LF line-endings in source and make files and shell
>>>>>>>>> scripts
>>>>>>>>> * checking for empty or unneeded directories
>>>>>>>>> * building ‘lme4_1.1-24.tar.gz’
>>>>>>>>>
>>>>>>>>>      The copy of lmer.pdf in the resulting tarball is 900K or so:
>>>>>>>>>
>>>>>>>>> $ tar ztvf lme4_1.1-24.tar.gz lme4/inst/doc/lmer.pdf
>>>>>>>>> -rw-r--r-- bolker/bolker 907022 2020-10-05 12:59
>>>>>>>>> lme4/inst/doc/lmer.pdf
>>>>>>>>>
>>>>>>>>>      The previously built (and manually compacted) version of 
>>>>>>>>> lmer.pdf
>>>>>>>>> in the tarball is 500K:
>>>>>>>>>
>>>>>>>>> $ ls -l lme4/inst/doc/lmer.pdf
>>>>>>>>> -rw-r--r-- 1 bolker bolker 495199 Oct  3 22:15 
>>>>>>>>> lme4/inst/doc/lmer.pdf
>>>>>>>>>
>>>>>>>>>       Is 'R CMD build' confused by the presence of a pre-built 
>>>>>>>>> PDF in
>>>>>>>>> the inst/doc directory? Or am I somehow mistaken about how this is
>>>>>>>>> supposed to work?
>>>>>>>>>
>>>>>>>>>       I would just use --no-build-vignettes and submit the 
>>>>>>>>> tarball with
>>>>>>>>> the previously built/compressed PDF, but I'm trying to avoid a
>>>>>>>>> "Package has a VignetteBuilder field but no prebuilt vignette 
>>>>>>>>> index"
>>>>>>>>> NOTE, which I assume is missing because I built without building
>>>>>>>>> vignettes ... ?
>>>>>>>>>
>>>>>>>>>      As always, enlightenment is welcome.
>>>>>>>>>
>>>>>>>>>      cheers
>>>>>>>>>        Ben Bolker
>>>>>>>>>
>>>>>>>>> ______________________________________________
>>>>>>>>> R-package-devel using r-project.org mailing list
>>>>>>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>>>>
>>>>>> ______________________________________________
>>>>>> R-package-devel using r-project.org mailing list
>>>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>>>>
>>>>>
>>>



More information about the R-package-devel mailing list