Skip to content

Commit

Permalink
Uses CXX17 if it can compile test program using timespec_get and TIME…
Browse files Browse the repository at this point in the history
…_UTC, otherwise by default uses CXX11. Fixes r-lib#115
  • Loading branch information
vtamara committed Jun 3, 2020
1 parent c20d9c4 commit acc0ac8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
40 changes: 38 additions & 2 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
echo "Running configure script"

# Find compiler
CC=$("${R_HOME}"/bin/R CMD config CC)
CC=`"${R_HOME}"/bin/R CMD config CC`

# Detect whether -latomic is needed during linking. This is needed on some
# platforms, notably ARM (Raspberry Pi).
Expand All @@ -21,8 +21,44 @@ else
fi


CXX=`"${R_HOME}"/bin/R CMD config CXX`
CXX11STD=`"${R_HOME}"/bin/R CMD config CXX11STD`
CXX11FLAGS=`"${R_HOME}"/bin/R CMD config CXX11FLAGS`
CXX_STD=CXX11
if [ "$CXX" != "" -a "$CXX11FLAGS" != "" -a "$CXX11STD" != "" ]; then
# Detect if it can use c++17
ptimespec='#include <cstdio>
#include <ctime>
// Example adapted from https://en.cppreference.com/w/cpp/chrono/c/timespec_get
namespace std {
int main()
{
timespec ts;
timespec_get(&ts, TIME_UTC);
char buf[100];
strftime(buf, sizeof buf, "%D %T", gmtime(&ts.tv_sec));
printf("Current time: %s.%09ld UTC", buf, ts.tv_nsec);
return 0;
}
}'
CXX17FLAGS=`"${R_HOME}"/bin/R CMD config CXX17FLAGS`
CXX17STD=`"${R_HOME}"/bin/R CMD config CXX17STD`
echo "$ptimespec" | ${CXX} -x c++ -c $CXX17FLAGS $CXX17STD - -o /dev/null > /dev/null 2>&1
if [ $? -eq 0 ]; then
# See https://github.com/r-lib/later/issues/115
echo "Using c++17."
CXX_STD=CXX17
else
echo "Cannot use c++17 using default configuration for c++11"
fi
fi


# Write to Makevars
sed -e "s|@extra_pkg_libs@|$EXTRA_PKG_LIBS|" src/Makevars.in > src/Makevars
sed -e "s|@extra_pkg_libs@|$EXTRA_PKG_LIBS|;s|@cxx_std@|$CXX_STD|" src/Makevars.in > src/Makevars

# Success
exit 0
3 changes: 1 addition & 2 deletions src/Makevars.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# Use C++11 if available
CXX_STD=CXX11
CXX_STD=@cxx_std@

PKG_CPPFLAGS = -pthread -DSTRICT_R_HEADERS
PKG_LIBS = -pthread @extra_pkg_libs@
Expand Down

0 comments on commit acc0ac8

Please sign in to comment.