#! /bin/sh

### This file is part of R.
###
### R 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 of the License, or (at your
### option) any later version.
###
### R 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.
###
### You should have received a copy of the GNU General Public License
### along with R; if not, a copy is available at
### http://www.r-project.org/Licenses/

## By means of this file you can (also) provide default values for the
## configuration process.  To set variables, uncomment the VAR=DEFAULT 
## lines and set DEFAULT according to your needs.
## See etc/Renviron.in for further variables you may wish to set.

## The command used to spool PostScript files to the printer.
## If unspecified, the system will look for either 'lpr' or 'lp'.
## R_PRINTCMD=lpr

## The paper size for the local (PostScript) printer.
## It must either be left blank or set to one of 'a4' or 'letter'.
## If left blank the system will use 'a4'.
## R_PAPERSIZE=a4

## Set the default behavior of R when ending a session
## Set this to one of '--save' or '--no-save' depending whether you
## want automatic saving of '.RData' or not.
## Note that this applies to interactive and batch use, 
## but NOT to the utility R CMD BATCH 
## (which defaults to --save irrespective of this setting)
## R_BATCHSAVE=

## The command which runs the C compiler.
## If unspecified, a search is made for gcc and cc (in that order).
## To override this choice, specify the name or path of the command
## which runs the compiler, for example 'c99'.
## It is also necessary to set the architecture here, e.g. 'gcc -m32'.
## CC=

## Debugging and optimization options for the C compiler.
## Use this to specify CFLAGS for the version of the C compiler
## specified above.
## If unspecified, defaults to '-g -O2' for gcc, 
## and '-g' in all other cases except icc (for which see R-admin.html).
## CFLAGS=

## Defines for C compilation.
## Use this to specify defines to be used in the compilation of R,
## DEFS=

## The following additional CFLAGS to be used only in the main
## compilation and only in building shared objects respectively.
## For example, on some systems one needs 'MAIN_CFLAGS=-pg' when
## profiling.
## MAIN_CFLAGS=
## SHLIB_CFLAGS=

## Header file search directory ('-IDIR') and any other miscellaneous
## options (such as defines) for the C preprocessor and compiler.
## If unset defaults to '-I/usr/local/include', with '-I/sw/include'
## prepended on systems using Fink with root '/sw'.
## CPPFLAGS=

## The command which runs the Fortran compiler.
## Used for both fixed-form and free-form Fortran
## FC=

## Options for the Fortran compiler.
## Use this to specify comilation flags for fixed-form Fortran.
## FFLAGS=
## Ditto for free-form Fortran.
## FCFLAGS=
## If just one of these is set, it is used for both.
## If both are unspecified, defaults to '-g -O2' for gfortran, 
## otherwise '-g' if this is accepted, otherwise ''.
## Use these if the compiler needs flags such as --free, -qfixed and
## cannot determine which from the source-file extension.

## Additional libraries needed to link a shared object with FC,
## e.g. on x86 Solaris
## FCLIBS_XTRA=

## Options for safe compilation under the Fortran compiler.
## Use this to specify FFLAGS for the version of the compiler specified
## above, using as accurate a result as possible, e.g. no optimization
## or using -ffloat-store.
## SAFE_FFLAGS=

## The following additional FFLAGS to be used only in the main
## compilation and only in building shared objects respectively.
## For example, on some systems one needs 'MAIN_FFLAGS=-pg' when
## profiling.
## MAIN_FFLAGS=
## SHLIB_FFLAGS=

## The command to be used to load the main R binary.
## This is usually the C compiler, but the automatic
## choice can be overridden by means of this variable.
## MAIN_LD=

## The flags which are necessary for loading main program which will
## load DLLs at runtime.  HP-UX and Linux-elf are examples of platforms
## which use this.  Those platforms are already taken care of by
## configure, and anything set here will be in addition unless MAIN_LD
## is given.
## For example, one can set flags for profiling here.
## MAIN_LDFLAGS=

## Any special flags which must be used when compiling C code to be
## turned into a shared object.  This is typically something like
## '-fpic' or '-fPIC'.  If this variable is left unspecified an attempt
## is made to automatically detect the correct value.
## CPICFLAGS=

## The following variable can be used to provide any PIC flags for the
## Fortran compiler.  If this variable is left unspecified an
## attempt is made to automatically detect the correct value.
## FPICFLAGS=

## The command to be used to create shared objects which contain object
## files from a C or Fortran compiler only.  This is usually the C
## compiler or 'ld', but the automatic choice can be overridden by means
## of this variable.
## SHLIB_LD=

## Any special flags which are required by the linker when creating
## shared objects containing object files from a C or Fortran
## compiler only.  This is usually automatically detected by configure,
## and anything set here will be in addition unless SHLIB_LD is given.
## SHLIB_LDFLAGS=

## ditto for a dynamic library: DYLIB_LDFLAGS defaults to SHLIB_LDFLAGS
## DYLIB_LD=
## DYLIB_LDFLAGS=

## The appropriate 'lib' dir, normally 'lib', but 'lib64' on Linux on
## x86_64, mips64, ppc64, sparc64, s390x but not ia64 (except Debian
## and derivatives).
## LIBnn=

## Path ('-L'), and any other miscellaneous options for the linker.
## '-L' options set here will be prepended to LD_LIBRARY_PATH (or its
## system equivalent) at run time.
## If unset defaults to '-L/usr/local/lib', with '-L/sw/lib' prepended
## on macOS systems using Fink with root '/sw'.
## On some Linux 64-bit systems its default is -L/usr/local/lib64.
## If LIBnn is set it defaults to -L/usr/local/$LIBnn.
## LDFLAGS=


## The command which runs the C++ compiler.
## This is optional, for use in packages.
## If not specified, configure
## uses the values of the environment variables 'CXX' or 'CCC' if set,
## and then looks under the names 'c++', 'g++', 'CC' and more OS-specific
## names (from autoconf).
## CXX=

## Options for the C++ compiler.
## CXXFLAGS=

## Any special flags which must be used when compiling C++ code to be
## turned into a shared object.  If this variable is left unspecified
## an attempt is made to automatically detect the correct value.
## CXXPICFLAGS=

## Option to specify the default C++ standard, 
## e.g. -std=c++11 or -std=gnu++11
## CXXSTD=

## The command to be used to load shared objects which contain object
## files from the C++ compiler.  This is usually the C++ compiler/linker,
## but the automatic choice can be overridden by means of this
## variable.  (Include $(CXXSTD) if set.)
## SHLIB_CXXLD=

## Any special flags which are required when creating shared objects
## containing object files from a C++ compiler.  This is usually
## automatically detected by configure, and anything set here will be in
## addition unless SHLIB_CXXLD is given.
## SHLIB_CXXLDFLAGS=

## Not used by R but configure can fail to find it, so set to
## "$CXX -E" if it does.
## CXXCPP=

## Tcl/Tk settings.
## Use TCLTK_LIBS for all '-L' and '-l' options needed for linking
## against the Tcl and Tk library.
## TCLTK_LIBS=
## Use TCLTK_CPPFLAGS for all '-I' options needed for finding the tcl.h
## and tk.h headers.
## TCLTK_CPPFLAGS=

## Browser default
## Default setting for the R_BROWSER env variable
## If unset configure searches in turn for (currently)
## firefox mozilla galeon opera xdg-open kfmclient gnome-moz-remote open
## and uses the full path of the first it finds.
## R_BROWSER=

## BLAS and LAPACK settings
## Use BLAS_LIBS for all '-L' and '-l' options needed for linking
## against an external BLAS implementation.
## BLAS_LIBS=
## Use LAPACK_LIBS for all '-L' and '-l' options needed for linking
## against an external LAPACK implementation.  
## Note that (see R-admin) that our main intention is to allow a
## LAPACK-containing BLAS to be used, so this is rarely needed, and
## it is not used if the BLAS already contains LAPACK.
## LAPACK_LIBS=

## Make name or path
## Set this if you want to use a make by another name.
## For example, if your GNU make is called 'gmake', use 'MAKE=gmake'.
## MAKE=

## Tar name or path
## Set this to prefer a tar which has the capability to automagically
## read compressed archives.  The default is to choose 'gtar' or
## 'gnutar'(normally GNU tar) then 'tar'.
## Note that 'bsdtar' (from the libarchive project) is known to create
## archives in a non-POSIX format that other tars and untar() cannot
## read, so should be avoided.
## TAR=

## Dynamic library path
## This is be default created from libraries added to LIBS.
## Used for DYLD_FALLBACK_LIBRARY_PATH on macOS and LD_LIBRARY_PATH elsewhere.
## Allow user to override.
## R_LD_LIBRARY_PATH=

## C++98 compiler, optional for use in packages.
## Introduced in R 3.4.0
## The command which runs the C++98 compiler: defaults to $(CXX), but
## empty if that (plus standard) cannot compile the tested C++98 code.
## CXX98=

## The 'standard' for the C++98 compiler, which is invoked as
## $(CXX98) $(CXX98STD) for both compiling and linking DSOs/DLLs.  
## '-std=gnu++98' and '-std=gnu++03' are tried in turn by configure.
## followed by '-std=c++98' and '-std=c++03'
## CXX98STD=

## Analogues for the C++98 compiler: default to the settings for C++
## CXX98FLAGS=
## CXX98PICFLAGS=
## SHLIB_CXX98LD=
## SHLIB_CXX98LDFLAGS=

## C++11 compiler, optional for use in packages.
## Introduced in R 3.1.0
## The command which runs the C++11 compiler: defaults to $(CXX), but
## empty if that (plus standard) cannot compile the tested C++11 code.
## CXX11=

## The 'standard' for the C++11 compiler, which is invoked as
## $(CXX11) $(CXX11STD) for both compiling and linking DSOs/DLLs.  
## '-std=gnu++11' and '-std=gnu++0x' are tried in turn by configure.
## followed by '-std=c++11' and '-std=c++0x'
## CXX11STD=

## Analogues for the C++11 compiler: default to the settings for C++
## CXX11FLAGS=
## CXX11PICFLAGS=
## SHLIB_CXX11LD=
## SHLIB_CXX11LDFLAGS=

## C++14 compiler, optional for use in packages.
## Introduced in R 3.4.0
## The command which runs the C++14 compiler: defaults to $(CXX11), but
## empty if that (plus standard) cannot compile the tested C++14 code.
## CXX14=

## The 'standard' for the C++14 compiler, which is invoked as
## $(CXX14) $(CXX14STD) for both compiling and linking DSOs/DLLs.  
## '-std=gnu++14' and '-std=gnu++1y" are tried by configure, also
## '-std=c++14' and '-std=c++1y"
## CXX14STD=

## Analogues for the C++14 compiler: default to the settings for C++11
## CXX14FLAGS=
## CXX14PICFLAGS=
## SHLIB_CXX14LD=
## SHLIB_CXX14LDFLAGS=

## C++17 compiler, optional for use in packages.
## Introduced in R 3.4.0
## The command which runs the C++17 compiler: defaults to $(CXX14), but
## empty if that (plus standard) cannot compile the tested C++17 code.
## CXX17=

## The 'standard' for the C++17 compiler, which is invoked as
## $(CXX17) $(CXX17STD) for both compiling and linking DSOs/DLLs.  
## '-std=gnu++17' and '-std=gnu++1z" are tried by configure, also
## '-std=c++17' and '-std=c++1z"
## CXX17STD=

## Analogues for the C++17 compiler: default to the settings for C++14
## CXX17FLAGS=
## CXX17PICFLAGS=
## SHLIB_CXX17LD=
## SHLIB_CXX17LDFLAGS=

## Additional libraries to link the internet module against.
## Some claim Solaris needs -lsocket -lnsl
## INTERNET_LIBS=

## Script from texinfo 5.1 or later.
## Usually the full path to texi2any.
## TEXI2ANY=

## Full path to version of curl-config to be used
## CURL_CONFIG=
## Use these to override curl-config if needed.
## Used as from R 3.2.0.
## CURL_CPPFLAGS=
## CURL_LIBS=
## To force a static link use the line below: this is only needed
## if both shared and static libcurl libraries were built.
## CURL_LIBS=`curl-config --static-libs`

## Path to the version of pkg-config to be used for locating cairographics,
## and possibly jpeg, libpng and libtiff.
## PKG_CONFIG=
## search path for pkg-config
## PKG_CONFIG_PATH=
## path overriding pkg-config's default search path
## PKG_CONFIG_LIBDIR=

## OpenMP settings.
## The configure code is conservative about enabling OpenMP 
## so use can be forced here (or non-use if set but empty).
## For packages (note that SHLIB_OPENMP_CXXFLAGS is for CXX, not
## necessarily for CXX11/14/17).
## SHLIB_OPENMP_CFLAGS=
## SHLIB_OPENMP_CXXFLAGS=
## SHLIB_OPENMP_FFLAGS=
## For R itself (src/main/array.c and src/library/stats/src/distance.c)
## R_OPENMP_CFLAGS=

## POSIX threads setting
## pthreads is used in src/main/eval.c.  The configure code sees if
## any flag is needed to link to pthread functions (after the OpenMP
## CFLAGS) and if so tries -pthread.  Setting this allows an
## alternative to be tried immediately before -pthread.
## PTHREAD_OPT=

## Visibility settings
## Allow user to override the configure checks if they know what they
## are doing.
## C_VISIBILITY=
## CXX_VISIBILITY=
## F_VISIBILITY=

## Fortran-C compatibility
## The C type used by Fortran to pass 'hidden' character lengths (if any)
## Often size_t (unsigned int or long, or long long in Win64)
## Allow user to override the configure checks if they know what they
## are doing (the value is unchecked).
## FC_LEN_T=

## C Stack Direction
## In case optimization defeats the configure test: 'down' (the usual) or 'up'
## R_C_STACK_DIRECTION=
