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