[R-pkg-devel] How to update "SystemRequirements: C++11"?

Vincent Dorie vdor|e @end|ng |rom gm@||@com
Tue Feb 7 00:42:57 CET 2023


This might be helpful. Using autoconf and ax_cxx_compile_stdcxx (
https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html)
in package_root/tools/m4:

configure.ac
------------
AC_PREREQ(2.64)
AC_INIT(yourpackagename, 1.0, your using email.com)
AC_CONFIG_SRCDIR([src/main.cpp])
AC_CONFIG_AUX_DIR([tools/build-aux])
AC_CONFIG_FILES([src/Makevars])

m4_include([tools/m4/ax_cxx_compile_stdcxx.m4])

AX_CXX_COMPILE_STDCXX([11], [], [mandatory])
AX_CXX_COMPILE_STDCXX([14], [], [optional])
AX_CXX_COMPILE_STDCXX([17], [], [optional])

MAX_SUPPORTED_CXX_VERSION=CXX11
if test -z "$HAVECXX14"; then
  MAX_SUPPORTED_CXX_VERSION=CXX14
  if test -z "$HAVECXX17"; then
    MAX_SUPPORTED_CXX_VERSION=CXX17
  fi
fi

AC_SUBST(MAX_SUPPORTED_CXX_VERSION)

AC_OUTPUT

Makevars.in
-----------
CXX_STD = @MAX_SUPPORTED_CXX_VERSION@
# usual make stuff

DESCRIPTION
-----------
# usual description stuff
SystemRequirements: C++11
# add authors of compiler macro to authors field


On Mon, Feb 6, 2023 at 6:10 PM Avraham Adler <avraham.adler using gmail.com>
wrote:

> "If a package does have a src/Makevars[.win] file then also setting
> the make variable ‘CXX_STD’ there is recommended,"
>
> Avi
>
> On Mon, Feb 6, 2023 at 10:58 PM Iñaki Ucar <iucar using fedoraproject.org>
> wrote:
> >
> > On Mon, 6 Feb 2023 at 23:27, Avraham Adler <avraham.adler using gmail.com>
> wrote:
> > >
> > > On Mon, Feb 6, 2023 at 9:46 PM Duncan Murdoch <
> murdoch.duncan using gmail.com> wrote:
> > > >
> > > > On 06/02/2023 4:01 p.m., Duncan Murdoch wrote:
> > > > > On 06/02/2023 3:46 p.m., Winston Chang wrote:
> > > > >> I recently submitted a package to CRAN with "SystemRequirements:
> C++11".
> > > > >> This raises the following NOTE on R-devel, and I was asked to fix
> and
> > > > >> resubmit:
> > > > >>
> > > > >> * checking C++ specification ... NOTE
> > > > >>     Specified C++11: please update to current default of C++17
> > > > >>
> > > > >> If I understand correctly, I have two options, neither of which
> will work:
> > > > >> 1. Remove "SystemRequirements: C++11" entirely. The problem with
> this is
> > > > >> that on systems with older versions of R (3.6 and below, I
> believe), it may
> > > > >> try to compile the package with an older C++ standard, which will
> fail.
> > > > >> 2. Update it to "SystemRequirements: C++17". The problem here is
> that on
> > > > >> systems that don't have a C++17 compiler, the package won't build
> -- even
> > > > >> though the package only actually requires a C++11 compiler.
> > > > >>
> > > > >> How should I deal with this?
> > > > >
> > > > > Are you allowed to say "C++11 or C++17"?
> > > >
> > > > Actually I can partially answer this:  the test is not based on
> > > > SystemRequirements, but on the log of the build, which now contains
> > > > lines like this:
> > > >
> > > >    using C compiler: ‘Apple clang version 12.0.0
> (clang-1200.0.32.28)’
> > > >    using C++ compiler: ‘Apple clang version 12.0.0
> (clang-1200.0.32.28)’
> > > >    using C++11
> > > >    using SDK: ‘MacOSX11.1.sdk’
> > > >
> > > > I get "using C++11" because of this line in Makevars:
> > > >
> > > >    CXX_STD = CXX11
> > > >
> > > > So I guess the answer is to change your Makevars to make that line
> > > > conditional on running under an old version of R.  If you figure out
> how
> > > > to do that, could you post the recipe here?
> > >
> > > I believe this is closely related to this email [1]. Dirk and I and
> > > Aymeric have been going through the same issue with nloptr as well.
> > > Our current opinion is to leave it out, as it would restrict more
> > > users to demand C++17, which is unneeded, than to have users with over
> > > a decade old compiler which does not have C++11. Dirk and Aymeric,
> > > please chime in if I have misstated. Regardless, according to
> > > Professor Ripley, if you require specific features, you should mark
> > > them in _both_ Makevars and SystemRequirements, which is implied in
> > > the "r-devel" version of WRE which adds the words "also" in section
> > > 1.2.4.
> >
> > Could you please point to the specific passage? According to [1],
> > section 1.2.4, declaring the C++ standard in SystemRequirements is
> > only mandatory for C++17 or later.
> >
> > [1]
> https://cran.r-project.org/doc/manuals/r-devel/R-exts.html#Using-C_002b_002b-code
> >
> > --
> > Iñaki Úcar
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list