[Bug 258887] math/R: fails to build with clang/openmp 13 due to old mgcv

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 03 Oct 2021 11:27:21 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258887

            Bug ID: 258887
           Summary: math/R: fails to build with clang/openmp 13 due to old
                    mgcv
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: Individual Port(s)
          Assignee: jrm@freebsd.org
          Reporter: dim@FreeBSD.org
          Assignee: jrm@freebsd.org
             Flags: maintainer-feedback?(jrm@freebsd.org)

During an exp-run for llvm 13 (see bug 258209), it turned out that math/R fails
to build with clang 13
(http://gohan04.nyi.freebsd.org/data/mainamd64PR258209-default/2021-09-30_06h20m28s/logs/errors/R-4.1.1_1.log):

begin installing recommended package mgcv
* installing *source* package ‘mgcv’ ...
** package ‘mgcv’ successfully unpacked and MD5 sums checked
** using non-staged installation
** libs
gmake[4]: Entering directory '/tmp/RtmpJN7T4d/R.INSTALLb1494371d851/mgcv/src'
cc -I"/wrkdirs/usr/ports/math/R/work/R-4.1.1/include" -DNDEBUG  
-DLIBICONV_PLUG -I/usr/local/include -isystem /usr/local/include  -fopenmp
-fpic  -O2 -pipe  -DLIBICONV_PLUG -fstack-protector-strong -isystem
/usr/local/include -fno-strict-aliasing   -c coxph.c -o coxph.o
cc -I"/wrkdirs/usr/ports/math/R/work/R-4.1.1/include" -DNDEBUG  
-DLIBICONV_PLUG -I/usr/local/include -isystem /usr/local/include  -fopenmp
-fpic  -O2 -pipe  -DLIBICONV_PLUG -fstack-protector-strong -isystem
/usr/local/include -fno-strict-aliasing   -c davies.c -o davies.o
cc -I"/wrkdirs/usr/ports/math/R/work/R-4.1.1/include" -DNDEBUG  
-DLIBICONV_PLUG -I/usr/local/include -isystem /usr/local/include  -fopenmp
-fpic  -O2 -pipe  -DLIBICONV_PLUG -fstack-protector-strong -isystem
/usr/local/include -fno-strict-aliasing   -c discrete.c -o discrete.o
In file included from discrete.c:28:
/usr/include/omp.h:484:39: error: expected 'match' clause on 'omp declare
variant' directive
    #pragma omp begin declare variant match(device={kind(host)})
                                      ^
/wrkdirs/usr/ports/math/R/work/R-4.1.1/include/Rinternals.h:1640:17: note:
expanded from macro 'match'
#define match                   Rf_match
                                ^
In file included from discrete.c:28:
/usr/include/omp.h:487:39: error: expected 'match' clause on 'omp declare
variant' directive
    #pragma omp begin declare variant match(device={kind(nohost)})
                                      ^
/wrkdirs/usr/ports/math/R/work/R-4.1.1/include/Rinternals.h:1640:17: note:
expanded from macro 'match'
#define match                   Rf_match
                                ^
2 errors generated.

What happens here is that the mgcv package includes <omp.h> *after* including
<R.h>, which causes the conflict between the "#define match" and the openm
pragma line which uses match().

This problem was fixed in mgcv 1.8-37
(https://cran.r-project.org/web/packages/mgcv/ChangeLog) with the small
mention:

> 1.8-37
> 
> * minor update for clang compatibility.

basically, in most of the .c files, "#include <omp.h>" was moved before
"#include <R.h>".

Locally, I was able to 'fix' it by replacing
/wrkdirs/usr/ports/math/R/work/R-4.1.1/src/library/Recommended/mgcv.tgz with a
copy of https://cran.r-project.org/src/contrib/mgcv_1.8-37.tar.gz, but I am
unsure how this can be done more correctly for the math/R port.

Maybe the mgcv_1.8-37.tar.gz file can be added as an additional distfile, and
added to the port Makefile, somehow? Any ideas are welcome.

-- 
You are receiving this mail because:
You are the assignee for the bug.