From 43ac4265b2f9188ec11d1e1e2a6d5ee8038ef6f1 Mon Sep 17 00:00:00 2001 From: Sergio Marques Date: Mon, 21 Mar 2016 16:49:42 +0000 Subject: [PATCH 1/2] Add support for Alpine linux by checking for GLIBC flag --- src/api.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/api.cpp b/src/api.cpp index 8d367ce9b..9fe22d28c 100644 --- a/src/api.cpp +++ b/src/api.cpp @@ -37,18 +37,22 @@ using namespace Rcpp; #if defined(_WIN32) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__sun) || defined(_AIX) // do nothing #else - #include - - static std::string demangler_one(const char* input) { - static std::string buffer; - buffer = input; - buffer.resize(buffer.find_last_of('+') - 1); - buffer.erase( - buffer.begin(), - buffer.begin() + buffer.find_last_of(' ') + 1 - ); - return demangle(buffer); - } + #ifndef __GLIBC__ + // do nothing + #else + #include + + static std::string demangler_one(const char* input) { + static std::string buffer; + buffer = input; + buffer.resize(buffer.find_last_of('+') - 1); + buffer.erase( + buffer.begin(), + buffer.begin() + buffer.find_last_of(' ') + 1 + ); + return demangle(buffer); + } + #endif #endif #endif From fbb3e09d50042a3db436720da51387122677b4dd Mon Sep 17 00:00:00 2001 From: Sergio Marques Date: Wed, 23 Mar 2016 12:06:11 +0000 Subject: [PATCH 2/2] Add custom __MUSL__ flag to detect musl based distributions --- src/api.cpp | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/api.cpp b/src/api.cpp index 9fe22d28c..12a0a781d 100644 --- a/src/api.cpp +++ b/src/api.cpp @@ -34,26 +34,21 @@ using namespace Rcpp; #endif #if defined(__GNUC__) - #if defined(_WIN32) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__sun) || defined(_AIX) + #if defined(_WIN32) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__sun) || defined(_AIX) || defined(__MUSL__) // do nothing #else - #ifndef __GLIBC__ - // do nothing - #else - #include - - static std::string demangler_one(const char* input) { - static std::string buffer; - buffer = input; - buffer.resize(buffer.find_last_of('+') - 1); - buffer.erase( - buffer.begin(), - buffer.begin() + buffer.find_last_of(' ') + 1 - ); - return demangle(buffer); - } - #endif - + #include + + static std::string demangler_one(const char* input) { + static std::string buffer; + buffer = input; + buffer.resize(buffer.find_last_of('+') - 1); + buffer.erase( + buffer.begin(), + buffer.begin() + buffer.find_last_of(' ') + 1 + ); + return demangle(buffer); + } #endif #endif @@ -261,7 +256,7 @@ SEXP rcpp_can_use_cxx11() { // [[Rcpp::register]] SEXP stack_trace(const char* file, int line) { #if defined(__GNUC__) - #if defined(_WIN32) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__sun) || defined(_AIX) + #if defined(_WIN32) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__CYGWIN__) || defined(__sun) || defined(_AIX) || defined(__MUSL__) // Simpler version for Windows and *BSD List trace = List::create(_["file"] = file, _[ "line" ] = line,