| ## config -- Simple shell script to get the values of basic R configure |
| ## variables, or the header and library flags necessary for linking |
| ## against R. |
| ## |
| ## Usage: |
| ## R CMD config [options] [VAR] |
| |
| ## Copyright (C) 2002-2019 The R Core Team |
| ## |
| ## This document is free software; you can redistribute it and/or modify |
| ## it under the terms of the GNU General Public License as published by |
| ## the Free Software Foundation; either version 2, or (at your option) |
| ## any later version. |
| ## |
| ## This program is distributed in the hope that it will be useful, but |
| ## WITHOUT ANY WARRANTY; without even the implied warranty of |
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| ## General Public License for more details. |
| ## |
| ## A copy of the GNU General Public License is available at |
| ## https://www.R-project.org/Licenses/ |
| |
| revision='$Revision$' |
| version=`set - ${revision}; echo ${2}` |
| version="R configuration information retrieval script: ${R_VERSION} (r${version}) |
| |
| Copyright (C) 2002-2019 The R Core Team. |
| This is free software; see the GNU General Public License version 2 |
| or later for copying conditions. There is NO warranty." |
| |
| usage="Usage: R CMD config [options] [VAR] |
| |
| Get the value of a basic R configure variable VAR which must be among |
| those listed in the 'Variables' section below, or the header and |
| library flags necessary for linking against R. |
| |
| Options: |
| -h, --help print short help message and exit |
| -v, --version print version info and exit |
| --cppflags print pre-processor flags required to compile |
| a C/C++ file using R as a library |
| --ldflags print linker flags needed for linking a front-end |
| against the R library |
| --no-user-files ignore customization files under ~/.R |
| --no-site-files ignore site customization files under R_HOME/etc |
| --all print names and values of all variables below |
| |
| Variables: |
| AR command to make static libraries |
| BLAS_LIBS flags needed for linking against external BLAS libraries |
| CC C compiler command |
| CFLAGS C compiler flags |
| CPICFLAGS special flags for compiling C code to be included in a |
| shared library |
| CPP C preprocessor (deprecated, may not be set) |
| CPPFLAGS C/C++ preprocessor flags, e.g. -I<dir> if you have |
| headers in a nonstandard directory <dir> |
| CXX default compiler command for C++ code |
| CXXCPP C++ preprocessor (deprecated) |
| CXXFLAGS compiler flags for CXX |
| CXXPICFLAGS special flags for compiling C++ code to be included in a |
| shared library |
| CXX98 compiler command for C++98 code (deprecated) |
| CXX98CPP C++98 preprocessor |
| CXX98FLAGS compiler flags for CXX98 |
| CXX98PICFLAGS special flags for compiling C++98 code to be included in a |
| shared library |
| CXX11 compiler command for C++11 code |
| CXX11STD flag used with CXX11 to enable C++11 support |
| CXX11FLAGS further compiler flags for CXX11 |
| CXX11PICFLAGS |
| special flags for compiling C++11 code to be included in |
| a shared library |
| CXX14 compiler command for C++14 code |
| CXX14STD flag used with CXX14 to enable C++14 support |
| CXX14FLAGS further compiler flags for CXX14 |
| CXX14PICFLAGS |
| special flags for compiling C++14 code to be included in |
| a shared library |
| CXX17 compiler command for C++17 code |
| CXX17STD flag used with CXX17 to enable C++17 support |
| CXX17FLAGS further compiler flags for CXX17 |
| CXX17PICFLAGS |
| special flags for compiling C++17 code to be included in |
| a shared library |
| DYLIB_EXT file extension (including '.') for dynamic libraries |
| DYLIB_LD command for linking dynamic libraries which contain |
| object files from a C or Fortran compiler only |
| DYLIB_LDFLAGS |
| special flags used by DYLIB_LD |
| FC Fortran compiler command |
| F77 Fortran compiler command (deprecated: use FC) |
| FFLAGS fixed-form Fortran compiler flags |
| FCFLAGS free-form Fortran 9x compiler flags |
| FLIBS linker flags needed to link Fortran code |
| FPICFLAGS special flags for compiling Fortran code to be turned |
| into a shared library |
| JAR Java archive tool command |
| JAVA Java interpreter command |
| JAVAC Java compiler command |
| JAVAH Java header and stub generator command |
| JAVA_HOME path to the home of Java distribution |
| JAVA_LIBS flags needed for linking against Java libraries |
| JAVA_CPPFLAGS C preprocessor flags needed for compiling JNI programs |
| LAPACK_LIBS flags needed for linking against external LAPACK libraries |
| LIBnn location for libraries, e.g. 'lib' or 'lib64' on this platform |
| LDFLAGS linker flags, e.g. -L<dir> if you have libraries in a |
| nonstandard directory <dir> |
| MAKE Make command |
| OBJC Objective C compiler command |
| OBJCFLAGS Objective C compiler flags |
| RANLIB command to index static libraries |
| SAFE_FFLAGS Safe (as conformant as possible) Fortran compiler flags |
| SHLIB_CFLAGS additional CFLAGS used when building shared objects |
| SHLIB_CXXFLAGS |
| additional CXXFLAGS used when building shared objects |
| SHLIB_CXXLD command for linking shared objects which contain |
| object files from a C++ compiler (and CXX98 CXX11 CXX14 CXX17) |
| SHLIB_CXXLDFLAGS |
| special flags used by SHLIB_CXXLD (and CXX98 CXX11 CXX14 CXX17) |
| SHLIB_EXT file extension (including '.') for shared objects |
| SHLIB_FFLAGS additional FFLAGS used when building shared objects |
| SHLIB_LD command for linking shared objects which contain |
| object files from a C or Fortran compiler only |
| SHLIB_LDFLAGS |
| special flags used by SHLIB_LD |
| TCLTK_CPPFLAGS |
| flags needed for finding the tcl.h and tk.h headers |
| TCLTK_LIBS flags needed for linking against the Tcl and Tk libraries |
| " |
| |
| if test "${R_OSTYPE}" = "windows"; then |
| usage="${usage} |
| Windows only: |
| COMPILED_BY name and version of compiler used to build R |
| LOCAL_SOFT absolute path to '/usr/local' software collection |
| OBJDUMP command to dump objects" |
| fi |
| |
| usage="${usage} |
| |
| Report bugs at <https://bugs.R-project.org>." |
| |
| ## <NOTE> |
| ## The variables are basically the precious configure variables (with |
| ## the R_* and MAIN_* ones removed), plus FLIBS and BLAS_LIBS. |
| ## One could use |
| ## precious_configure_vars=`~/src/R/configure --help \ |
| ## | sed -n '/^Some influential/,/^[^ ]/p' \ |
| ## | sed '/^[^ ]/d' \ |
| ## | sed 's/^ //' \ |
| ## | cut -f1 -d ' ' \ |
| ## | grep -v '^MAIN_' \ |
| ## | grep -v '^R_' \ |
| ## | sort \ |
| ## | uniq` |
| ## to obtain the configure vars and hence create most of the above usage |
| ## info as well as the list of accepted variables below automatically. |
| ## </NOTE> |
| |
| if test $# = 0; then |
| echo "${usage}" |
| exit 1 |
| fi |
| |
| if test "${R_OSTYPE}" = "windows"; then |
| MAKE=make |
| R_DOC_DIR=${R_HOME}/doc |
| R_INCLUDE_DIR=${R_HOME}/include |
| R_SHARE_DIR=${R_HOME}/share |
| fi |
| |
| makefiles="-f ${R_HOME}/etc${R_ARCH}/Makeconf -f ${R_SHARE_DIR}/make/config.mk" |
| ## avoid passing down -jN |
| MAKEFLAGS= |
| export MAKEFLAGS |
| query="${MAKE} -s ${makefiles} print R_HOME=${R_HOME}" |
| |
| LIBR=`eval $query VAR=LIBR` |
| STATIC_LIBR=`eval $query VAR=STATIC_LIBR` |
| MAIN_LDFLAGS=`eval $query VAR=MAIN_LDFLAGS` |
| LIBS=`eval $query VAR=LIBS` |
| LDFLAGS=`eval $query VAR=LDFLAGS` |
| |
| |
| if test -n "${R_ARCH}"; then |
| includes="-I${R_INCLUDE_DIR} -I${R_INCLUDE_DIR}${R_ARCH}" |
| else |
| includes="-I${R_INCLUDE_DIR}" |
| fi |
| |
| var= |
| personal="yes" |
| site="yes" |
| all="no" |
| while test -n "${1}"; do |
| case "${1}" in |
| -h|--help) |
| echo "${usage}"; exit 0 ;; |
| -v|--version) |
| echo "${version}"; exit 0 ;; |
| --cppflags) |
| if test -z "${LIBR}"; then |
| if test -z "${STATIC_LIBR}"; then |
| echo "R was not built as a library" >&2 |
| else |
| echo "${includes}" |
| fi |
| else |
| echo "${includes}" |
| fi |
| exit 0 |
| ;; |
| --ldflags) |
| ## changed in R 3.1.0 to be those needed to link a front-end |
| if test -z "${LIBR}"; then |
| if test -z "${STATIC_LIBR}"; then |
| echo "R was not built as a library" >&2 |
| else |
| echo "${MAIN_LDFLAGS} ${LDFLAGS} ${STATIC_LIBR}" |
| fi |
| else |
| echo "${MAIN_LDFLAGS} ${LDFLAGS} ${LIBR} ${LIBS}" |
| fi |
| exit 0 |
| ;; |
| --no-user-files) |
| personal="no" |
| ;; |
| --no-site-files) |
| site="no" |
| ;; |
| --all) |
| all="yes" |
| ;; |
| *) |
| if test -z "${var}"; then |
| var="${1}" |
| else |
| echo "ERROR: cannot query more than one variable" >&2 |
| exit 1 |
| fi |
| ;; |
| esac |
| shift |
| done |
| |
| ## quotes added in R 3.3.2 |
| if test "${site}" = "yes"; then |
| : ${R_MAKEVARS_SITE="${R_HOME}/etc${R_ARCH}/Makevars.site"} |
| if test -f "${R_MAKEVARS_SITE}"; then |
| makefiles="${makefiles} -f \"${R_MAKEVARS_SITE}\"" |
| fi |
| fi |
| if test "${personal}" = "yes"; then |
| if test "${R_OSTYPE}" = "windows"; then |
| if test -f "${R_MAKEVARS_USER}"; then |
| makefiles="${makefiles} -f \"${R_MAKEVARS_USER}\"" |
| elif test ${R_ARCH} = "/x64" -a -f "${HOME}/.R/Makevars.win64"; then |
| makefiles="${makefiles} -f \"${HOME}\"/.R/Makevars.win64" |
| elif test -f "${HOME}/.R/Makevars.win"; then |
| makefiles="${makefiles} -f \"${HOME}\"/.R/Makevars.win" |
| elif test -f "${HOME}/.R/Makevars"; then |
| makefiles="${makefiles} -f \"${HOME}\"/.R/Makevars" |
| fi |
| else |
| . ${R_HOME}/etc${R_ARCH}/Renviron |
| if test -f "${R_MAKEVARS_USER}"; then |
| makefiles="${makefiles} -f \"${R_MAKEVARS_USER}\"" |
| elif test -f "${HOME}/.R/Makevars-${R_PLATFORM}"; then |
| makefiles="${makefiles} -f \"${HOME}\"/.R/Makevars-${R_PLATFORM}" |
| elif test -f "${HOME}/.R/Makevars"; then |
| makefiles="${makefiles} -f \"${HOME}\"/.R/Makevars" |
| fi |
| fi |
| fi |
| query="${MAKE} -s ${makefiles} print R_HOME=${R_HOME}" |
| |
| ok_c_vars="CC CFLAGS CPICFLAGS CPPFLAGS" |
| ok_cxx_vars="CXX CXXFLAGS CXXPICFLAGS CXX11 CXX11STD CXX11FLAGS CXX11PICFLAGS CXX14 CXX14STD CXX14FLAGS CXX14PICFLAGS CXX17 CXX17STD CXX17FLAGS CXX17PICFLAGS" |
| ok_dylib_vars="DYLIB_EXT DYLIB_LD DYLIB_LDFLAGS" |
| ok_objc_vars="OBJC OBJCFLAGS" |
| ok_java_vars="JAVA JAVAC JAVAH JAR JAVA_HOME JAVA_LIBS JAVA_CPPFLAGS" |
| ## F77 is legacy |
| ok_ftn_vars="FC FFLAGS FPICFLAGS FLIBS FCFLAGS SAFE_FFLAGS" |
| ok_ld_vars="LDFLAGS" |
| ok_shlib_vars="SHLIB_CFLAGS SHLIB_CXXFLAGS SHLIB_CXXLD SHLIB_CXXLDFLAGS SHLIB_CXX98LD SHLIB_CXX98LDFLAGS SHLIB_CXX11LD SHLIB_CXX11LDFLAGS SHLIB_CXX14LD SHLIB_CXX14LDFLAGS SHLIB_CXX17LD SHLIB_CXX17LDFLAGS SHLIB_EXT SHLIB_FFLAGS SHLIB_LD SHLIB_LDFLAGS" |
| ok_tcltk_vars="TCLTK_CPPFLAGS TCLTK_LIBS" |
| ok_other_vars="BLAS_LIBS LAPACK_LIBS MAKE LIBnn AR RANLIB" |
| deprecated_vars="CPP CXXCPP CXX98 CXX98STD CXX98FLAGS CXX98PICFLAGS F77 FCPICFLAGS" |
| if test "${R_OSTYPE}" = "windows"; then |
| ok_win_vars="LOCAL_SOFT COMPILED_BY OBJDUMP" |
| fi |
| |
| if test "${all}" = "yes"; then |
| query="${MAKE} -s ${makefiles} print-name-and-value R_HOME=${R_HOME}" |
| for v in ${ok_c_vars} ${ok_cxx_vars} ${ok_dylib_vars} ${ok_ftn_vars} \ |
| ${ok_objc_vars} ${ok_java_vars} \ |
| ${ok_ld_vars} ${ok_shlib_vars} ${ok_tcltk_vars} \ |
| ${ok_other_vars} ${ok_win_vars}; do |
| eval "${query} VAR=${v}" |
| done |
| echo "## The following variables are deprecated" |
| for v in ${deprecated_vars}; do |
| eval "${query} VAR=${v}" |
| done |
| exit 0 |
| fi |
| |
| ## Can we do this elegantly using case? |
| |
| var_ok=no |
| for v in ${ok_c_vars} ${ok_cxx_vars} ${ok_dylib_vars} ${ok_ftn_vars} \ |
| ${ok_objc_vars} ${ok_java_vars} \ |
| ${ok_ld_vars} ${ok_shlib_vars} ${ok_tcltk_vars} \ |
| ${ok_other_vars} ${ok_win_vars}; do |
| if test "${var}" = "${v}"; then |
| var_ok=yes |
| break |
| fi |
| done |
| |
| for v in ${deprecated_vars}; do |
| if test "${var}" = "${v}"; then |
| var_ok=yes |
| 1>&2 echo "'config' variable '${v}' is deprecated" |
| break |
| fi |
| done |
| |
| if test "${var_ok}" = yes; then |
| eval "${query} VAR=${var}" |
| else |
| echo "ERROR: no information for variable '${var}'" |
| exit 1 |
| fi |
| |
| ### Local Variables: *** |
| ### mode: sh *** |
| ### sh-indentation: 2 *** |
| ### End: *** |