diff --git a/configure b/configure new file mode 100755 index 0000000..7d4d75c --- /dev/null +++ b/configure @@ -0,0 +1,52 @@ +#!/bin/sh + +: "${R_HOME:=$(R RHOME)}" +R="${R_HOME}/bin/R" + +CXX=$("${R}" CMD config CXX20) +CXXSTD=$("${R}" CMD config CXX20STD) +CXXFLAGS=$("${R}" CMD config CXX20FLAGS) + +if test -z "${CXX}"; then + CXX=$("${R}" CMD config CXX) + CXXSTD=$("${R}" CMD config CXXSTD) + CXXFLAGS=$("${R}" CMD config CXXFLAGS) +fi + +CPPFLAGS=$("${R}" CMD config CPPFLAGS) +LDFLAGS=$("${R}" CMD config LDFLAGS) + +cat > conftest.cpp <<'EOF' +#include +#include + +struct State { + std::size_t pos; + std::size_t end; +}; + +int main() { + std::atomic state; + State old_state{0, 0}; + State new_state{1, 1}; + state.compare_exchange_weak(old_state, new_state); + return 0; +} +EOF + +try_link() { + ${CXX} ${CXXSTD} ${CPPFLAGS} ${CXXFLAGS} conftest.cpp ${LDFLAGS} "$1" -o conftest >/dev/null 2>&1 +} + +LIBATOMIC= +if try_link ""; then + : +elif try_link "-latomic"; then + LIBATOMIC=" -latomic" +else + echo "configure: WARNING: could not link C++ atomic compare/exchange test" >&2 +fi + +rm -rf conftest conftest.cpp conftest.dSYM + +sed "s|@LIBATOMIC@|${LIBATOMIC}|g" src/Makevars.in > src/Makevars diff --git a/src/Makevars.in b/src/Makevars.in new file mode 100644 index 0000000..e72dcdb --- /dev/null +++ b/src/Makevars.in @@ -0,0 +1,2 @@ +PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) +PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS)@LIBATOMIC@