From ligges at statistik.tu-dortmund.de  Wed Jun 29 19:50:47 2011
From: ligges at statistik.tu-dortmund.de (Uwe Ligges)
Date: Wed, 29 Jun 2011 19:50:47 +0200
Subject: [Rd] R CMD check --force-multiarch does not install all the
 archs for testing
In-Reply-To: <4E0A4381.6020506@fhcrc.org>
References: <4E0912EE.7020105@fhcrc.org>
	<4E099478.4030609@statistik.tu-dortmund.de>
	<4E0A2507.1010904@fhcrc.org>
	<CA592CAB-B8DB-49C6-9AFD-9DB2C2087806@r-project.org>
	<4E0A2F44.3010109@fhcrc.org>
	<EBE00C6D-476A-4DA5-9CB8-A0F320D2B042@r-project.org>
	<4E0A4381.6020506@fhcrc.org>
Message-ID: <4E0B65F7.7080701@statistik.tu-dortmund.de>



On 28.06.2011 23:11, Herv? Pag?s wrote:
> Simon,
>
> On 11-06-28 01:44 PM, Simon Urbanek wrote:
>>
>> On Jun 28, 2011, at 3:45 PM, Herv? Pag?s wrote:
>>
>>> Hi Simon,
>>>
>>> On 11-06-28 12:19 PM, Simon Urbanek wrote:
>>>>
>>>> On Jun 28, 2011, at 3:01 PM, Herv? Pag?s wrote:
>>>>
>>>>> Hi Uwe,
>>>>>
>>>>> On 11-06-28 01:44 AM, Uwe Ligges wrote:
>>>>>>
>>>>>>
>>>>>> On 28.06.2011 01:31, Herv? Pag?s wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Why isn't 'R CMD check --force-multiarch' installing the package
>>>>>>> for all the architectures that are going to be checked?
>>>>>>
>>>>>> Herv?,
>>>>>>
>>>>>> no, since it cannot know that that you need
>>>>>>
>>>>>> --merge-multiarch
>>>>>>
>>>>>> as an additional install flag for this particular package.
>>>>>
>>>>> Why not just use this flag anyway? Does it hurt to use it on
>>>>> packages that don't strictly need it?
>>>>>
>>>>
>>>> It does for two reasons: a) everything is built twice
>>>
>>> That's exactly what I want when I do 'R CMD check --force-multiarch'
>>>
>>
>> No, that's not what it does (and I assume you mean --force-biarch). It
>> builds the package just once, you're simply overriding the default
>> behavior of checking for configure.win, that's all. The two flags are
>> orthogonal, --force-biarch makes no sense with --merge-multiarch, they
>> are for all practical purposes mutually exclusive by definition of
>> what they do.
>
> I really mean --force-multiarch, not --force-biarch. AFAIK 'R CMD check'
> has no --force-biarch option.
>
>>
>>
>>>> and b) package authors don't expect the necessity to support
>>>> --libs-only if the package doesn't require separate build runs.
>>>
>>> When specifying --force-multiarch, the user really expects the
>>> package to be installed for all sub-archs.
>>>
>>
>> ... with the assumption that the package supports it even though it
>> has a configure script which may to may not work unlike
>> --merge-multiarch which will always work.
>
> Just to clarify:
>
> --force-multiarch is an 'R CMD check' option, not an 'R CMD INSTALL'
> option
>
> --merge-multiarch is an 'R CMD INSTALL' option, not an 'R CMD check'
> option
>
> Now you are saying that --merge-multiarch will always work (on Windows
> of course, all this discussion is about how to achieve multiarch check
> on Windows). Great, this is what I've been observing too so far!


It does not "always work", unfortunately. We need force-biarch on CRAN for:

RGtk2
rgdal
rphast
SQLiteMap



> On packages with or without native codes, with or without configure.win
> scripts, etc... It always seems to work. So, again, why isn't
> 'R CMD check --force-multiarch' installing with --merge-multiarch?
> Note that I'm not attached to that solution in particular, just trying
> to suggest an easy fix for 'R CMD check --force-multiarch' (which right
> now is broken on some packages).

Well, merge-multiarch will result in small overhead. It will try to 
compile the code in ./src  for the other architecture and merge that 
into the same package. For packages without any compiled code, it does 
not make sense to ask R to do that since the packages are identical 
under 32-bit and 64-bit, hence you don't want the overhead. For packages 
that include compiled code, you still do not want it, since R does it 
automatically - unless there is a configure.win file.

Therefore, the option is just an add on that is necessary for only 18 
out of roughly 3000 CRAN packages.

So we have 4 packages that require --force-biarch and 18 requiring 
--merge-multiarch on CRAN. All the others build automatically for both 
architectures if they need to. So no reason to do that all the time.

Best wishes,
Uwe



>> --force-biarch is just a way to flag packages that have configure.win
>> that has no effect on the binary settings (flags etc.). It forces R to
>> try multi-arch build in one flight, but it may or may not work
>> depending on the package. It is a way to save time by not running
>> --merge-multiarch (and thus building the package twice).
>
> --force-biarch is an 'R CMD INSTALL' option that I don't use. Why would
> I use something that might fail when I can use --merge-multiarch which
> always works.
 >
> Thanks,
> H.
>
>>
>> Cheers,
>> Simon
>>
>>
>>>>
>>>> The cross-platform way is to not use --merge-multiarch but use
>>>> --libs-only instead as needed (easy to check after the first arch
>>>> run which will tell you whether it's needed or not). I suspect that
>>>> --merge-multiarch is just a convenience shortcut (and it's unclear
>>>> to me why it's Windows-only...).
>>>
>>> A great convenience indeed as it allows to do the multiarch install in
>>> a single step. And it's unclear to me too why it's Windows-only but I
>>> would have hoped you would know...
>>>
>>> Thanks,
>>> H.
>>>
>>>
>>>>
>>>> Cheers,
>>>> Simon
>>>>
>>>>
>>>>>> You will have to check it in repository maintainer's mode (as the
>>>>>> CRAN
>>>>>> maintainers do everywhere). Essentially this is for me (when also
>>>>>> producing WIndows binaries):
>>>>>>
>>>>>>
>>>>>> Step 1: Installation
>>>>>>
>>>>>> R CMD INSTALL --pkglock --compact-docs --build --merge-multiarch
>>>>>> --library="D:/path/to/library" fabia_1.5.0.tar.gz>
>>>>>> fabia-install.out 2>&1
>>>>>>
>>>>>> (where the merge-multiarch part applies only to this package, of
>>>>>> course)
>>>>>>
>>>>>>
>>>>>>
>>>>>> Step 2: Check (without installation, since that happened before
>>>>>> already,
>>>>>> using the install log from step 1)
>>>>>>
>>>>>> R CMD check --library="D:/path/to/library" --force-multiarch
>>>>>> --install="check:fabia-install.out" fabia
>>>>>
>>>>> Whaoooo! Would be nice if there was a plan to make 'R CMD check' also
>>>>> usable by normal people (including the package developer), not just
>>>>> by a few privileged people that know about those undocumented tricks.
>>>>>
>>>>> Thanks,
>>>>> H.
>>>>>
>>>>>>
>>>>>> Best wishes,
>>>>>> Uwe
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> For some packages, it only installs for the default arch ('i386').
>>>>>>> Then testing the package for 'x64' fails.
>>>>>>>
>>>>>>> For example,
>>>>>>>
>>>>>>> Output of R CMD check --force-multiarch fabia_1.5.0.tar.gz:
>>>>>>> -----------------------------------------------------------
>>>>>>> * using log directory 'D:/biocbld/bbs-2.9-bioc/meat/fabia.Rcheck'
>>>>>>> * using R version 2.14.0 Under development (unstable) (2011-05-30
>>>>>>> r56020)
>>>>>>> * using platform: i386-pc-mingw32 (32-bit)
>>>>>>> * using session charset: ISO8859-1
>>>>>>> * using option '--no-vignettes'
>>>>>>> * checking for file 'fabia/DESCRIPTION' ... OK
>>>>>>> * this is package 'fabia' version '1.5.0'
>>>>>>> * checking package name space information ... OK
>>>>>>> * checking package dependencies ... OK
>>>>>>> * checking if this is a source package ... OK
>>>>>>> * checking whether package 'fabia' can be installed ... OK
>>>>>>> * checking installed package size ... OK
>>>>>>> * checking package directory ... OK
>>>>>>> * checking for portable file names ... OK
>>>>>>> * checking DESCRIPTION meta-information ... OK
>>>>>>> * checking top-level files ... OK
>>>>>>> * checking index information ... OK
>>>>>>> * checking package subdirectories ... OK
>>>>>>> * checking R files for non-ASCII characters ... OK
>>>>>>> * checking R files for syntax errors ... OK
>>>>>>> * loading checks for arch 'i386'
>>>>>>> ** checking whether the package can be loaded ... OK
>>>>>>> ** checking whether the package can be loaded with stated
>>>>>>> dependencies
>>>>>>> ... OK
>>>>>>> ** checking whether the package can be unloaded cleanly ... OK
>>>>>>> ** checking whether the name space can be loaded with stated
>>>>>>> dependencies ... OK
>>>>>>> ** checking whether the name space can be unloaded cleanly ... OK
>>>>>>> * loading checks for arch 'x64'
>>>>>>> ** checking whether the package can be loaded ...Warning: running
>>>>>>> command '"D:/biocbld/bbs-2.9-bioc/R/bin/x64/Rterm.exe"
>>>>>>> R_ENVIRON_USER='no_such_file' --no-site-file --no-init-file
>>>>>>> --no-save
>>>>>>> --no-restore --slave -f
>>>>>>> D:\biocbld\bbs-2.9-bioc\tmpdir\RtmpO65p5H\Rin57456988' had status 1
>>>>>>> ERROR
>>>>>>> Error: package 'fabia' is not installed for 'arch=x64'
>>>>>>> Execution halted
>>>>>>>
>>>>>>> It looks like this package has a loading problem: see the
>>>>>>> messages for
>>>>>>> details.
>>>>>>>
>>>>>>> Content of fabia.Rcheck\00install.out:
>>>>>>> --------------------------------------
>>>>>>>
>>>>>>> * installing *source* package 'fabia' ...
>>>>>>> Building libRcpp.a in RcppSrc...
>>>>>>> rm -f Rcpp.o libRcpp.a
>>>>>>> g++ -c Rcpp.cpp -o Rcpp.o -I"D:/biocbld/BBS-2?1.9-B/R/include"
>>>>>>> -I"D:/biocbld/BBS-2?1.9-B/R/src/include" -Wall -O2
>>>>>>> ar r libRcpp.a Rcpp.o
>>>>>>> C:\Rtools213\MinGW\bin\ar.exe: creating libRcpp.a
>>>>>>> ranlib libRcpp.a
>>>>>>> rm -f Rcpp.o
>>>>>>> rm -f Rcpp.o
>>>>>>> ** libs
>>>>>>> running src/Makefile.win ...
>>>>>>> rm -f fabia.o fabia.dll *.a *.o *.so *.dll
>>>>>>> g++ -c fabiac.cpp -o fabia.o -I../RcppSrc
>>>>>>> -I"D:/biocbld/BBS-2?1.9-B/R/include" -Wall -O2
>>>>>>> g++ -shared -s -static-libgcc fabia.o -L../RcppSrc -lRcpp
>>>>>>> -L"D:/biocbld/BBS-2?1.9-B/R/bin/i386" -lR -o fabia.dll
>>>>>>> rm -f fabia.o *.a *.o *.so
>>>>>>> installing to
>>>>>>> D:/biocbld/bbs-2.9-bioc/meat/fabia.Rcheck/fabia/libs/i386
>>>>>>> ** R
>>>>>>> ** demo
>>>>>>> ** inst
>>>>>>> ** preparing package for lazy loading
>>>>>>> Creating a generic function for "plot" from package "graphics" in
>>>>>>> package "fabia"
>>>>>>> ** help
>>>>>>> *** installing help indices
>>>>>>> ** building package indices ...
>>>>>>> *** tangling vignette sources ...
>>>>>>> 'fabia.Rnw'
>>>>>>> ** testing if installed package can be loaded
>>>>>>>
>>>>>>> * DONE (fabia)
>>>>>>>
>>>>>>> The source tarball for this package is available here:
>>>>>>> http://bioconductor.org/packages/2.9/bioc/html/fabia.html
>>>>>>>
>>>>>>> What command should be used to perform a multiarch check of this
>>>>>>> package?
>>>>>>>
>>>>>>> This is on a 64-bit Windows Server 2008 R2 Enterprise machine
>>>>>>> using a
>>>>>>> recent combined Windows 32/64 bit binary of R-devel from CRAN.
>>>>>>>
>>>>>>> Thanks!
>>>>>>> H.
>>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Herv? Pag?s
>>>>>
>>>>> Program in Computational Biology
>>>>> Division of Public Health Sciences
>>>>> Fred Hutchinson Cancer Research Center
>>>>> 1100 Fairview Ave. N, M1-B514
>>>>> P.O. Box 19024
>>>>> Seattle, WA 98109-1024
>>>>>
>>>>> E-mail: hpages at fhcrc.org
>>>>> Phone: (206) 667-5791
>>>>> Fax: (206) 667-1319
>>>>>
>>>>> ______________________________________________
>>>>> R-devel at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Herv? Pag?s
>>>
>>> Program in Computational Biology
>>> Division of Public Health Sciences
>>> Fred Hutchinson Cancer Research Center
>>> 1100 Fairview Ave. N, M1-B514
>>> P.O. Box 19024
>>> Seattle, WA 98109-1024
>>>
>>> E-mail: hpages at fhcrc.org
>>> Phone: (206) 667-5791
>>> Fax: (206) 667-1319
>>>
>>>
>>
>
>



[Rd] R CMD check --force-multiarch does not install all the archs for testing
Uwe Ligges