#! /bin/sh : ${R_SRC_DIR=~/src/R} args="--cache-file=config.cache \ --enable-R-shlib --enable-memory-profiling \ DEFS='-DUSE_TYPE_CHECKING_STRICT -D_FORTIFY_SOURCE=3' LIBnn=lib" ## DEFS='-DUSE_TYPE_CHECKING_STRICT' LIBnn=lib" ## --with-valgrind-instrumentation=1 ## Compilers to use. ## Use configure defaults (gcc/g++/gfortran). compilers= flavor="-fg" extra=false blas= ## --with-blas=no is the current default ... ## blas="--with-blas=no" ## ## If needed, the flavors could set their own user Makevars file via the ## environment variable R_MAKEVARS_USER. ## while test -n "${1}"; do case "${1}" in -r) R_SRC_DIR=~/src/apps/R/r-release/R ;; -p) R_SRC_DIR=~/src/apps/R/r-patched/R ;; -d) R_SRC_DIR=~/src/apps/R/r-devel/R ;; -s) R_SRC_DIR="${2}" shift ;; -m) args="${args} --enable-maintainer-mode" ;; -x) extra=true ;; -bo) blas="--with-blas=-lopenblas --with-lapack=no" ;; -ba) blas="--with-blas='-lcblas -lf77blas -latlas' --with-lapack=no" ;; -bm) blas="--with-blas='-lmkl_gf_lp64 -lmkl_core -lmkl_sequential' --with-lapack" ;; -bi) blas="--with-blas=no --with-lapack=no" ;; -b) blas="--with-blas=yes --with-lapack=yes" ;; -v) args="${args} --with-valgrind-instrumentation=2 --with-system-valgrind-headers" ;; -f*) flavor="${1}" ;; *) args="${args} ${1}" ;; esac shift done ## ## libdeflate ## Use new --with-libdeflate-compression=yes for r-devel: currently not ## done by default. ## ## Drop when we switch the default to yes. ## case "${R_SRC_DIR}" in ## */src/apps/R/r-devel/R) ## args="${args} --with-libdeflate-compression=yes" ;; ## esac ## ## ## One can use the undocumented R configure variable CXXSTD to specify ## the C++ standard for the *default* C++ compiler (and use CXX23STD etc ## for the specific ones if necessary). ## We provide CC_STD for specifying the C standard. args="${args} ${blas}" case "${flavor}" in -fg*) ## flavor: gcc ## ## When primarily using clang for testing, configure with ## --disable-long-double so that we can emulate hardware with no ## excess fp precision results: ## args="${args} --disable-long-double" ## v=`expr "${flavor}" : ".*/\\(.*\\)"` gcc_series_is_snap=false case "${v}" in snap) gcc_series_is_snap=true ;; esac PREFIX= SUFFIX= if test "${gcc_series_is_snap}" = "true"; then PREFIX="/usr/lib/gcc-snapshot/bin/" elif test -n "${v}"; then SUFFIX="-${v}" fi ## C and C++ standards: ## See . ## As of 2024-11 defaults are as follows: ## * if no C language dialect options are given: -std=gnu17 ## * if no C++ language dialect options are given, -std=gnu++17 ## See also : ## * C++17 features are available since GCC 5. This mode is the ## default in GCC 11. ## * C++14 is the default in GCC 6.1 up until GCC 10 (including); ## it can be explicitly selected with the -std=c++14 command-line ## flag, or -std=gnu++14 to enable GNU extensions as well. ## * C++98 is the default in GCC versions prior to 6.1; ## it can be explicitly selected with the -std=c++98 command-line ## flag, or -std=gnu++98 to enable GNU extensions as well. if test "${extra}" = "true"; then CC_EXTRA="-fsanitize=address,undefined -fno-omit-frame-pointer" CXX_EXTRA="-fsanitize=address,undefined,bounds-strict -fno-omit-frame-pointer" FC_EXTRA="-fsanitize=address" ## As of 2015-09-07, compilation with ASAN/UBSAN fails on the ## #pragma omp parallel in /src/library/stats/src/distance.c: ## Hence, disable OpenMP for the time being. args="${args} --disable-openmp" else CC_EXTRA= CXX_EXTRA= FC_EXTRA= fi CC="${PREFIX}gcc${SUFFIX}" test -n "${CC_STD}" && CC="${CC} ${CC_STD}" test -n "${CC_EXTRA}" && CC="${CC} ${CC_EXTRA}" CXX="${PREFIX}g++${SUFFIX}" test -n "${CXX_EXTRA}" && CXX="${CXX} ${CXX_EXTRA}" FC="${PREFIX}gfortran${SUFFIX}" test -n "${FC_EXTRA}" && FC="${FC} ${FC_EXTRA}" OBJC="${PREFIX}gcc${SUFFIX}" OBJCXX="${PREFIX}gcc${SUFFIX}" compilers="CC=\"${CC}\" CXX=\"${CXX}\" OBJC=${OBJC} OBJCXX=${OBJCXX} FC=\"${FC}\" F77=\"${FC}\"" if test "${gcc_series_is_snap}" = "true"; then compilers="${compilers} LDFLAGS=-L/usr/lib/gcc-snapshot/lib" ## compilers="${compilers} LDFLAGS=-Wl,-rpath,/usr/lib/gcc-snapshot/lib" fi if test "${extra}" = "true"; then compilers="${compilers} MAIN_LDFLAGS=\"-fsanitize=address,undefined\"" fi ;; -fc*) ## flavor: clang ## Using '-stdlib=libc++' does not always work for packages linking ## against system libraries built against -lstdc++ (e.g., JAGS). ## ## As of 2024-01, Debian testing with the LLVM 17 compilers has OMP ## runtime problems, eventually giving errors like ## OMP: Error #13: Assertion failure at kmp_runtime.cpp(6891). ## So for the time being, disable OpenMP. args="${args} --disable-openmp" ## vc=`expr "${flavor}" : "[^/]*/\\([^/]*\\)\\(/.*\\)\\?"` vg=`expr "${flavor}" : "[^/]*/[^/]*/\\(.*\\)"` test -n "${vc}" && vc="-${vc}" test -n "${vg}" && vg="-${vg}" if test "${extra}" = "true"; then CC_EXTRA="-fsanitize=address,undefined -fno-sanitize=float-divide-by-zero -fno-sanitize=alignment -fno-omit-frame-pointer" CXX_EXTRA="-fsanitize=address,undefined -fno-sanitize=float-divide-by-zero -fno-sanitize=alignment -fno-omit-frame-pointer -frtti" else CC_EXTRA= CXX_EXTRA= fi CC="clang${vc}" test -n "${CC_STD}" && CC="${CC} ${CC_STD}" test -n "${CC_EXTRA}" && CC="${CC} ${CC_EXTRA}" CXX="clang++${vc}" test -n "${CXX_STDLIB}" && CXX="${CXX} -stdlib=${CXX_STDLIB}" test -n "${CXX_EXTRA}" && CXX="${CXX} ${CXX_EXTRA}" ## ## As of 2014-09-10, we had ## Clang can compile Objective-C and Objective-C++, but needs a ## runtime and the corresponding headers (e.g., 'objc/Object.h'): ## on Debian/Ubuntu, the latter are currently only available in ## the respective GCC version-specific header directories (e.g., ## '/usr/lib/gcc/x86_64-linux-gnu/4.9/include'), and hence not ## really usable for Clang. ## One could try using the GNUstep Objective-C runtime and headers ## (libobjc2 available from http://download.gna.org/gnustep/) but ## this is not available for Debian/Ubuntu. ## Hence, use GCC for Objective-C and Objective-C++. ## What a nuisance ... ## As of 2023-11, apparently clang can be configured ok to use as ## the Objective C compiler. Objective C++ works for neither gcc ## nor clang as configure fails to find the Foundation/Foundation.h ## header ... ## OBJC="clang${vc}" OBJCXX="clang${vc}" compilers="CC=\"${CC}\" CXX=\"${CXX}\" OBJC=${OBJC} OBJCXX=${OBJCXX}" if test "${extra}" = "true"; then compilers="${compilers} MAIN_LD=\"clang++${vc} -fsanitize=undefined,address\"" fi ## Note that the LLVM Fortran front does not work for versions below ## 17. if test -n "${vc}" && test -z "${vg}"; then FC="flang-new${vc}" else FC="gfortran${vg}" fi compilers="${compilers} FC=${FC} F77=${FC}" ;; esac eval ${R_SRC_DIR}/configure ${args} ${compilers}