Henrik Bengtsson
2012-Apr-20 21:00 UTC
[Rd] R CMD check: Sys.getenv("R_GSCMD") cannot contain full pathname (contrary to docs)
Hi, in help("R_GSCMD") it says "R_GSCMD: Optional. The path to Ghostscript, used by dev2bitmap, bitmap and embedFonts. Consulted when those functions are invoked.". However, if 'R_GSCMD' contains a full pathname to the Ghostscript executable (as above "path" indicates), e.g.> Sys.getenv("R_GSCMD")[1] "C:\\Program Files\\gs\\gs8.71\\bin\\gswin32c.exe" then 'R CMD check' will report * checking sizes of PDF files under 'inst/doc' ... NOTE Unable to find GhostScript executable to run checks on size reduction Setting 'R_GSCMD' to "gswin32c.exe" and asserting that it is the PATH (this is on Windows), it works. TROUBLESHOOTING: In the local function check_doc_size() of tools:::.check_packages() [cf. http://svn.r-project.org/R/trunk/src/library/tools/R/check.R], the Ghostscript executable is retrieved as: gs_cmd <- find_gs_cmd(Sys.getenv("R_GSCMD", "")) and if nzchar(gs_cmd) is FALSE, then the 'R CMD check' NOTE appears. Inspecting tools:::find_gs_cmd, this corresponds to gs_cmd <- Sys.which(Sys.getenv("R_GSCMD", "")) iff 'R_GSCMD' is set. In other words, tools:::find_gs_cmd() assumes a basename not a full pathname. SUGGESTIONS: Update tools:::find_gs_cmd() to test for file existence before turning to Sys.which(), e.g. find_gs_cmd <- function (gs_cmd) { if (!nzchar(gs_cmd)) { if (.Platform$OS.type == "windows") { gs_cmd <- Sys.which("gswin64c") if (!nzchar(gs_cmd)) gs_cmd <- Sys.which("gswin32c") gs_cmd } else Sys.which("gs") } else { if (file.exists(gs_cmd) && !file.info(gs_cmd)$isdir) gs_cmd else Sys.which(gs_cmd) } } /Henrik> sessionInfo()R version 2.15.0 Patched (2012-04-08 r58935) Platform: x86_64-pc-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] R.methodsS3_1.4.0 tools_2.15.0
Henrik Bengtsson
2012-May-30 22:34 UTC
[Rd] R CMD check: Sys.getenv("R_GSCMD") cannot contain full pathname (contrary to docs)
Bump, in case it was missed. This is also the case with R Under development (unstable) (2012-05-25 r59443). /Henrik On Fri, Apr 20, 2012 at 2:00 PM, Henrik Bengtsson <hb at biostat.ucsf.edu> wrote:> Hi, > > in help("R_GSCMD") it says "R_GSCMD: Optional. The path to > Ghostscript, used by dev2bitmap, bitmap and embedFonts. Consulted when > those functions are invoked.". ?However, if 'R_GSCMD' contains a full > pathname to the Ghostscript executable (as above "path" indicates), > e.g. > >> Sys.getenv("R_GSCMD") > [1] "C:\\Program Files\\gs\\gs8.71\\bin\\gswin32c.exe" > > then 'R CMD check' will report > > * checking sizes of PDF files under 'inst/doc' ... NOTE > Unable to find GhostScript executable to run checks on size reduction > > Setting 'R_GSCMD' to "gswin32c.exe" and asserting that it is the PATH > (this is on Windows), it works. > > > TROUBLESHOOTING: > In the local function check_doc_size() of tools:::.check_packages() > [cf. http://svn.r-project.org/R/trunk/src/library/tools/R/check.R], > the Ghostscript executable is retrieved as: > > ?gs_cmd <- find_gs_cmd(Sys.getenv("R_GSCMD", "")) > > and if nzchar(gs_cmd) is FALSE, then the 'R CMD check' NOTE appears. > Inspecting tools:::find_gs_cmd, this corresponds to > > ?gs_cmd <- Sys.which(Sys.getenv("R_GSCMD", "")) > > iff 'R_GSCMD' is set. ?In other words, tools:::find_gs_cmd() assumes a > basename not a full pathname. > > > SUGGESTIONS: > Update tools:::find_gs_cmd() to test for file existence before turning > to Sys.which(), e.g. > > find_gs_cmd <- function (gs_cmd) > { > ? ?if (!nzchar(gs_cmd)) { > ? ? ? ?if (.Platform$OS.type == "windows") { > ? ? ? ? ? ?gs_cmd <- Sys.which("gswin64c") > ? ? ? ? ? ?if (!nzchar(gs_cmd)) > ? ? ? ? ? ? ? ?gs_cmd <- Sys.which("gswin32c") > ? ? ? ? ? ?gs_cmd > ? ? ? ?} > ? ? ? ?else Sys.which("gs") > ? ?} else { > ? ? ?if (file.exists(gs_cmd) && !file.info(gs_cmd)$isdir) > ? ? ? ?gs_cmd > ? ? ?else > ? ? ? ?Sys.which(gs_cmd) > ? } > } > > > /Henrik > >> sessionInfo() > R version 2.15.0 Patched (2012-04-08 r58935) > Platform: x86_64-pc-mingw32/x64 (64-bit) > > locale: > [1] LC_COLLATE=English_United States.1252 > [2] LC_CTYPE=English_United States.1252 > [3] LC_MONETARY=English_United States.1252 > [4] LC_NUMERIC=C > [5] LC_TIME=English_United States.1252 > > attached base packages: > [1] stats ? ? graphics ?grDevices utils ? ? datasets ?methods ? base > > loaded via a namespace (and not attached): > [1] R.methodsS3_1.4.0 tools_2.15.0