This is all a bit above my head but as a Windows user I have always
interpreted NeedsCompilation as meaning I could install it without
having to wait for binaries to appear on CRAN. I do not need Rtools for
my own packages so I have never installed it.
Michael
On 17/05/2025 09:13, Iñaki Ucar wrote:
El sáb., 17 may. 2025 4:03, Hervé Pagès <hpages.on.git...@gmail.com>
escribió:
FWIW NeedsCompilation is a misnomer. IIRC when I was discussing this
feature with R core members many years ago, it doesn't only flag
packages that require compilation (and thus contain arch-specific binary
files), but it is more generally intended to flag packages that the user
wouldn't be able to install **from source** on a pristine Windows or Mac
system because the installation process depends on tools that are not
necessarily present on such systems.
For example I think I remember seeing at the time some packages that
were using 'make' for non-compilation related business. These packages
still needed to be flagged with 'NeedsCompilation: yes' in order to
recognize them as packages for which "binaries" needed to be made for
the purpose distributing them.
Then maybe such thing shouldn't be allowed?
Iñaki
Packages without 'NeedsCompilation' field (or with 'NeedsCompilation:
no') don't need binaries because the source tarballs is guaranteed to be
installable on **any** system, in particular on systems that don't have
any development tools.
Best,
H.
On 15/05/2025 03:38, Iñaki Ucar wrote:
On Thu, 15 May 2025 at 11:42, Jeroen Ooms <jeroeno...@gmail.com> wrote:
On Wed, May 14, 2025 at 11:05 PM Simon Urbanek
<simon.urba...@r-project.org> wrote:
Can you give an example, please? I wonder if there is a real use-case
or just bad package design.
The case that bit me yesterday was a Bioconductor package Rigraphlib,
see
https://bioconductor.org/packages/release/bioc/src/contrib/Rigraphlib_1.0.0.tar.gz
This package builds a static library entirely from a configure script.
Because there is no 'src' dir, we assumed the package to be all-arch,
and get linking errors when trying to use it on another arch then it
was built for. Arguably this is indeed bad package design, but that is
hard to protect against.
The opposite case is also true: there is a src directory but no
compilation happens. This is a problem for deb/rpm shipment for two
reasons. In rpm packaging at least, archful packages are inspected to
extract debuginfo; since there is no compiled output there, this fails
and the whole build fails. If the build succeeds (e.g. debuginfo is
disabled), then we are building the same thing for all architectures,
when there should be just one, noarch, for all.
I can list at least 3 examples of this:
- BANOVA: requires compilation, there is a src directory, nothing
happens there, no source files, just a Makefile sitting there.
- mixl: same, and the Makefile is just used to print if OpenMP is
supported (?).
- mathjaxr: same, and the Makefile is used to install a javascript
library (!).
I wouldn't think that should happen as configure is supposed to only
guide the compilation in src - if there is no src no binaries are expected
as the package did not provide any native sources hence there should be no
binary content. This looks like something that could be added to R CMD
check?
In that case maybe R should warn if it runs a package configure script
but there is no "src"? And check if NeedsCompilation: yes is set?
One way or another, what matters is that when R runs configure or make
during install, the value in the "Built" field in the binary package
should contain the platform value. This is also important when distros
ship R packages in deb or rpm format, to prevent packages that have
compiled code from getting "Architecture: all" and be installed on the
wrong platforms.
IMHO, the flag NeedsCompilation in the DESCRIPTION file should be the
one and only source of truth here, regardless of the presence or not
of a src directory. Then I see two paths here:
- Either the developer is responsible for setting this flag, and the R
CMD check should fail if it's yes but no compilation happens or the
other way around.
- Or R CMD build is responsible for setting this flag after checking
if compilation happens or not.
--
Hervé Pagès
Bioconductor Core Team
hpages.on.git...@gmail.com
[[alternative HTML version deleted]]
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Michael Dewey
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel