From mtmorgan at fhcrc.org  Sun Mar 30 21:50:22 2014
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Sun, 30 Mar 2014 12:50:22 -0700
Subject: [Rd] CXX_STD and configure.ac in packages
Message-ID: <5338757E.60305@fhcrc.org>

In C++ code for use in a R-3.1.0 package, my specific problem is that I would 
like to use <unordered_map> if it is available, or <tr1/unordered_map> if not, 
or <map> if all else fails.

I (think I) can accomplish this with configure.ac as

AC_INIT("DESCRIPTION")

CXX=`"${R_HOME}/bin/R" CMD config CXX`
CXXFLAGS=`"${R_HOME}/bin/R" CMD config CXXFLAGS`

AC_CONFIG_HEADERS([src/config.h])
AC_LANG(C++)
AC_CHECK_HEADERS([unordered_map tr1/unordered_map])
AC_OUTPUT

Use of configure.ac does not seem to be entirely consistent with section 1.2.4 
of Writing R Extensions, where one is advised that to use C++(11? see below) 
code one should

     CXX_STD = CXX11

in Makevars(.win). My code does not require a compiler that supports the full 
C++11 feature set. In addition, I do not understand the logic of setting a 
variable that influences compiler flags in Makevars -- configure.ac will see a 
compiler with inaccurate flags.

Is use of configure.ac orthogonal to setting CXX_STD=CXX11?

Some minor typos:

/R-3-1-branch$ svn diff
Index: doc/manual/R-exts.texi
===================================================================
--- doc/manual/R-exts.texi	(revision 65339)
+++ doc/manual/R-exts.texi	(working copy)
@@ -2250,7 +2250,7 @@
  @subsection Using C++11 code

  @R{} can be built without a C++ compiler although one is available
-(but not necessarily installed) or all known @R{} platforms.
+(but not necessarily installed) on all known @R{} platforms.
  For full portability across platforms, all
  that can be assumed is approximate support for the C++98 standard (the
  widely used @command{g++} deviates considerably from the standard).
@@ -2272,7 +2272,7 @@
  support a flag @option{-std=c++0x}, but the latter only provides partial
  support for the C++11 standard.

-In order to use C++ code in a package, the package's @file{Makevars}
+In order to use C++11 code in a package, the package's @file{Makevars}
  file (or @file{Makevars.win} on Windows) should include the line

  @example
@@ -2329,7 +2329,7 @@
  anything other than the GNU version of C++98 and GNU extensions (which
  include TR1).  The default compiler on Windows is GCC 4.6.x and supports
  the @option{-std=c++0x} flag and some C++11 features (see
- at uref{http://gcc.gnu.org/gcc-4.6/cxx0x_status.html}.  On these
+ at uref{http://gcc.gnu.org/gcc-4.6/cxx0x_status.html}).  On these
  platforms, it is necessary to select a different compiler for C++11, as
  described above, @emph{via} personal @file{Makevars} files.  For
  example, on OS X 10.7 or later one could select @command{clang++}.

-- 
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793



[Rd] CXX_STD and configure.ac in packages
Martin Morgan