On 16/11/2015 7:07 AM, Marvin Wright wrote:
Dear all,

I would like to check for C++11 support in a package. The package requires gcc >= 
4.7 or clang >= 3.0. Windows is handled differently in Makevars.win. I tried two 
approaches in Makevars so far, but both give warnings in CRAN checks.

Approach 1:
## Check for gcc >= 4.7
ifeq ($(shell basename $(CC)),gcc)
GCC_VER := $(shell gcc -dumpversion)
GCC_MAJOR := $(shell gcc -dumpversion | cut -f1-2 -d.)

GCC_OK := $(shell echo $(GCC_MAJOR) \>= 4.7 | bc )
ifneq ($(GCC_OK),1)
   $(error Error: gcc >= 4.7 required, version $(GCC_VER) installed. Please 
update gcc.)
endif
endif

Works quite well but a warning in check —as-cran:
Found the following file(s) containing GNU extensions:
src/Makevars
Portable Makefiles do not use GNU extensions such as +=, :=, $(shell),
$(wildcard), ifeq ... endif. See section ‘Writing portable packages’ in
the ‘Writing R Extensions’ manual.


Approach 2:
Use std=c++11 flag instead of CXX_STD = CXX11, which should work on gcc >=4.7 
and throw an error on earlier versions.

This time in check —as-cran:
Non-portable flags in variable 'PKG_CPPFLAGS':
-std=c++11

Any other ideas how to check? Or is one of the versions above OK on CRAN?

A better approach may be to check for features rather than versions by just using them. Put in tests that fail if the features you need are not there, and put something like "C++11" into your DESCRIPTION file SystemRequirements field to tell people why they're failing (as well as comments in the source).

Duncan Murdoch

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to