[Rd] R CMD build cannot create vignettes on Windows if Makefile is used

Duncan Murdoch murdoch.duncan at gmail.com
Mon Sep 13 20:47:54 CEST 2010


  On 13/09/2010 2:38 PM, Hervé Pagès wrote:
> On 09/13/2010 03:34 AM, Duncan Murdoch wrote:
> >  Hervé Pagès wrote:
> >>  Hi Duncan,
> >>
> >>  On 09/12/2010 05:07 AM, Duncan Murdoch wrote:
> >>>  On 12/09/2010 12:49 AM, Hervé Pagès wrote:
> >>>>  Hi Duncan,
> >>>>
> >>>>  On 09/11/2010 03:56 AM, Duncan Murdoch wrote:
> >>>>>  On 11/09/2010 12:52 AM, Hervé Pagès wrote:
> >>>>>>  Hi,
> >>>>>>
> >>>>>>  I found the following problem with recent R-devel
> >>>>>>  (2010-08-26 r52817) on Windows (32-bit and 64-bit):
> >>>>>>  'R CMD build<pkg>' gets stalled during vignett
> >>>>>>  creation for packages that have a Makefile in<pkg>/inst/doc.
> >>>>>>
> >>>>>>  It seems that the problem is that the commands used in the
> >>>>>>  Makefile for converting .tex to .pdf are not able to locate
> >>>>>>  the Sweave.sty file anymore (if I drop this file to
> >>>>>>  <pkg>/inst/doc, then the problem goes away).
> >>>>>  This sounds like a problem that only the package maintainer could
> >>>>>  address. Presumably it will be temporary: once they adjust to the new
> >>>>>  organization of the share/texmf directory, things will be fine again.
> >>>>>
> >>>>>  The reorg is described in this NEWS item:
> >>>>>
> >>>>>  * Directory R_HOME/share/texmf now follows the TDS conventions, so
> >>>>>  can be set as a texmf tree ('root directory' in MiKTeX parlance).
> >>>>  Before this reorg, the package maintainer didn't have to care about
> >>>>  where to find things in R_HOME/share/texmf. 'R CMD build' would just
> >>>>  find them by setting the TEXINPUTS envir variable appropriately (and
> >>>>  then commands in the inst/doc/Makefile file would find them too).
> >>>>
> >>>>  This reorg was checked in svn as rev 52256. I see the following
> >>>>  adjustments to TEXINPUTS:
> >>>>
> >>>>  ** On Unix (src/scripts/Rcmd.in file):
> >>>>
> >>>>  -## Append 'share/texmf' to TeX's input search path.
> >>>>  -if test -z "$TEXINPUTS}"; then
> >>>>  - TEXINPUTS=".:${R_SHARE_DIR}/texmf:"
> >>>>  +## Append 'share/texmf/...' to TeX's input search path.
> >>>>  +if test -z "${TEXINPUTS}"; then
> >>>>  + TEXINPUTS=".:${R_SHARE_DIR}/texmf/tex/latex:"
> >>>>  else
> >>>>  - TEXINPUTS=".:${TEXINPUTS}:${R_SHARE_DIR}/texmf:"
> >>>>  + TEXINPUTS=".:${TEXINPUTS}:${R_SHARE_DIR}/texmf/tex/latex:"
> >>>>  fi
> >>>>  export TEXINPUTS
> >>>>
> >>>>  ** On Windows (src/gnuwin32/fixed/etc/Rcmd_environ file):
> >>>>
> >>>>  -TEXINPUTS=.;${TEXINPUTS};${R_SHARE_DIR}/texmf;
> >>>>  +TEXINPUTS=.;${TEXINPUTS};${R_SHARE_DIR}/texmf/tex/latex;
> >>>>
> >>>>  The path seems to have been adjusted correctly. So my question is:
> >>>>  why isn't this working on Windows for packages that use a Makefile?
> >>>  I don't know. My first assumption would that something in the Makefile
> >>>  is wrong, but since you don't give any examples, I can't check.
> >>
> >>  There are 8 Bioconductor packages failing to build on Windows
> >>  because of this problem. They have a Makefile in inst/doc/ that
> >>  calls 'pdflatex' or 'texi2dvi --pdf' on<some_vignette>  to convert
> >>  <some_vignette>.tex into<some_vignette>.pdf. They don't
> >>  have Sweave.sty in inst/doc/ (other packages use the same kind of
> >>  Makefile and are building ok because they have a copy of Sweave.sty
> >>  in inst/doc/).
> >>
> >>  For example, here is the content of adSplit/inst/doc/Makefile:
> >>
> >>  all: pdf clean
> >>
> >>  pdf: tr_2005_02.tex
> >>  epstopdf splitSet.eps
> >>  pdflatex tr_2005_02
> >>  pdflatex tr_2005_02
> >>  pdflatex tr_2005_02
> >>
> >>  clean:
> >>  rm -f *.aux *.eps *.log *.out *.tex *.toc
> >>  rm -f Rplots.ps splitSet.pdf tr_2005_02-*
> >>
> >>  The 7 other packages use similar Makefile. As I said before, they
> >>  all used to build ok before the R_HOME/share/texmf reorg. They still
> >>  build ok on non-Windows machines. Thanks!
> >>
> >>  H.
> >
> >  On Windows using MikTeX, we put a -I option on the command line to point
> >  to the input directory. If you don't want to do that, you can use "R CMD
> >  texify --pdf" instead of "pdflatex"; it will try to determine the
> >  appropriate command line based on the platform.
>
> Yes I can use 'R CMD some_command' instead of just 'some_command' in the
> Makefile so 'some_command' sees the TEXINPUTS variable and that solves
> the problem. But when I call 'R CMD build', shouldn't 'make' and its
> child processes ('pdflatex', 'texify', etc...) already see TEXINPUTS?
> Why do I need to call the commands in the Makefile thru R CMD again
> in order to see TEXINPUTS?
>
> Thanks for suggesting workarounds but don't you think there is a real
> problem?
>

As I said, we don't use TEXINPUTS on Windows, we use the command line 
version.  I didn't write the code, so I don't know why there's the 
difference, but I assume there's a reason for it, and presumably the 
reason is that relying on TEXINPUTS doesn't work.

Duncan Murdoch



More information about the R-devel mailing list