Skip to content

Commit

Permalink
Uses CXX17 if it cannot find timespec_get or TIME_UTC with CXX11. Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
vtamara committed Jun 1, 2020
1 parent c20d9c4 commit eabcaec
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
43 changes: 42 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,50 @@ else
EXTRA_PKG_LIBS=-latomic
fi

CXX=$("${R_HOME}"/bin/R CMD config CXX)
CXX11FLAGS=$("${R_HOME}"/bin/R CMD config CXX11FLAGS)
if [ "$CXX" != "" -a "$CXX11FLAGS" != "" ]; then
# Detect whether if c++11 is enough
CXX11STD=$("${R_HOME}"/bin/R CMD config CXX11STD)
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;
}
}'
echo "$ptimespec" | ${CXX} -x c++ -c $CXX11FLAGS $CXX11STD - -o /dev/null > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "c++11 is enough."
CXX_STD=CXX11
else
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 "c++17 is required."
CXX_STD=CXX17
else
echo "Neither c++11 nor c++17 work"
CXX_STD=""
fi
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 eabcaec

Please sign in to comment.