[Rcpp-devel] Problem with abort function and compilation in Fedora-Linux

Juan Domingo Esteve Juan.Domingo at uv.es
Mon Oct 31 11:14:32 CET 2022


Dear all:

  Following my own post about problems with compilation flags in Fedora,
  after having consulted Iñaki Úcar, one of the maintaners of R in Fedora,
  he has said me that the solution of altering the base file of flags
  /usr/lib64/R/etc/Makeconf is not the right way for two reasons:

  - Fedora is quite strict with the policy of flags oriented to crash
  prevention and stringly recommends to use them
  - The file /usr/lib64/R/etc/Makeconf will get overwritten on every
  package update.

  Therefore, the rigth solution he recommends is:

  - Copy the file /usr/lib64/R/etc/Makeconf to any place under
    you $HOME folder with a significant name, let's say $HOME/.R/CRANchek.Makevars
    and alter it appropriately with/without the compilation flags you need.
  - Create a .Renviron file (or add this line to the current one):
    R_MAKEVARS_USER=~/.R/CRANcheck.Makevars

  If you want this to apply for all your R executions put .Renviron in your $HOME.
  Otherwise, it can be set up per project in the project directory
  (see https://community.rstudio.com/t/location-of-renviron-file/116139)

  Another thing he made me notice is that, even if you compile with
  non-CRAN complaint flags, the real CRAN check is done at the CRAN server,
  where those flags will NOT be used, so the only problem would be the annoying
  WARNING that appears in _your_ machine when you do the R CMD check --as-cran
  But for people doing this firs time, like me, this was still worrying since at
  first you really believe your package will not pass the check...

  Sorry for my mistake in the previous post.

    Juan

El 30/10/22 a las 12:26, Juan Domingo Esteve escribió:
> Dear all:
> 
>   Yesterday I posted a request for help due to a problem compiling my package
> which received inmediate response from Dirk to indicate that obviously the
> use of some Rcpp functions could not be the cause of including abort and printf
> in the compiled code. Fortunately, I have found the failure and its solution,
> which I post to be archived, just in case anyone may use it.
> 
> Keywords: compiler options, abort, package check, Fedora
> 
> Problem description:
> 
>   When compiling a package with C++ source code using Rcpp in a Linux system,
>   kernel 5.19.16-100, distribution Fedora 35, the generated package does not
>   pass the R CMD check test, giving two warnings and one note.
> 
>   The warnings are about the use of abort and printf functios from the
>   basic C library, which is not allowed since it would make R crash. Of course,
>   the code did not use any of this functions, neither it uses cout or cerr.
> 
>   Since the package compiled correctly in another machine, I compared the used
>   compilation flags and tried manual compilation getting rid of one of them each.
>   The offending flag was -Wp,-D_GLIBCXX_ASSERTION and, looking for it, I found
>   the note in the R documentation, part 'R Installation and Administration' which
>   says:
> 
>   "Additional compilation flags can be specified for added safety/security checks. For example Fedora adds
> 
> -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
> -Fexceptions -fstack-protector-strong -fasynchronous-unwind-tables
> -fstack-clash-protection -fcf-protection
> 
> to all the C, C++ and Fortran compiler flags (even though _GLIBCXX_ASSERTIONS is only for C++ in current GCC
> and glibc and none of these are documented for gfortran). Use of _GLIBCXX_ASSERTIONS will link abort and printf
> into almost all C++ code, and R CMD check --as-cran will warn."
> 
>   Moreover, the inclusion of flag -D_FORTIFY_SOURCE=2 provokes a warning in compilation (which
>   does not hurt the later check but it is annoying) and also this flag and the -Werror=format-security
>   rise a note in R CMD check saying:
>   Compilation used the following non-portable flag(s):
>       ‘-Werror=format-security’ ‘-Wp,-D_FORTIFY_SOURCE=2’
>       ‘-Wp,-D_GLIBCXX_ASSERTIONS’
> 
> Solution:
> 
>   Defaults compilation flags, at least in the Fedora default installation or R, are in file
> 
>   /usr/lib64/R/etc/Makeconf
> 
>   As root or with sudo, make a copy of this file (just in case you make a mistake or want to revert changes)
>   and edit it getting rid of the -Wp,-D_GLIBCXX_ASSERTION whenever it is used. You can also get
>   rid of -Werror=format-security and -Wp,-D_FORTIFY_SOURCE=2 if you want to avoid the note in check.
> 
> I hope this may be useful to anyone else.
> 
>   Juan
> 

-- 
________________________________________________________________
Juan Domingo Esteve
Dept. of Informatics, School of Engineering
University of Valencia
Avda. de la Universidad, s/n.
         46100-Burjasot (Valencia)
            SPAIN

Telephone:      +34-963543572
Fax:            +34-963543550
email:  Juan.Domingo at uv.es
________________________________________________________________


More information about the Rcpp-devel mailing list