1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
# Figure out the appropriate CXX prefix for the current
# version of R + configuration.
cxx <- NULL
candidates <- c("CXX11", "CXX1X", "CXX")
for (candidate in candidates) {
value <- r_cmd_config(candidate)
if (!is.null(value)) {
cxx <- candidate
break
}
}
# work around issue with '-Werror=format-security' being specified without
# a prior '-Wformat', which makes gcc angry
cxxflags <- read_r_config(sprintf("%sFLAGS", cxx), envir = NULL)[[1]]
broken <-
grepl(" -Werror=format-security ", cxxflags) &&
!grepl(" -Wformat ", cxxflags)
if (broken)
cxxflags <- gsub("-Werror=format-security", "-Wformat -Werror=format-security", cxxflags)
# avoid including /usr/local/include, as this can cause
# RcppParallel to find and use a version of libtbb installed
# there as opposed to the bundled version
cppflags <- read_r_config("CPPFLAGS", envir = NULL)[[1]]
cppflags <- sub("(?: )?-I/usr/local/include", "", cppflags)
# define the set of flags appropriate to the current
# configuration of R
switch(
cxx,
CXX11 = define(
CC = "$(CC)",
CPPFLAGS = cppflags,
CXX11 = "$(CXX11)",
CXX11FLAGS = cxxflags,
CXX11STD = "$(CXX11STD)",
CXX11PICFLAGS = "$(CXX11PICFLAGS)"
),
CXX1X = define(
CC = "$(CC)",
CPPFLAGS = cppflags,
CXX11 = "$(CXX1X)",
CXX11FLAGS = cxxflags,
CXX11STD = "$(CXX1XSTD)",
CXX11PICFLAGS = "$(CXX1XPICFLAGS)"
),
CXX = define(
CC = "$(CC)",
CPPFLAGS = cppflags,
CXX11 = "$(CXX)",
CXX11FLAGS = cxxflags,
CXX11STD = "-std=c++0x",
CXX11PICFLAGS = "-fPIC"
),
stop("Failed to infer C / C++ compilation flags")
)
# define special flags for Windows
db <- configure_database()
if (Sys.info()[["sysname"]] == "Windows") {
cygpath <- nzchar(Sys.which("cygpath"))
fmt <- if (cygpath) "$(shell cygpath -m \"%s\")" else "%s"
define(
WINDOWS_CC = sprintf(fmt, db$CC),
WINDOWS_CXX11 = sprintf(fmt, db$CXX11)
)
}
# use c++0x for compatibility with older compilers
define(STDVER = "c++0x")
|