Rev 84897 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
### R.m4 -- extra macros for configuring R -*- Autoconf -*-###### Copyright (C) 1998-2023 R Core Team###### 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### https://www.r-project.org/Licenses/### Please use dnl for first-col comments within definitions, as### PD's autoconf leaves ## in but most others strip them.### Or indent them by spaces, which seems to be left in by all.### * General support macros## R_ARG_USE## ---------AC_DEFUN([R_ARG_USE],[if test "${withval}" = no; thenuse_$1=noelseuse_$1=yesfi])# R_ARG_USE## R_ARG_USE_SYSTEM## ----------------AC_DEFUN([R_ARG_USE_SYSTEM],[if test "${withval}" = no; thenuse_system_$1=noelseuse_system_$1=yesfi])# R_ARG_USE_SYSTEM## R_SH_VAR_ADD(VARIABLE, VALUE, [SEPARATOR = " "])## ------------------------------------------------## Set sh variable VARIABLE to VALUE if empty (or undefined), or append## VALUE to the value of VARIABLE, separated by SEPARATOR.## Currently, safe only if all arguments are literals.## Useful mostly when we do not know whether VARIABLE is empty or not.## Should maybe also have a fourth argument to control whether adding## happens by appending (default) or prepending ...AC_DEFUN([R_SH_VAR_ADD],[separator="$3"test -z "${separator}" && separator=" "if test -z "${[$1]}"; then$1="$2"else$1="${[$1]}${separator}$2"fi])# R_SH_VAR_ADD## R_MISSING_PROG(NAME, PROGRAM, [ACTION-IF-MISSING])## -----------------------------## Simplified variant of AM_MISSING_PROG.## Set NAME to PROGRAM if this is found and works (in the sense of## properly implementing --version, or to an appropriate invocation## if the missing script otherwise.AC_DEFUN([R_MISSING_PROG],[AC_MSG_CHECKING([for working $2])if ($2 --version) < /dev/null > /dev/null 2>&1; then$1=$2AC_MSG_RESULT([found])else$1="\$(SHELL) \"\$(abs_top_srcdir)/tools/missing\" $2"AC_MSG_RESULT([missing])[$3]fiAC_SUBST($1)])# R_MISSING_PROG### * Programs## R_PROG_AR## ---------AC_DEFUN([R_PROG_AR],[AC_CHECK_PROGS(AR, [${AR} ar]): ${ARFLAGS="rc"}AC_SUBST(ARFLAGS)])# R_PROG_AR## R_PROG_INSTALL## --------------## Find a good install program.## We like to provide INSTALL in the top-level Makeconf.## Hence, if AC_PROG_INSTALL ends up with the 'tools/install-sh' script,## we need to ensure a relative path (i.e., in case we build in srcdir)## gets prefixed by top_srcdir. (This would not be necessary if we had## '@INSTALL@' in each Makefile.in, but we prefer to share ...)AC_DEFUN([R_PROG_INSTALL],[AC_REQUIRE([AC_PROG_INSTALL])case "${INSTALL}" in[[\\/]]* | ?:[[\\/]]* ) # absolute;;*)INSTALL="\$\(top_srcdir\)/tools/install-sh -c";;esacdnl case "${host_os}" indnl hpux*)dnl ## On some versions of HP-UX (seen on both 10.20 and 11.0) we end updnl ## a broken install (seen in /opt/imake/bin) which has the defaultdnl ## permissions wrong (PR#2091). Let's just always use install-sh ondnl ## HP-UX.dnl INSTALL="\$\(top_srcdir\)/tools/install-sh -c"dnl ;;dnl esac])# R_PROG_INSTALL## R_PROG_PAGER## ------------AC_DEFUN([R_PROG_PAGER],[AC_PATH_PROGS(PAGER, [${PAGER} less more page pg], false)if test "${PAGER}" = false; thenwarn_pager="I could not determine a pager"AC_MSG_WARN([${warn_pager}])fi])# R_PROG_PAGER## R_PROG_TEXMF## ------------AC_DEFUN([R_PROG_TEXMF],[dnl PDFTEX PDFLATEX MAKEINDEX TEXI2DVI are used to make manualsdnl PDFLATEX and MAKEINDEX in the emulation mode of tools::texi2dvidnl TEXI2DVICMD sets default for R_TEXI2DVICMD, used for options('texi2dvi')dnl TEX AND LATEX are no longer usedAC_PATH_PROGS(TEX, [${TEX} tex], )AC_PATH_PROGS(PDFTEX, [${PDFTEX} pdftex], )if test -z "${ac_cv_path_PDFTEX}" ; thenwarn_pdf1="you cannot build PDF versions of the R manuals"AC_MSG_WARN([${warn_pdf1}])fiAC_PATH_PROGS(PDFLATEX, [${PDFLATEX} pdflatex], )if test -z "${ac_cv_path_PDFLATEX}" ; thenwarn_pdf2="you cannot build PDF versions of vignettes and help pages"AC_MSG_WARN([${warn_pdf2}])fiAC_PATH_PROGS(MAKEINDEX, [${MAKEINDEX} makeindex], )R_PROG_TEXI2ANYAC_PATH_PROGS(TEXI2DVI, [${TEXI2DVI} texi2dvi], )TEXI2DVICMD=${ac_cv_path_TEXI2DVI}if test -z "${TEXI2DVICMD}"; thenTEXI2DVICMD=texi2dvifiAC_SUBST(TEXI2DVICMD)AC_PATH_PROGS(KPSEWHICH, [${KPSEWHICH} kpsewhich], "")dnl this is deliberately not cached: LaTeX packages change.dnl zi4.sty has been present since at least 2013/06dnl inconsolata.sty goes back to 2009, but was briefly removed in 2013.AC_MSG_CHECKING([for latex inconsolata package])r_rd4pdf="times,inconsolata,hyper"if test -n "${KPSEWHICH}"; then${KPSEWHICH} zi4.sty > /dev/nullif test $? -eq 0; thenAC_MSG_RESULT([found zi4.sty])else${KPSEWHICH} inconsolata.sty > /dev/nullif test $? -eq 0; thenAC_MSG_RESULT([found inconsolata.sty])elser_rd4pdf="times,hyper"if test -z "${R_RD4PDF}" ; thenAC_MSG_RESULT([missing])warn_pdf3="neither inconsolata.sty nor zi4.sty found: PDF vignettes and package manuals will not be rendered optimally"AC_MSG_WARN([${warn_pdf3}])fifififi: ${R_RD4PDF=${r_rd4pdf}}AC_SUBST(R_RD4PDF)])# R_PROG_TEXMF## R_PROG_TEXI2ANY## ---------------AC_DEFUN([R_PROG_TEXI2ANY],[AC_PATH_PROGS(TEXI2ANY, [${TEXI2ANY} texi2any])if test -n "${TEXI2ANY}"; then_R_PROG_TEXI2ANY_VERSIONAC_PATH_PROGS(INSTALL_INFO,[${INSTALL_INFO} ginstall-info install-info],false)AC_SUBST(INSTALL_INFO)fiif test "${r_cv_prog_texi2any_v5}" != yes; thenwarn_info="you cannot build info or HTML versions of the R manuals"AC_MSG_WARN([${warn_info}])TEXI2ANY=""elseTEXI2ANY="${TEXI2ANY}"fiif test "${r_cv_prog_texi2any_v7}" != yes; thenHAVE_TEXI2ANY_V7_TRUE='#'elseHAVE_TEXI2ANY_V7_TRUE=fiAC_SUBST(HAVE_TEXI2ANY_V7_TRUE)AC_SUBST([TEXI2ANY_VERSION_MAJ], [${r_cv_prog_texi2any_version_maj}])AC_SUBST([TEXI2ANY_VERSION_MIN], [${r_cv_prog_texi2any_version_min}])])# R_PROG_TEXI2ANY## _R_PROG_TEXI2ANY_VERSION## ------------------------## Building the R Texinfo manuals requires texinfo v5.1 or later.## Set shell variable r_cv_prog_texi2any_v5 to 'yes' if a recent## enough texi2any aka makeinfo is found, and to 'no' otherwise.## If you change the minimum version here, also change it in## doc/manual/Makefile.in and doc/manual/R-admin.texi.AC_DEFUN([_R_PROG_TEXI2ANY_VERSION],[AC_CACHE_VAL([r_cv_prog_texi2any_version],[r_cv_prog_texi2any_version=`${TEXI2ANY} --version | \grep -E '^(makeinfo|texi2any)' | sed 's/[[^)]]*) \(.*\)/\1/'`])AC_CACHE_VAL([r_cv_prog_texi2any_version_maj],[r_cv_prog_texi2any_version_maj=`echo ${r_cv_prog_texi2any_version} | \cut -f1 -d.`])AC_CACHE_VAL([r_cv_prog_texi2any_version_min],[r_cv_prog_texi2any_version_min=`echo ${r_cv_prog_texi2any_version} | \cut -f2 -d. | tr -dc '0123456789.'`])AC_CACHE_CHECK([whether texi2any version is at least 5.1],[r_cv_prog_texi2any_v5],[if test -z "${r_cv_prog_texi2any_version_maj}" \|| test -z "${r_cv_prog_texi2any_version_min}"; thenr_cv_prog_texi2any_v5=noelif test ${r_cv_prog_texi2any_version_maj} -gt 5; thenr_cv_prog_texi2any_v5=yeselif test ${r_cv_prog_texi2any_version_maj} -lt 5 \|| test ${r_cv_prog_texi2any_version_min} -lt 1; thenr_cv_prog_texi2any_v5=noelser_cv_prog_texi2any_v5=yesfi])## Also record whether texi2any is at least 7 to appropriately handle## HTML and EPUB output changes, see## <https://lists.gnu.org/archive/html/bug-texinfo/2022-11/msg00036.html>.AC_CACHE_VAL([r_cv_prog_texi2any_v7],[if test ${r_cv_prog_texi2any_v5} = yes \&& test ${r_cv_prog_texi2any_version_maj} -ge 7; thenr_cv_prog_texi2any_v7=yeselser_cv_prog_texi2any_v7=nofi])])# _R_PROG_TEXI2ANY_VERSION## R_PROG_BROWSER## --------------## xdg-open is the freedesktop.org interface to kfmclient/gnome-openAC_DEFUN([R_PROG_BROWSER],[if test -z "${R_BROWSER}"; thenAC_PATH_PROGS(R_BROWSER, [xdg-open firefox mozilla epiphany galeon opera kfmclient gnome-moz-remote open lynx links])fiif test -z "${R_BROWSER}"; thenwarn_browser="I could not determine a browser"AC_MSG_WARN([${warn_browser}])elseAC_MSG_RESULT([using default browser ... ${R_BROWSER}])fiAC_SUBST(R_BROWSER)])# R_BROWSER## R_PROG_PDFVIEWER## ----------------## Try to determine a PDF viewer.## According to Jeff Gentry <jgentry@jimmy.harvard.edu>, 'acroread4' is## the FreeBSD acroread port.AC_DEFUN([R_PROG_PDFVIEWER],[AC_PATH_PROGS(R_PDFVIEWER,[${R_PDFVIEWER} xdg-open acroread acroread4 evince atril xpdf gv gnome-gv ggv okular kpdf open gpdf kghostview])if test -z "${R_PDFVIEWER}"; thenwarn_pdfviewer="I could not determine a PDF viewer"AC_MSG_WARN([${warn_pdfviewer}])fiAC_SUBST(R_PDFVIEWER)])# R_PDFVIEWER### * C compiler and its characteristics.## R_PROG_CPP_CPPFLAGS## -------------------## In case of gcc, check whether the C preprocessor complains about## having '/usr/local/include' in its header search path (no matter how## it came there). GCC 3.1 and 3.2 (at least) give warnings about## 'changing search order for system directory "/usr/local/include" as## it has already been specified as a non-system directory' which are at## least quite annoying.## <NOTE>## We currently do not distinguish whether '/usr/local/include' was## added as the R default, or by an explicit CPPFLAGS arg to configure.## If we wanted to, we should change## : ${CPPFLAGS="-I/usr/local/include"}## in 'configure.ac' by something like## : ${CPPFLAGS=${r_default_CPPFLAGS="-I/usr/local/include"}}## and test whether r_default_CPPFLAGS is non-empty.## </NOTE>AC_DEFUN([R_PROG_CPP_CPPFLAGS],[AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([AC_PROG_CPP])if test "${GCC}" = yes; thenAC_LANG_PUSH(C)AC_LANG_CONFTEST([AC_LANG_PROGRAM()])if ${CPP} ${CPPFLAGS} conftest.${ac_ext} 2>&1 1>/dev/null | \grep 'warning:.*system directory.*/usr/local/include' >/dev/null; thenCPPFLAGS=`echo ${CPPFLAGS} | \sed 's|\(.*\)-I/usr/local/include *\(.*\)|\1\2|'`firm -f conftest.${ac_ext}AC_LANG_POP(C)fi])# R_PROG_CPP_CPPFLAGS## R_PROG_CC_VERSION## -----------------## Determine the version of the C compiler (currently only for gcc).AC_DEFUN([R_PROG_CC_VERSION],[AC_REQUIRE([AC_PROG_CC])CC_VERSION=if test "${GCC}" = yes; thenCC_VERSION=`${CC} -v 2>&1 | grep "^.*g.. version" | \sed -e 's/^.*g.. version *//'`fi])# R_PROG_CC_VERSION## R_PROG_CC_M## -----------## Check whether we can figure out C Make dependencies.AC_DEFUN([R_PROG_CC_M],[AC_REQUIRE([R_PROG_CC_VERSION])AC_MSG_CHECKING([whether we can compute C Make dependencies])AC_CACHE_VAL([r_cv_prog_cc_m],[echo "#include <math.h>" > conftest.cdnl No real point in using AC_LANG_* and ${ac_ext}, as we need to creatednl hard-wired suffix rules.dnl Another obvious candidate to try is '${MAKEDEPEND-makedepend} -f-'.dnl However, this does not work out of the box when srcdir and builddirdnl are different, as it creates dependencies of the formdnl ${srcdir}/foo.o: /path/to/bar.hdnl Could be made to work, of course ...dnl Note also that it does not create a 'conftest.o: conftest.c' line.dnl For gcc 3.2 or better, we want to use '-MM' in case this works.dnl Also adopted by clang, so version test is not really appopriate.cc_minus_MM=falseif test "${GCC}" = yes; thencase "${CC_VERSION}" in1.*|2.*|3.[[01]]*) ;;*) cc_minus_MM="${CC} -MM" ;;esacfifor prog in "${cc_minus_MM}" "${CC} -M" "${CPP} -M" "cpp -M"; doif ${prog} ${CPPFLAGS} conftest.c 2>/dev/null | \grep 'conftest.o: conftest.c' >/dev/null; thenr_cv_prog_cc_m="${prog}"breakfidone])if test "${r_cv_prog_cc_m}" = "${cc_minus_MM}"; thenr_cv_prog_cc_m="\$(CC) -MM"elif test "${r_cv_prog_cc_m}" = "${CC} -M"; thenr_cv_prog_cc_m="\$(CC) -M"fiif test -z "${r_cv_prog_cc_m}"; thenAC_MSG_RESULT([no])elseAC_MSG_RESULT([yes, using ${r_cv_prog_cc_m}])fi])# R_PROG_CC_M## R_PROG_CC_C_O_LO## ----------------## Check whether the C compiler supports '-c -o FILE.lo'.AC_DEFUN([R_PROG_CC_C_O_LO],[AC_CACHE_CHECK([whether ${CC} supports -c -o FILE.lo],[r_cv_prog_cc_c_o_lo],[test -d TMP || mkdir TMPecho "int some_variable = 0;" > conftest.cdnl No real point in using AC_LANG_* and ${ac_ext}, as we need to creatednl hard-wired suffix rules.ac_try='${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c -o TMP/conftest.lo 1>&AS_MESSAGE_LOG_FD'if AC_TRY_EVAL(ac_try) \&& test -f TMP/conftest.lo \&& AC_TRY_EVAL(ac_try); thenr_cv_prog_cc_c_o_lo=yeselser_cv_prog_cc_c_o_lo=nofirm -Rf conftest* TMP])])# R_PROG_CC_C_O_LO## R_PROG_CC_MAKEFRAG## ------------------## Generate a Make fragment with suffix rules for the C compiler.## Used for both building R (Makeconf) and add-ons (etc/Makeconf).AC_DEFUN([R_PROG_CC_MAKEFRAG],[r_cc_rules_frag=Makefrag.ccAC_REQUIRE([R_PROG_CC_M])cat << \EOF > ${r_cc_rules_frag}.c.o:$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c $< -o $[@]EOFif test -n "${r_cv_prog_cc_m}"; thencat << EOF >> ${r_cc_rules_frag}.c.d:@echo "making \$[@] from \$<"@${r_cv_prog_cc_m} \$(ALL_CPPFLAGS) $< > \$[@]EOFelsecat << \EOF >> ${r_cc_rules_frag}.c.d:@echo > $[@]EOFfiAC_SUBST_FILE(r_cc_rules_frag)])# R_PROG_CC_MAKEFRAG## R_PROG_CC_LO_MAKEFRAG## ---------------------## Generate a Make fragment with suffix rules for the C compiler.## Used for both building R (Makeconf) and add-ons (etc/Makeconf).## Need to make .lo files in src/nmath/standalone only## NB test -d .libs || mkdir .libs can be run more than once## and hence race when a parallel make is usedAC_DEFUN([R_PROG_CC_LO_MAKEFRAG],[r_cc_lo_rules_frag=Makefrag.cc_loAC_REQUIRE([R_PROG_CC_C_O_LO])if test "${r_cv_prog_cc_c_o_lo}" = yes; thencat << \EOF > ${r_cc_lo_rules_frag}.c.lo:$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS_LO) -c $< -o $[@]EOFelsecat << \EOF > ${r_cc_lo_rules_frag}.c.lo:@-test -d .libs || mkdir .libs$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS_LO) -c $< -o .libs/$[*].omv .libs/$[*].o $[*].loEOFfiAC_SUBST_FILE(r_cc_lo_rules_frag)])# R_PROG_CC_LO_MAKEFRAG## R_PROG_CC_FLAG(FLAG, [ACTION-IF-TRUE])## ---------------------------------------## Check whether the C compiler handles command line option FLAG,## and set shell variable r_cv_prog_cc_flag_SFLAG accordingly (where## SFLAG is a shell-safe transliteration of FLAG).## In addition, execute ACTION-IF-TRUE in case of success.AC_DEFUN([R_PROG_CC_FLAG],[ac_safe=AS_TR_SH($1)AC_MSG_CHECKING([whether ${CC} accepts $1])AC_CACHE_VAL([r_cv_prog_cc_flag_${ac_safe}],[AC_LANG_PUSH(C)r_save_CFLAGS="${CFLAGS}"CFLAGS="${CFLAGS} $1"AC_LINK_IFELSE([AC_LANG_PROGRAM()],[eval "r_cv_prog_cc_flag_${ac_safe}=yes"],[eval "r_cv_prog_cc_flag_${ac_safe}=no"])CFLAGS="${r_save_CFLAGS}"AC_LANG_POP(C)])if eval "test \"`echo '$r_cv_prog_cc_flag_'$ac_safe`\" = yes"; thenAC_MSG_RESULT([yes])[$2]elseAC_MSG_RESULT([no])fi])# R_PROG_CC_FLAG## R_C_INLINE## ----------## modified version of AC_C_INLINE to use R_INLINE not inlineAC_DEFUN([R_C_INLINE],[AC_REQUIRE([AC_PROG_CC])dnlAC_CACHE_CHECK([for inline], r_cv_c_inline,[r_cv_c_inline=""for ac_kw in inline __inline__ __inline; doAC_COMPILE_IFELSE([AC_LANG_SOURCE([#ifndef __cplusplusstatic $ac_kw int static_foo () {return 0; }$ac_kw int foo () {return 0; }#endif])],[r_cv_c_inline=$ac_kw; break])done])case $r_cv_c_inline inno) AC_DEFINE(R_INLINE,,[Define as `inline', or `__inline__' or `__inline'if that's what the C compiler calls it,or to nothing if it is not supported.]) ;;*) AC_DEFINE_UNQUOTED(R_INLINE, $r_cv_c_inline) ;;esac])# R_C_INLINE### * C++ compiler and its characteristics.## R_PROG_CXX## ----------## Check whether the C++ compiler can compile codeAC_DEFUN([R_PROG_CXX],[AC_CACHE_CHECK([whether ${CXX} ${CXXFLAGS} can compile C++ code],[r_cv_prog_cxx],[AC_LANG_PUSH([C++])dnlr_save_CXX="${CXX}"CXX="${CXX} ${CXXSTD}"AC_COMPILE_IFELSE([AC_LANG_SOURCE([#ifndef __cplusplus# error "not a C++ compiler"#endif#include <cmath>])],[r_cv_prog_cxx=yes], [r_cv_prog_cxx=no])CXX="${r_save_CXX}"AC_LANG_POP([C++])dnl])if test "${r_cv_prog_cxx}" = no; thenCXX=CXXFLAGS=CXXSTD=fi])# R_PROG_CXX## R_PROG_CXX_M## ------------## Check whether the C++ compiler accepts '-M' for generating## dependencies.## Not currently used -- better to use -MM if it were.AC_DEFUN([R_PROG_CXX_M],[AC_REQUIRE([R_PROG_CC_M])AC_CACHE_CHECK([whether ${CXX} accepts -M for generating dependencies],[r_cv_prog_cxx_m],[echo "#include <math.h>" > conftest.ccdnl No real point in using AC_LANG_* and ${ac_ext}, as we need to creatednl hard-wired suffix rules. We could be a bit more careful as wednl actually only test suffix '.cc'.if test -n "`${CXX} ${CPPFLAGS} -M conftest.cc 2>/dev/null | grep conftest`"; thenr_cv_prog_cxx_m=yeselser_cv_prog_cxx_m=nofi])])# R_PROG_CXX_M## R_PROG_CXX_MAKEFRAG## -------------------## Generate a Make fragment with suffix rules for the C++ compiler.## Used for both building R (Makeconf) and add-ons (etc/Makeconf).## <FIXME> If the .d rules were actually use, use CXXXPP? </FIXME>AC_DEFUN([R_PROG_CXX_MAKEFRAG],[r_cxx_rules_frag=Makefrag.cxxAC_REQUIRE([R_PROG_CXX_M])cat << \EOF > ${r_cxx_rules_frag}.cc.o:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $[@].cpp.o:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $[@]EOFif test "${r_cv_prog_cxx_m}" = yes; thencat << \EOF >> ${r_cxx_rules_frag}.cc.d:@echo "making $[@] from $<"@$(CXX) -M $(ALL_CPPFLAGS) $< > $[@].cpp.d:@echo "making $[@] from $<"@$(CXX) -M $(ALL_CPPFLAGS) $< > $[@]EOFelsecat << \EOF >> ${r_cxx_rules_frag}.cc.d:@echo > $[@].cpp.d:@echo > $[@]EOFfiAC_SUBST_FILE(r_cxx_rules_frag)])# R_PROG_CXX_MAKEFRAG## R_PROG_CXX_FLAG## ---------------## Check whether the C++ compiler handles command line option FLAG,## and set shell variable r_cv_prog_cc_flag_SFLAG accordingly (where## SFLAG is a shell-safe transliteration of FLAG).## In addition, execute ACTION-IF-TRUE in case of success.AC_DEFUN([R_PROG_CXX_FLAG],[ac_safe=AS_TR_SH($1)AC_MSG_CHECKING([whether ${CXX-c++} accepts $1])AC_CACHE_VAL([r_cv_prog_cxx_flag_${ac_safe}],[AC_LANG_PUSH(C++)r_save_CXXFLAGS="${CXXFLAGS}"CXXFLAGS="${CXXFLAGS} $1"AC_LINK_IFELSE([AC_LANG_PROGRAM()],[eval "r_cv_prog_cxx_flag_${ac_safe}=yes"],[eval "r_cv_prog_cxx_flag_${ac_safe}=no"])CXXFLAGS="${r_save_CXXFLAGS}"AC_LANG_POP(C++)])if eval "test \"`echo '$r_cv_prog_cxx_flag_'$ac_safe`\" = yes"; thenAC_MSG_RESULT([yes])[$2]elseAC_MSG_RESULT([no])fi])# R_PROG_CXX_FLAG### * Fortran compiler and its characteristics.## R_PROG_FC_FLIBS## ----------------## Run AC_FC_LIBRARY_LDFLAGS rename to FLIBS, and fix some known problems with FLIBS.## Only do this if the user has not already set FLIBS.AC_DEFUN([R_PROG_FC_FLIBS],[AC_BEFORE([$0], [AC_FC_LIBRARY_LDFLAGS])if test -z "${FLIBS}"; thendnldnl Historical commentdnl Currently (Autoconf 2.50 or better, it seems) FLIBS also contains alldnl elements of LIBS when AC_F77_LIBRARY_LDFLAGS is run. This is becausednl _AC_PROG_F77_V_OUTPUT() uses 'eval $ac_link' for obtaining verbosednl linker output, and AC_LANG(Fortran 77) sets up ac_link to containdnl LIBS. Most likely a bug, and a nuisance in any case ...dnl But we cannot simply eliminate the elements in FLIBS duplicated fromdnl LIBS (e.g. '-lm' should be preserved). Hence, we try to calldnl AC_FC_LIBRARY_LDFLAGS() with LIBS temporarily set to empty.r_save_LIBS="${LIBS}"LIBS=AC_FC_LIBRARY_LDFLAGSFLIBS=${FCLIBS}if test -z "${MAIN_LD}" ; thenLIBS=R_C_LIBRARY_LDFLAGSelseCLIBS=fiLIBS="${r_save_LIBS}"dnl Comments here are ancient and about F77 version ....dnl Currently g77 on Darwin links against '-lcrt1.o' (and for GCC 3.1 ordnl better also against '-lcrtbegin.o'), which (unlike '-lcrt0.o') arednl not stripped by AC_F77_LIBRARY_LDFLAGS. This in particular causesdnl R_PROG_FC_CC_COMPAT to fail. Hence, we make sure all -lcrt*.o arednl removed. In Addition, -lmx and -lSystem are implicit and theirdnl manual inclusion leads to ordering problems (remove when autoconfdnl is fixed - supposedly the CVS version is, but 2.6.0 is not).dnldnl Native f90 on HP-UX 11 comes up with '-l:libF90.a' causing troublednl when using gcc for linking. The '-l:' construction is similar todnl plain '-l' except that search order (archive/shared) given by '-a'dnl is not important. We escape such flags via '-Wl,' in case of gcc.dnl Note that the current Autoconf CVS uses _AC_LINKER_OPTION for adnl similar purpose when computing FLIBS: this uses '-Xlinker' escapesdnl for gcc and does nothing otherwise. Note also that we cannot simplydnl unconditionally escape with '${wl}' from libtool as on HP-UX we needdnl SHLIB_LD=ld for native C compilers (problem with non-PIC 'crt0.o',dnl see 'Individual platform overrides' in section 'DLL stuff' in filednl 'configure.ac'.dnldnl Using the Intel Fortran compiler (ifc) one typically gets incorrectdnl flags, as the output from _AC_PROG_F77_V_OUTPUT() contains doublednl quoted options, e.g. "-mGLOB_options_string=......", see also e.g.dnl http://www.octave.org/octave-lists/archive/octave-maintainers.2002/msg00038.html.dnl One possible solution is to change AC_F77_LIBRARY_LDFLAGS() to removednl double quotes for ifc, as it already does for the Cray cft90. As wednl prefer not to overload Autoconf code, we try to fix things here ...dnldnl As of 2.1.0 we try to tidy this up a bit.dnl 1) -lfrtbegin and -lgfortranbegin are used by g77/gfortran only for adnl Fortran main program, which we do not have.dnl 2) g77 also tends to duplicate paths via ../../.., so we canonicalizednl paths and remove duplicates.dnl 3) We do not need -L/lib etc, nor those in LDFLAGSdnl 4) We exclude path with CC will include when linking.dnldnl First try to fathom out what -Lfoo commands are unnecessary.case "${host_os}" inlinux*)r_libpath_default="/usr/lib64 /lib64 /usr/lib /lib";;solaris*)r_libpath_default="/usr/lib /lib";;*)r_libpath_default=;;esacr_extra_libs=for arg in ${LDFLAGS} ${CLIBS}; docase "${arg}" in-L*)lib=`echo ${arg} | sed "s/^-L//"`test -d "${lib}" || continue## Canonicalize (/usr/lib/gcc-lib/i686-linux/3.4.3/../../..).lib=`cd "${lib}" && ${GETWD}`r_extra_libs="${r_extra_libs} $lib";;esacdoneflibs=if test "${GCC}" = yes; thenlinker_option="-Wl,"elselinker_option=fir_save_flibs=""for arg in ${FLIBS}; docase "${arg}" in## this is not for a Fortran main program-lcrt*.o | -lfrtbegin | -lgfortranbegin | -lmx | -lSystem);;-[[a-zA-Z]]/*\" | -[[a-zA-Z]]*\\) # ifc;;-l:*)flibs="${flibs} ${linker_option}${arg}";;-L*)lib=`echo ${arg} | sed "s/^-L//"`## Do not add non-existent directories.test -d "${lib}" || continue## Canonicalize (/usr/lib/gcc-lib/i686-linux/3.4.3/../../..).lib=`cd "${lib}" && ${GETWD}`r_want_lib=true## Do not add something twice nor default paths nor those in LDFLAGSfor dir in ${r_save_flibs} ${r_libpath_default} ${r_extra_libs}; doif test "${dir}" = "${lib}"; thenr_want_lib=falsebreakfidoneif test x"${r_want_lib}" = xtrue; thenflibs="${flibs} -L${lib}"r_save_flibs="${r_save_flibs} ${lib}"fi;;*)flibs="${flibs} ${arg}";;esacdoneFLIBS="${flibs}"AC_SUBST(FLIBS)fi])# R_PROG_FC_FLIBS## R_PROG_FC_APPEND_UNDERSCORE## ----------------------------## See if the Fortran compiler appends underscores.## What we really should do is determine how to properly mangle the## names of C/C++ identifiers (potentially containing underscores) so## that they match the name-mangling scheme used by the Fortran## compiler. Autoconf has macros FC_FUNC(name, NAME)## and FC_FUNC_(name, NAME) for this. However, the F77_* macros in## the R API have one argument only and therefore cannot deal with## Fortran compilers which convert to upper case or add an extra## underscore for identifiers containing underscores. We give an error## in the former case; as ISO Fortran 77 does not allow underscores in## function names, we do nothing about the latter in F77_*## (but do in R_dlsym).AC_DEFUN([R_PROG_FC_APPEND_UNDERSCORE],[AC_REQUIRE([AC_FC_WRAPPERS])dnl DANGER! We really need the results of _AC_FC_NAME_MANGLING asdnl stored in the cache var ac_cv_fc_mangling which is not documenteddnl and hence may change ...case "${ac_cv_fc_mangling}" in"upper "*)AC_MSG_WARN([Fortran compiler uses uppercase external names])AC_MSG_ERROR([cannot use Fortran]);;esacAC_MSG_CHECKING([whether ${FC} appends underscores to external names])AC_CACHE_VAL([r_cv_prog_fc_append_underscore],[case "${ac_cv_fc_mangling}" in*", underscore, "*)r_cv_prog_fc_append_underscore=yes;;*", no underscore, "*)r_cv_prog_fc_append_underscore=no;;esac])if test -n "${r_cv_prog_fc_append_underscore}"; thenAC_MSG_RESULT([${r_cv_prog_fc_append_underscore}])elseAC_MSG_RESULT([unknown])AC_MSG_ERROR([cannot use Fortran])fiif test "${r_cv_prog_fc_append_underscore}" = yes; thenAC_DEFINE(HAVE_F77_UNDERSCORE, 1,[Define if your Fortran compiler appends an underscore toexternal names.])fiAC_MSG_CHECKING([whether ${FC} appends extra underscores to external names])AC_CACHE_VAL([r_cv_prog_fc_append_second_underscore],[case "${ac_cv_fc_mangling}" in*", extra underscore")r_cv_prog_fc_append_second_underscore=yes;;*", no extra underscore")r_cv_prog_fc_append_second_underscore=no;;esac])if test -n "${r_cv_prog_fc_append_second_underscore}"; thenAC_MSG_RESULT([${r_cv_prog_fc_append_second_underscore}])elseAC_MSG_RESULT([unknown])AC_MSG_ERROR([cannot use Fortran])fiif test "${r_cv_prog_fc_append_second_underscore}" = yes; thenAC_DEFINE(HAVE_F77_EXTRA_UNDERSCORE, 1,[Define if your Fortran compiler appends an extra_underscore toexternal names containing an underscore.])fi])# R_PROG_FC_APPEND_UNDERSCORE## R_PROG_FC_CAN_RUN## --------------------## Check whether the C/Fortran set up produces runnable code, as## a preliminary to the compatibility tests.## May fail if Fortran shared libraries are not in the library path.## As from 2.4.0 use the same code as the compatibility test, as## on at least one system the latter actually used -lgfortran## (which was broken) and the previous test here did not.AC_DEFUN([R_PROG_FC_CAN_RUN],[AC_REQUIRE([LT_LIB_M])AC_MSG_CHECKING([whether mixed C/Fortran code can be run])AC_CACHE_VAL([r_cv_prog_fc_can_run],[cat > conftestf.f <<EOFsubroutine cftest(a, b, x, y)integer a(3), b(2)double precision x(3), y(3)b(1) = a(3)/a(2)b(2) = a(3) - a(1)*a(2)y(1) = dble(a(3))/x(2)y(2) = x(3)*x(1)y(3) = (x(2)/x(1)) ** a(1)endEOF${FC} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FDdnl Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.h>#include <stdlib.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endifint main () {exit(0);}EOF]if ${CC} ${CPPFLAGS} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then## <NOTE>## This should really use MAIN_LD, and hence come after this is## determined (and necessary additions to MAIN_LDFLAGS were made).## But it seems that we currently can always use the C compiler.## Also, to be defensive there should be a similar test with SHLIB_LD## and SHLIB_LDFLAGS (and note that on HP-UX with native cc we have to## use ld for SHLIB_LD) ...## Be nice to people who put compiler architecture opts in CFLAGSif ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} -o conftest${ac_exeext} \conftest.${ac_objext} conftestf.${ac_objext} ${FLIBS} \${LIBM} 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;## </NOTE>then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`if test ${?} = 0; thenr_cv_prog_fc_can_run=yesfififi])rm -Rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_fc_can_run}"; thenAC_MSG_RESULT([yes])elseif test "${cross_compiling}" = yes; thenAC_MSG_RESULT([don't know (cross-compiling)])elseAC_MSG_WARN([cannot run mixed C/Fortran code])AC_MSG_ERROR([Maybe check LDFLAGS for paths to Fortran libraries?])fifi])# R_PROG_FC_CAN_RUN## R_PROG_FC_CC_COMPAT## --------------------## Check whether the Fortran and C compilers agree on int and double.AC_DEFUN([R_PROG_FC_CC_COMPAT],[AC_REQUIRE([LT_LIB_M])AC_MSG_CHECKING([whether ${FC} and ${CC} agree on int and double])AC_CACHE_VAL([r_cv_prog_fc_cc_compat],[cat > conftestf.f <<EOFsubroutine cftest(a, b, x, y)integer a(3), b(2)double precision x(3), y(3)b(1) = a(3)/a(2)b(2) = a(3) - a(1)*a(2)y(1) = dble(a(3))/x(2)y(2) = x(3)*x(1)y(3) = (x(2)/x(1)) ** a(1)endEOF${FC} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FDdnl Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.h>#include <stdlib.h>#include <stdio.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endifextern void F77_SYMBOL(cftest)(int *a, int *b, double *x, double *y);int main () {int a[3] = {17, 237, 2000000000}, b[2], res = 0;double x[3] = {3.14159265, 123.456789, 2.3e34}, z[3];double eps = 1e-6;double zres[3];int i, bres[2];zres[0] = (double) a[2]/x[1];zres[1] = x[2]*x[0];zres[2] = pow(x[1]/x[0], 17.0);bres[0] = a[2]/a[1];bres[1] = a[2] - a[0]*a[1];F77_SYMBOL(cftest)(a, b, x, z);if(b[0] != bres[0]) res++;if(b[1] != bres[1]) res++;for(i = 0; i < 3; i++)if(fabs(z[i]/zres[i] - 1) > eps) res++;printf("number of errors %d\n", res);exit(res);}EOF]if ${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then## <NOTE>## This should really use MAIN_LD, and hence come after this is## determined (and necessary additions to MAIN_LDFLAGS were made).## But it seems that we currently can always use the C compiler.## Also, to be defensive there should be a similar test with SHLIB_LD## and SHLIB_LDFLAGS (and note that on HP-UX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} -o conftest${ac_exeext} \conftest.${ac_objext} conftestf.${ac_objext} ${FLIBS} \${LIBM} 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;## </NOTE>then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`if test ${?} = 0; thenr_cv_prog_fc_cc_compat=yesfififi])rm -Rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_fc_cc_compat}"; thenAC_MSG_RESULT([yes])elseif test "${cross_compiling}" = yes; thenAC_MSG_RESULT([don't know (cross-compiling)])elseAC_MSG_WARN([${FC} and ${CC} disagree on int and double])AC_MSG_ERROR([Maybe change CFLAGS or FFLAGS?])fifi])# R_PROG_FC_CC_COMPAT## R_PROG_FC_CC_COMPAT_COMPLEX## ----------------------------## Check whether the Fortran and C compilers agree on double complex.AC_DEFUN([R_PROG_FC_CC_COMPAT_COMPLEX],[AC_REQUIRE([LT_LIB_M])AC_MSG_CHECKING([whether ${FC} and ${CC} agree on double complex])AC_CACHE_VAL([r_cv_prog_fc_cc_compat_complex],[cat > conftestf.f <<EOFsubroutine cftest(x)complex*16 x(3)integer ic a few tests of constructs that are sometimes missingif(x(1) .eq. x(1)) i = 0x(1) = x(1)*x(2) + x(3)endEOF${FC} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FDdnl Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.h>#include <stdlib.h>#include "confdefs.h"#include <stdio.h>#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endiftypedef union {struct {double r;double i;};double _Complex private_data_c;} Rcomplex;extern void F77_SYMBOL(cftest)(Rcomplex *x);int main () {Rcomplex z[3];z[0].r = 3.14159265;z[0].i = 2.172;z[1].i = 3.14159265;z[1].r = 2.172;z[2].r = 123.456;z[2].i = 0.123456;F77_SYMBOL(cftest)(z);printf("%f %f\n", z[0].r, z[0].i);if(fabs(z[0].r - 123.456) < 1e-4 && fabs(z[0].i - 14.71065) < 1e-4)exit(0);else exit(1);}EOF]if ${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then## <NOTE>## This should really use MAIN_LD, and hence come after this is## determined (and necessary additions to MAIN_LDFLAGS were made).## But it seems that we currently can always use the C compiler.## Also, to be defensive there should be a similar test with SHLIB_LD## and SHLIB_LDFLAGS (and note that on HP-UX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} -o conftest${ac_exeext} \conftest.${ac_objext} conftestf.${ac_objext} ${FLIBS} \${LIBM} 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;## </NOTE>then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`if test ${?} = 0; thenr_cv_prog_fc_cc_compat_complex=yesfififi])rm -Rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_fc_cc_compat_complex}"; thenAC_MSG_RESULT([yes])AC_DEFINE(HAVE_FORTRAN_DOUBLE_COMPLEX, 1,[Define if C's Rcomplex and Fortran's COMPLEX*16 can beinterchanged, and can do arithmetic on the latter.])elsewarn_fc_cc_double_complex="${FC} and ${CC} disagree on double complex"AC_MSG_WARN([${warn_fc_cc_double_complex}])fiAC_SUBST(HAVE_FORTRAN_DOUBLE_COMPLEX)])# R_PROG_FC_CC_COMPAT_COMPLEX## R_PROG_FC_CHAR_LEN_T## --------------------## Check whether the Fortran CHARACTER lengths are passed as size_t## NB: they may not actually be size_t, but we don't care about## signedness and on most 64-bit platforms a 32-bit type will be## passed in a 64-bit register or stack slot.#### (It is docuemnted that for gfortran < 8, int is used.)AC_DEFUN([R_PROG_FC_CHAR_LEN_T],[AC_CACHE_VAL([r_cv_prog_fc_char_len_t],[cat > conftestf.f <<EOFsubroutine testit()external xerblacall xerbla('abcde', -10)endEOF[cat > conftest.c <<EOF/* A C function calling a Fortran subroutine which calls xerblawritten in C, emulating how R calls BLAS/LAPACK routines */#include <stdlib.h>#include <stdio.h>#include <string.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endifextern void F77_SYMBOL(testit)(void);void F77_SYMBOL(xerbla)(const char *srname, int *info,const size_t srname_len){printf ("char len %lu\n", srname_len);if (srname_len != 5) exit(-1);if (strncmp(srname, "abcde", 5)) exit(-2);if (*info != -10) exit(-3);}int main(void){F77_SYMBOL(testit)();return 0;}EOF]r_cv_prog_fc_char_len_t=unknownfor fpieflags in "${FPIEFLAGS}" "-fPIE"; doecho "Trying FPIEFLAGS = ${fpieflags}" 1>&AS_MESSAGE_LOG_FD${FC} ${FFLAGS} ${fpieflags} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FDif ${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; thenif ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} -o conftest${ac_exeext} \conftest.${ac_objext} conftestf.${ac_objext} ${FLIBS} \1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`if test ${?} = 0; thenr_cv_prog_fc_char_len_t=size_tFPIEFLAGS="${fpieflags}"elsebreakfififidone])rm -Rf conftest conftest.* conftestf.* core])# R_PROG_FC_CHAR_LEN_T## Unused but perhaps useful## R_PROG_FC_FLAG(FLAG, [ACTION-IF-TRUE])## ---------------------------------------## Check whether the Fortran compiler handles command line option## FLAG, and set shell variable r_cv_prog_fc_flag_SFLAG accordingly## (where SFLAG is a shell-safe transliteration of FLAG).## In addition, execute ACTION-IF-TRUE in case of success.AC_DEFUN([R_PROG_FC_FLAG],[ac_safe=AS_TR_SH($1)AC_MSG_CHECKING([whether ${FC} accepts $1])AC_CACHE_VAL([r_cv_prog_fc_flag_${ac_safe}],[AC_LANG_PUSH(Fortran)r_save_FFLAGS="${FFLAGS}"FFLAGS="${FFLAGS} $1"AC_LINK_IFELSE([AC_LANG_PROGRAM()],[eval "r_cv_prog_fc_flag_${ac_safe}=yes"],[eval "r_cv_prog_fc_flag_${ac_safe}=no"])FFLAGS="${r_save_FFLAGS}"AC_LANG_POP(Fortran)])if eval "test \"`echo '$r_cv_prog_fc_flag_'$ac_safe`\" = yes"; thenAC_MSG_RESULT([yes])[$2]elseAC_MSG_RESULT([no])fi])# R_PROG_FC_FLAG## R_PROG_OBJC_M## -------------## Check whether we can figure out ObjC Make dependencies.AC_DEFUN([R_PROG_OBJC_M],[AC_MSG_CHECKING([whether we can compute ObjC Make dependencies])AC_CACHE_VAL([r_cv_prog_objc_m],[echo "#include <math.h>" > conftest.mfor prog in "${OBJC} -MM" "${OBJC} -M" "${CPP} -M" "cpp -M"; doif ${prog} ${CPPFLAGS} conftest.m 2>/dev/null | \grep 'conftest.o: conftest.m' >/dev/null; thenr_cv_prog_objc_m="${prog}"breakfidone])if test "${r_cv_prog_objc_m}" = "${OBJC} -MM"; thenr_cv_prog_objc_m="\$(OBJC) -MM"elif test "${r_cv_prog_objc_m}" = "${OBJC} -M"; thenr_cv_prog_objc_m="\$(OBJC) -M"fiif test -z "${r_cv_prog_objc_m}"; thenAC_MSG_RESULT([no])elseAC_MSG_RESULT([yes, using ${r_cv_prog_objc_m}])fi])# R_PROG_OBJC_M## R_PROG_OBJC_MAKEFRAG## --------------------## Generate a Make fragment with suffix rules for the Obj-C compiler.AC_DEFUN([R_PROG_OBJC_MAKEFRAG],[r_objc_rules_frag=Makefrag.mAC_REQUIRE([R_PROG_OBJC_M])cat << \EOF > ${r_objc_rules_frag}.m.o:$(OBJC) $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -c $< -o $[@]EOFif test -n "${r_cv_prog_objc_m}"; thencat << EOF >> ${r_objc_rules_frag}.m.d:@echo "making \$[@] from \$<"@${r_cv_prog_objc_m} \$(ALL_CPPFLAGS) $< > \$[@]EOFelsecat << \EOF >> ${r_cc_rules_frag}.m.d:@echo > $[@]EOFfiAC_SUBST_FILE(r_objc_rules_frag)])# R_PROG_OBJC_MAKEFRAG## R_PROG_OBJC_FLAG(FLAG, [ACTION-IF-TRUE])## ---------------------------------------## Check whether the Obj-C compiler handles command line option FLAG,## and set shell variable r_cv_prog_objc_flag_SFLAG accordingly (where## SFLAG is a shell-safe transliteration of FLAG).## In addition, execute ACTION-IF-TRUE in case of success.AC_DEFUN([R_PROG_OBJC_FLAG],[ac_safe=AS_TR_SH($1)if test -z "${OBJC}"; theneval r_cv_prog_objc_flag_${ac_safe}=noelseAC_MSG_CHECKING([whether ${OBJC} accepts $1])AC_CACHE_VAL([r_cv_prog_objc_flag_${ac_safe}],[AC_LANG_PUSH([Objective C])r_save_OBJCFLAGS="${OBJCFLAGS}"OBJCFLAGS="${OBJCFLAGS} $1"AC_LINK_IFELSE([AC_LANG_PROGRAM()],[eval "r_cv_prog_objc_flag_${ac_safe}=yes"],[eval "r_cv_prog_objc_flag_${ac_safe}=no"])OBJCFLAGS="${r_save_OBJCFLAGS}"AC_LANG_POP([Objective C])])if eval "test \"`echo '$r_cv_prog_objc_flag_'$ac_safe`\" = yes"; thenAC_MSG_RESULT([yes])[$2]elseAC_MSG_RESULT([no])fifi])# R_PROG_OBJC_FLAG## R_PROG_OBJC_RUNTIME## -------------------## Check for ObjC runtime and style.## Effects:## * r_cv_objc_runtime## either "none" or flags necessary to link ObjC runtime## in the latter case they are also appended to OBJC_LIBS## * r_cv_objc_runtime_style## one of: unknown, gnu, next## * conditionals OBJC_GNU_RUNTIME and OBJC_NEXT_RUNTIMEAC_DEFUN([R_PROG_OBJC_RUNTIME],[if test -z "${OBJC}"; thenr_cv_objc_runtime=noneelseAC_LANG_PUSH([Objective C])# Don't check for headers, becasue that will require Obj-C preprocessor unconditionally (autoconf bug?)#AC_MSG_CHECKING([for ObjC headers])# Check for common headers#AC_CHECK_HEADERS_ONCE([objc/objc.h objc/objc-api.h objc/Object.h], [ ac_has_objc_headers=yes ], [# AC_MSG_FAILURE([Objective C runtime headers were not found])#])# FIXME: we don't check whether the runtime needs -lpthread which is possible# (empirically Linux GNU and Apple runtime don't)AC_CACHE_CHECK([for ObjC runtime library], [r_cv_objc_runtime], [save_OBJCFLAGS="$OBJCFLAGS"save_LIBS="$LIBS"r_cv_objc_runtime=for libobjc in objc objc-gnu objc-lf objc-lf2; doLIBS="${save_LIBS} -l${libobjc}"#OBJCFLAGS="$OBJCFLAGS $PTHREAD_CFLAGS -fgnu-runtime"AC_LINK_IFELSE([AC_LANG_PROGRAM([#undef __OBJC2__#include <objc/Object.h>], [@<:@Object class@:>@;])], [r_cv_objc_runtime="-l${libobjc}"break])doneLIBS="$save_LIBS"OBJCFLAGS="$save_OBJCFLAGS"])OBJC_LIBS="${r_cv_objc_runtime} ${OBJC_LIBS}"if test "z${r_cv_objc_runtime}" != z; thenAC_CACHE_CHECK([for ObjC runtime style], [r_cv_objc_runtime_style], [save_OBJCFLAGS="$OBJCFLAGS"save_LIBS="$LIBS"r_cv_objc_runtime_style=unknownLIBS="${OBJC_LIBS} $LIBS"for objc_lookup_class in objc_lookup_class objc_lookUpClass; doAC_LINK_IFELSE([AC_LANG_PROGRAM([/* see PR#15107 */#undef __OBJC2__#include <objc/objc.h>#include <objc/objc-api.h>], [id class = ${objc_lookup_class} ("Object");])], [if test ${objc_lookup_class} = objc_lookup_class; thenr_cv_objc_runtime_style=gnuelser_cv_objc_runtime_style=nextfibreak])doneLIBS="$save_LIBS"OBJCFLAGS="$save_OBJCFLAGS"])fiif test "${r_cv_objc_runtime_style}" = gnu; thenAC_DEFINE([OBJC_GNU_RUNTIME], 1, [Define if using GNU-style Objective C runtime.])fiif test "${r_cv_objc_runtime_style}" = next; thenAC_DEFINE([OBJC_NEXT_RUNTIME], 1, [Define if using NeXT/Apple-style Objective C runtime.])fiAC_LANG_POP([Objective C])fi # -n ${OBJC}])## R_PROG_OBJCXX_WORKS(compiler, [action on success], [action on failure])## -------------------#### Check whether $1 compiles ObjC++ code successfully.## The default action on success is to set OBJCXX to $1AC_DEFUN([R_PROG_OBJCXX_WORKS],[AC_MSG_CHECKING([whether $1 can compile ObjC++])dnl we don't use AC_LANG_xx because ObjC++ is not defined as a language (yet)dnl (the test program is from the gcc test suite)dnl but it needed an #undef (PR#15107)cat << \EOF > conftest.mm#include <Foundation/Foundation.h>#include <iostream>@interface Greeter : NSObject- (void) greet: (const char *)msg;@end@implementation Greeter- (void) greet: (const char *)msg { std::cout << msg; }@endintmain (){std::cout << "Hello from C++\n";Greeter *obj = @<:@Greeter new@:>@;@<:@obj greet: "Hello from Objective-C\n"@:>@;}EOFecho "running: $1 -c conftest.mm ${CPPFLAGS} ${OBJCXXFLAGS}" >&AS_MESSAGE_LOG_FDif $1 -c conftest.mm ${CPPFLAGS} ${OBJCXXFLAGS} >&AS_MESSAGE_LOG_FD 2>&1; thenAC_MSG_RESULT([yes])rm -Rf conftest conftest.* corem4_default([$2], OBJCXX=$1)elseAC_MSG_RESULT([no])rm -f conftest.mm[$3]fi]) # R_PROG_OBJCXX_WORKS## R_PROG_OBJCXX## -------------## Check for ObjC++ compiler and set+subst OBJCXX correspondingly.#### We could add Objective-C++ language definition, but we still hope## that autoconf will do that at some point, so we'll confine ourselves## to finding a working compiler.AC_DEFUN([R_PROG_OBJCXX],[AC_BEFORE([AC_PROG_CXX], [$0])AC_BEFORE([AC_PROG_OBJC], [$0])AC_CACHE_VAL([r_cv_OBJCXX],[if test -n "${OBJCXX}"; thenR_PROG_OBJCXX_WORKS(${OBJCXX},,OBJCXX='')fi# try the sequence $OBJCXX, $CXX, $OBJCif test -z "${OBJCXX}"; thenR_PROG_OBJCXX_WORKS(${CXX},,if test -z "${OBJC}"; thenR_PROG_OBJCXX_WORKS(${OBJC})fi)fir_cv_OBJCXX="${OBJCXX}"])OBJCXX="${r_cv_OBJCXX}"AC_MSG_CHECKING([for Objective C++ compiler])if test -z "${OBJCXX}"; thenAC_MSG_RESULT([no working ObjC++ compiler found])elseAC_MSG_RESULT([${OBJCXX}])fiAC_SUBST(OBJCXX)])# R_PROG_OBJCXX### * Library functions## R_FUNC_CALLOC## -------------AC_DEFUN([R_FUNC_CALLOC],[AC_CACHE_CHECK([for working calloc], [r_cv_func_calloc_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>int main () {int *p = calloc(0, sizeof(int));exit(p == 0);}]])],[r_cv_func_calloc_works=yes],[r_cv_func_calloc_works=no],[r_cv_func_calloc_works=no])])if test "x${r_cv_func_calloc_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_CALLOC, 1,[Define if calloc(0) returns a null pointer.])fi])# R_FUNC_CALLOC## R_FUNC_ISFINITE## ---------------AC_DEFUN([R_FUNC_ISFINITE],[AC_CACHE_CHECK([for working isfinite], [r_cv_func_isfinite_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>#include <stdlib.h>#include "confdefs.h"int main () {#ifdef HAVE_DECL_ISFINITEexit(isfinite(1./0.) | isfinite(0./0.) | isfinite(-1./0.));#elseexit(1);#endif}]])],[r_cv_func_isfinite_works=yes],[r_cv_func_isfinite_works=no],[r_cv_func_isfinite_works=no])])if test "x${r_cv_func_isfinite_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_ISFINITE, 1,[Define if isfinite() is correct for -Inf/NaN/Inf.])fi])# R_FUNC_ISFINITE## R_FUNC_LOG1P## ------------## Suggested by Nelson H. F. Beebe <beebe@math.utah.edu> to deal with## inaccuracies on at least NetBSD 1.6 and OpenBSD 3.2.## However, don't test all the way into denormalized x (he had k > -1074)## and at x = 2^-54 (d - x)/x is around 3e-17.AC_DEFUN([R_FUNC_LOG1P],[AC_CACHE_CHECK([for working log1p], [r_cv_func_log1p_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>#include <stdlib.h>#include "confdefs.h"int main () {#ifdef HAVE_LOG1Pint k;double d;double x = 1.0;for(k = 0; k < 53; k++) x /= 2.0;/* log(1+x) = x - (1/2)x^2 + (1/3)x^3 - (1/4)x^4 ... *//* = x for x sufficiently small */for(k = -54; k > -1022; --k) {x /= 2.0;if(x == 0.0)exit(0); /* OK: reached underflow limit */d = log1p(x);if(d == 0.0)exit(1); /* ERROR: inaccurate log1p() *//* for large k, ((1/2)x^2)/x might appear in the guard digits */if(k < -80 && d != x)exit(1); /* ERROR: inaccurate log1p() */}exit(0);#elseexit(1);#endif}]])],[r_cv_func_log1p_works=yes],[r_cv_func_log1p_works=no],[r_cv_func_log1p_works=no])])if test "x${r_cv_func_log1p_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_LOG1P, 1,[Define if log1p() exists and is accurate enough.])RMATH_HAVE_WORKING_LOG1P="# define HAVE_WORKING_LOG1P 1"elseRMATH_HAVE_WORKING_LOG1P="# undef HAVE_WORKING_LOG1P"fiAC_SUBST(RMATH_HAVE_WORKING_LOG1P)])# R_FUNC_LOG1P## R_FUNC_FTELL## ------------AC_DEFUN([R_FUNC_FTELL],[AC_CACHE_CHECK([whether ftell works correctly on files opened for append],[r_cv_working_ftell],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <stdio.h>#ifdef HAVE_UNISTD_H# include <unistd.h> // for unlink#endifint main(void) {FILE *fp;long pos;fp = fopen("testit", "wb");fwrite("0123456789\n", 11, 1, fp);fclose(fp);fp = fopen("testit", "ab");pos = ftell(fp);fclose(fp);unlink("testit");exit(pos != 11);}]])],[r_cv_working_ftell=yes],[r_cv_working_ftell=no],[r_cv_working_ftell=no])])if test "x${r_cv_working_ftell}" = xyes; thenAC_DEFINE(HAVE_WORKING_FTELL, 1,[Define if your ftell works correctly on files opened for append.])fi])# R_FUNC_FTELL### * Headers## R_HEADER_SETJMP## ---------------AC_DEFUN([R_HEADER_SETJMP],[AC_CACHE_CHECK([whether setjmp.h is POSIX.1 compatible],[r_cv_header_setjmp_posix],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <setjmp.h>]],[[sigjmp_buf b;sigsetjmp(b, 0);siglongjmp(b, 1);]])],[r_cv_header_setjmp_posix=yes],[r_cv_header_setjmp_posix=no])])AC_CHECK_DECLS([sigsetjmp, siglongjmp], , , [#include <setjmp.h>])if test "$ac_cv_have_decl_sigsetjmp" = no; thenr_cv_header_setjmp_posix=nofiif test "$ac_cv_have_decl_siglongjmp" = no; thenr_cv_header_setjmp_posix=nofiif test "${r_cv_header_setjmp_posix}" = yes; thenAC_DEFINE(HAVE_POSIX_SETJMP, 1,[Define if you have POSIX.1 compatible sigsetjmp/siglongjmp.])fi])# R_HEADER_SETJMP## R_HEADER_GLIBC2## ---------------AC_DEFUN([R_HEADER_GLIBC2],[AC_CACHE_CHECK([for GNU C library with version >= 2],[r_cv_header_glibc2],[AC_EGREP_CPP([yes],[#include <stdio.h>#if defined __GLIBC__ && __GLIBC__ >= 2yes#endif],[r_cv_header_glibc2=yes],[r_cv_header_glibc2=no],[r_cv_header_glibc2=no])])if test "${r_cv_header_glibc2}" = yes; thenAC_DEFINE(HAVE_GLIBC2, 1,[Define if you have the GNU C library version >= 2.This is needed to fix a problem with getting the prototypeof strptime().])fi])# R_HEADER_GLIBC2### * Types## R_TYPE_SOCKLEN## --------------AC_DEFUN([R_TYPE_SOCKLEN],[AC_MSG_CHECKING([for type of socket length])AC_CACHE_VAL([r_cv_type_socklen],[for t in socklen_t size_t int; doAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>#include <sys/types.h>#ifdef HAVE_SYS_SOCKET_H# include <sys/socket.h>#endif#ifdef Win32# include <winsock.h>#endif]],[[(void)getsockopt (1, 1, 1, NULL, (${t} *)NULL)]])],[r_cv_type_socklen=${t}; break],[r_cv_type_socklen=])done])dnl size_t works on Windows but is unsigned and int is correctcase "${host_os}" incygwin*|mingw*|windows*|winnt|msys)r_cv_type_socklen=int;;esacif test "x${r_cv_type_socklen}" = x; thenwarn_type_socklen="could not determine type of socket length"AC_MSG_WARN([${warn_type_socklen}])elseAC_MSG_RESULT([${r_cv_type_socklen} *])fiAC_DEFINE_UNQUOTED(R_SOCKLEN_T, ${r_cv_type_socklen},[Type for socket lengths: socklen_t, sock_t, int?])])# R_TYPE_SOCKLEN## R_HAVE_KEYSYM## -------------## Check whether X11/X.h has KeySym typedef-ed.AC_DEFUN([R_TYPE_KEYSYM],[AC_REQUIRE([R_X11])if test "${use_X11}" = yes; thenr_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"AC_CHECK_TYPE([KeySym],r_cv_type_keysym=yes,r_cv_type_keysym=no,[#include <X11/X.h>])CPPFLAGS="${r_save_CPPFLAGS}"if test "${r_cv_type_keysym}" = yes; thenAC_DEFINE(HAVE_KEYSYM, 1,[Define if you have KeySym defined in X11.])fifi])# R_TYPE_KEYSYM### * System services## R_X11## -----## Updated for R 2.5.0. We need -lXt, and nowadays that is unbundled.AC_DEFUN([R_X11],[AC_PATH_XTRA # standard X11 search macrouse_X11="no"if test -z "${no_x}"; then## now we look for Xt and its header: it seems Intrinsic.h is key.r_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"AC_CHECK_HEADER(X11/Intrinsic.h)CPPFLAGS="${r_save_CPPFLAGS}"if test "${ac_cv_header_X11_Intrinsic_h}" = yes ; thenAC_CHECK_LIB(Xt, XtToolkitInitialize, [have_Xt=yes], [have_Xt=no],[${X_LIBS} -lX11])if test "${have_Xt}" = yes; thenuse_X11="yes"fififiif test "x${use_X11}" = "xyes"; thenAC_DEFINE(HAVE_X11, 1,[Define if you have the X11 headers and libraries, and wantthe X11 GUI to be built.])X_LIBS="${X_LIBS} -lX11 -lXt"elseif test "x${with_x}" != "xno"; thenAC_MSG_ERROR([--with-x=yes (default) and X11 headers/libs are not available])fifiAC_MSG_RESULT([using X11 ... ${use_X11}])])# R_X11## R_X11_Xmu## ---------## test for -lXmu and for X11/Xmu/Xatom.h header (for XA_CLIPBOARD).AC_DEFUN([R_X11_Xmu],[if test "${use_X11}" = yes; thenr_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${X_CFLAGS}"AC_CHECK_HEADER(X11/Xmu/Atoms.h)CPPFLAGS="${r_save_CPPFLAGS}"if test "${ac_cv_header_X11_Xmu_Atoms_h}" = yes ; thenAC_CHECK_LIB(Xmu, XmuInternAtom, [use_Xmu=yes], [use_Xmu=no], ${X_LIBS})if test "${use_Xmu}" = yes; thenAC_DEFINE(HAVE_X11_Xmu, 1,[Define if you have the X11/Xmu headers and libraries.])X_LIBS="${X_LIBS} -lXmu"fififi])# R_X11_XMu## R_CHECK_FRAMEWORK(function, framework,## [action-if-found], [action-if-not-found],## [other-libs])## generic check for a framework, a function should be supplied to## make sure the proper framework is found.## default action is to set have_..._fw to yes/no and to define## HAVE_..._FW if presentAC_DEFUN([R_CHECK_FRAMEWORK],[ AC_CACHE_CHECK([for $1 in $2 framework], [r_cv_check_fw_$2],r_cv_check_fw_save_LIBS=$LIBSr_cv_check_fw_$2=noLIBS="-framework $2 $5 $LIBS"AC_LINK_IFELSE([AC_LANG_CALL([],[$1])],[r_cv_check_fw_$2="-framework $2"],[])LIBS=$r_cv_check_fw_save_LIBS)dnl define HAVE_..._FW even if cachedAS_IF([test "$r_cv_check_fw_$2" != no],[m4_default([$3], [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$2_FW), 1, [Defined if framework $2 is present])AS_TR_SH(have_$2_fw)=yes])],[m4_default([$4], AS_TR_SH(have_$2_fw)=no)])])# R_CHECK_FRAMEWORK## R_AQUA## ------AC_DEFUN([R_AQUA],[use_aqua=noif test "${want_aqua}" = yes; thencase "${host_os}" indarwin*)## we can build AQUA only with CoreFoundation, otherwise## Quartz device won't buildif test -n "${r_cv_check_fw_CoreFoundation}" ; thenuse_aqua=yeselseAC_MSG_WARN([requested 'aqua' but CoreFoundation was not found])fi;;esacfiif test "${use_aqua}" = yes; thenAC_DEFINE(HAVE_AQUA, 1,[Define if you have the Aqua headers and libraries,and want to include support for R.appand for the quartz() device to be built.])fi])# R_AQUA## R_OBJC_FOUNDATION_TEST## ---------------------## Checks whether ObjC code using Foundation classes can be compiled and sets## ac_objc_foundation_works accordingly (yes/no)AC_DEFUN([R_OBJC_FOUNDATION_TEST],[if test -n "$1"; then AC_MSG_CHECKING([$1]); fiac_objc_foundation_works=noAC_LINK_IFELSE([AC_LANG_PROGRAM([#import <Foundation/Foundation.h>], [[NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];NSString *s = @"hello, world";[pool release];]])], [ ac_objc_foundation_works=yes ])if test "${ac_objc_foundation_works}" = yes; thenif test -n "$1"; then AC_MSG_RESULT(yes); fi[$2]elseif test -n "$1"; then AC_MSG_RESULT(no); fi[$3]fi])## R_OBJC_FOUNDATION## -----------------## Checks whether a Foundation framework implementation is available.## * ac_objc_foundation: yes|no## * FOUNDATION_CPPFLAGS, FOUNDATION_LIBS (subst)#### Currently supports (in order of precedence):## - native (or custom FOUNDATION_LIBS/CPPFLAGS)## - Apple Foundation (via -framework Foundation)## - libFoundation## - GNUstepAC_DEFUN([R_OBJC_FOUNDATION],[ac_objc_foundation=noif test -n "${OBJC}"; thenr_foundation_cached=yesAC_MSG_CHECKING([for cached Foundation settings])AC_CACHE_VAL([r_cv_cache_foundation_flags], [r_cv_cache_foundation_flags=yesr_foundation_cached=no])AC_MSG_RESULT([${r_foundation_cached}])# if so, fetch them from the cacheif test "${r_foundation_cached}" = yes; thenAC_CACHE_CHECK([FOUNDATION_LIBS], [r_cv_FOUNDATION_LIBS])FOUNDATION_LIBS="${r_cv_FOUNDATION_LIBS}"AC_CACHE_CHECK([FOUNDATION_CPPFLAGS], [r_cv_FOUNDATION_CPPFLAGS])FOUNDATION_CPPFLAGS="${r_cv_FOUNDATION_CPPFLAGS}"elseAC_LANG_PUSH([Objective C])rof_save_LIBS="${LIBS}"rof_save_CPPFLAGS="${CPPFLAGS}"LIBS="${LIBS} ${FOUNDATION_LIBS}"CPPFLAGS="${CPPFLAGS} ${FOUNDATION_CPPFLAGS}"R_OBJC_FOUNDATION_TEST([whether default Foundation framework works])if test "${ac_objc_foundation_works}" != yes; thenLIBS="${rof_save_LIBS} -framework Foundation"CPPFLAGS="${rof_save_CPPFLAGS}"R_OBJC_FOUNDATION_TEST([whether -framework Foundation works],[FOUNDATION_LIBS='-framework Foundation'])fiif test "${ac_objc_foundation_works}" != yes; thenLIBS="${rof_save_LIBS} -lFoundation ${OBJC_LIBS}"R_OBJC_FOUNDATION_TEST([whether libFoundation works],[FOUNDATION_LIBS='-lFoundation'])fiif test "${ac_objc_foundation_works}" != yes; thenLIBS="${rof_save_LIBS}"ac_working_gnustep=noAC_MSG_CHECKING([for GNUstep])if test -z "${GNUSTEP_SYSTEM_ROOT}"; thenfor dir in /usr/lib/GNUstep /usr/local/lib/GNUstep; doif test -e "${dir}/System/Makefiles"; then GNUSTEP_SYSTEM_ROOT="${dir}/System"; break; fidonefiif test -z "${GNUSTEP_SYSTEM_ROOT}"; thenAC_MSG_RESULT([no])elseAC_MSG_RESULT([in ${GNUSTEP_SYSTEM_ROOT}])# this is a hack - we extract the relevant flags from GNUstep's makefiles.# in order to do that, we must setup the entire GNUstep environment which we do# in a separate script as to not pollute configure's environmentcat << EOF > gnusteptest.sh#!/bin/sh. ${GNUSTEP_SYSTEM_ROOT}/Library/Makefiles/GNUstep.sh${MAKE} -s -f gnustepmake -f \${GNUSTEP_MAKEFILES}/common.make -f \${GNUSTEP_MAKEFILES}/rules.make \${1}EOFcat << \EOF > gnustepmakeprintcppflags: FORCE@echo $(ALL_CPPFLAGS) $(ADDITIONAL_OBJCFLAGS) $(AUXILIARY_OBJCFLAGS) $(GNUSTEP_HEADERS_FLAGS)printlibs: FORCE@echo $(ALL_LIB_DIRS) $(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)FORCE:EOFGNUSTEP_CPPFLAGS=`sh gnusteptest.sh printcppflags`GNUSTEP_LIBS=`sh gnusteptest.sh printlibs`#echo " GNUstep CPPFLAGS: ${GNUSTEP_CPPFLAGS}"#echo " GNUstep LIBS: ${GNUSTEP_LIBS}"LIBS="${rof_save_LIBS} ${GNUSTEP_LIBS}"CPPFLAGS="${rof_save_CPPFLAGS} ${GNUSTEP_CPPFLAGS}"rm -f gnusteptest.sh gnustepmakeR_OBJC_FOUNDATION_TEST([whether GNUstep works],[FOUNDATION_CPPFLAGS="${GNUSTEP_CPPFLAGS}"FOUNDATION_LIBS="${GNUSTEP_LIBS}"])fi # -n GNUSTEP_SYSTEM_ROOTfiLIBS="${rof_save_LIBS}"CPPFLAGS="${rof_save_CPPFLAGS}"AC_SUBST(FOUNDATION_CPPFLAGS)AC_SUBST(FOUNDATION_LIBS)AC_CACHE_VAL([r_cv_FOUNDATION_CPPFLAGS],[r_cv_FOUNDATION_CPPFLAGS="${FOUNDATION_CPPFLAGS}"])AC_CACHE_VAL([r_cv_FOUNDATION_LIBS],[r_cv_FOUNDATION_LIBS="${FOUNDATION_LIBS}"])AC_LANG_POP([Objective C])ac_objc_foundation=${ac_objc_foundation_works}fi # not cached flagsfi # -n ${OBJC}AC_CACHE_CHECK([for working Foundation implementation], [r_cv_objc_foundation], [r_cv_objc_foundation="${ac_objc_foundation}"])])## R_IEEE_754## ----------## According to C99, isnan and isfinite are macros in math.h,## but some older systems have isnan as a function (possibly as well).AC_DEFUN([R_IEEE_754],[AC_CHECK_FUNCS([isnan])AC_CHECK_DECLS([isfinite, isnan], , , [#include <math.h>])AC_CACHE_CHECK([whether you have IEEE 754 floating-point arithmetic],[r_cv_ieee_754],[if (test "${ac_cv_func_isnan}" = yes \|| test "${ac_cv_have_decl_isnan}" = yes); thenr_cv_ieee_754=yeselser_cv_ieee_754=nofi])if test "${r_cv_ieee_754}" = yes; thenAC_DEFINE(IEEE_754, 1,[Define if you have IEEE 754 floating point arithmetic.])elseAC_MSG_ERROR([IEEE 754 floating-point arithmetic is required])fi])# R_IEEE_754## R_BSD_NETWORKING## ----------------AC_DEFUN([R_BSD_NETWORKING],[AC_CACHE_CHECK([for BSD networking],[r_cv_bsd_networking],[case "${host_os}" incygwin*|mingw*|windows*|winnt|msys)r_cv_bsd_networking=yes;;esacif test "${ac_cv_bsd_networking}" != yes \&& test "${ac_cv_header_netdb_h}" = yes \dnl needed for Rhttpd.c but missed before R 3.2.4&& test "${ac_cv_header_arpa_inet_h}" = yes \&& test "${ac_cv_header_netinet_in_h}" = yes \&& test "${ac_cv_header_sys_socket_h}" = yes \&& test "${ac_cv_search_connect}" != no \&& test "${ac_cv_search_gethostbyname}" != no; thenr_cv_bsd_networking=yesfiif test "${ac_cv_bsd_networking}" = no; thenAC_MSG_ERROR([BSD networking functions are required])fi])])# R_BSD_NETWORKING## R_BITMAPS## ---------## This is the version used without pkg-config## Here we only need any old -lz, and don't need zlib.h.## However, we do need recent enough libpng and jpeg, and so check both## the header versions and for key routines in the library.## The png code will do a run-time check of the consistency of libpng## versions.AC_DEFUN([R_BITMAPS],[BITMAP_CPPFLAGS=BITMAP_LIBS=if test "${use_jpeglib}" = yes; then_R_HEADER_JPEGLIBhave_jpeg=${r_cv_header_jpeglib_h}if test "${have_jpeg}" = yes; thenAC_CHECK_LIB(jpeg, jpeg_destroy_compress,[have_jpeg=yes],[have_jpeg=no],[${LIBS}])fiif test "${have_jpeg}" = yes; thenBITMAP_LIBS="-ljpeg"AC_DEFINE(HAVE_JPEG, 1,[Define if you have the JPEG headers and libraries.])fifiif test "${use_libpng}" = yes; thenAC_CHECK_LIB(z, main, [have_png=yes], [have_png=no])if test "${have_png}" = yes; then_R_HEADER_PNGhave_png=${r_cv_header_png_h}fiif test "${have_png}" = yes; thenAC_CHECK_LIB(png, png_create_write_struct,[have_png=yes],[have_png=no],[-lz ${LIBS}])fiif test "${have_png}" = yes; thenBITMAP_LIBS="${BITMAP_LIBS} -lpng -lz"AC_DEFINE(HAVE_PNG, 1,[Define if you have the PNG headers and libraries.])fifiif test "${use_libtiff}" = yes; thenAC_CHECK_HEADERS(tiffio.h)if test "x${ac_cv_header_tiffio_h}" = xyes ; then# may need to resolve jpeg routinesAC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no], [${BITMAP_LIBS}])if test "x${have_tiff}" = xyes; thenAC_DEFINE(HAVE_TIFF, 1, [Define this if libtiff is available.])BITMAP_LIBS="-ltiff ${BITMAP_LIBS}"else# tiff 4.0.x may need lzma too: SU's static build does# OTOH, it will normally be in LIBS at this point in configureunset ac_cv_lib_tiff_TIFFOpenAC_MSG_NOTICE([checking for libtiff with -llzma])AC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no], [-llzma ${BITMAP_LIBS}])if test "x${have_tiff}" = xyes; thenAC_DEFINE(HAVE_TIFF, 1, [Define this if libtiff is available.])BITMAP_LIBS="-ltiff -llzma ${BITMAP_LIBS}"elsehave_tiff=nofifiif test "x${have_tiff}" != xyes; then# tiff >= 4.1.0 may need webp too:# (actually, it could also need jbig zstd libdeflate ....)unset ac_cv_lib_tiff_TIFFOpenAC_MSG_NOTICE([checking for libtiff with -lwebp])AC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no], [-lwebp -llzma ${BITMAP_LIBS}])if test "x${have_tiff}" = xyes; thenAC_DEFINE(HAVE_TIFF, 1, [Define this if libtiff is available.])BITMAP_LIBS="-ltiff -lwebp -llzma ${BITMAP_LIBS}"elsehave_tiff=nofifiif test "x${have_tiff}" != xyes; then# also try with webp and zstd (needed with libtiff 4.4 from MXE/Rtools)unset ac_cv_lib_tiff_TIFFOpenAC_MSG_NOTICE([checking for libtiff with -lwebp -lzstd])AC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no], [-lwebp -lzstd -llzma ${BITMAP_LIBS}])if test "x${have_tiff}" = xyes; thenAC_DEFINE(HAVE_TIFF, 1, [Define this if libtiff is available.])BITMAP_LIBS="-ltiff -lwebp -lzstd -llzma ${BITMAP_LIBS}"elsehave_tiff=nofifififiAC_SUBST(BITMAP_CPPFLAGS)AC_SUBST(BITMAP_LIBS)])# R_BITMAPS## R_BITMAPS2## ---------## This is the version used with pkg-configAC_DEFUN([R_BITMAPS2],[BITMAP_CPPFLAGS=BITMAP_LIBS=if test "${use_jpeglib}" = yes; thenAC_MSG_CHECKING([if pkg-config knows about libjpeg])save_CPPFLAGS=${CPPFLAGS}## IJG version 9c (Jan 2018) has support as libjpeg.## libjpeg-turbo has had this for a while.if "${PKG_CONFIG}" --exists libjpeg; thenAC_MSG_RESULT([yes])JPG_CPPFLAGS=`"${PKG_CONFIG}" --cflags libjpeg`JPG_LIBS=`"${PKG_CONFIG}" --libs libjpeg`CPPFLAGS="${CPPFLAGS} ${JPG_CPPFLAGS}"elseAC_MSG_RESULT([no: run 'pkg-config --print-errors libjpeg' for further info])fi_R_HEADER_JPEGLIBCPPFLAGS=${save_CPPFLAGS}have_jpeg=${r_cv_header_jpeglib_h}if test "${have_jpeg}" = yes; thenAC_CHECK_LIB(jpeg, jpeg_destroy_compress,[have_jpeg=yes], [have_jpeg=no], [${JPG_LIBS} ${LIBS}])fiif test "${have_jpeg}" = yes; thenif test -n "${JPG_LIBS}"; thenBITMAP_LIBS="${JPG_LIBS}"elseBITMAP_LIBS=-ljpegfiAC_DEFINE(HAVE_JPEG, 1,[Define if you have the JPEG headers and libraries.])fifiif test "${use_libpng}" = yes; thenAC_MSG_CHECKING([if pkg-config knows about libpng])if "${PKG_CONFIG}" --exists libpng; thenAC_MSG_RESULT([yes])save_CPPFLAGS=${CPPFLAGS}PNG_CPPFLAGS=`"${PKG_CONFIG}" --cflags libpng`CPPFLAGS="${CPPFLAGS} ${PNG_CPPFLAGS}"_R_HEADER_PNGhave_png=${r_cv_header_png_h}CPPFLAGS=${save_CPPFLAGS}if test "${have_png}" = yes; thenPNG_LIBS=`"${PKG_CONFIG}" --libs libpng`AC_CHECK_LIB(png, png_create_write_struct,[have_png=yes], [have_png=no], [${PNG_LIBS} ${LIBS}])if test "${have_png}" = no; thendnl currently this is the same as --libs, but might change.unset ac_cv_lib_png_png_create_write_structAC_MSG_NOTICE([checking for libpng with static libs])PNG_LIBS=`"${PKG_CONFIG}" --static --libs libpng`AC_CHECK_LIB(png, png_create_write_struct,[have_png=yes], [have_png=no], [${PNG_LIBS} ${LIBS}])fifiif test "${have_png}" = yes; thenBITMAP_CPPFLAGS="${BITMAP_CPPFLAGS} ${PNG_CPPFLAGS}"BITMAP_LIBS="${BITMAP_LIBS} ${PNG_LIBS}"AC_DEFINE(HAVE_PNG, 1,[Define if you have the PNG headers and libraries.])fielseAC_MSG_RESULT([no: run 'pkg-config --print-errors libpng' for further info])fifiif test "${use_libtiff}" = yes; thenAC_MSG_CHECKING([if pkg-config knows about libtiff])mod=## pkg-config support was introduced in libtiff 4.0.0## I guess the module name might change in future, so## program defensively here.if "${PKG_CONFIG}" --exists libtiff-4; thenAC_MSG_RESULT([yes])mod=libtiff-4elseAC_MSG_RESULT([no: run 'pkg-config --print-errors libtiff-4' for further info])fiif test -n "${mod}"; thensave_CPPFLAGS=${CPPFLAGS}TIF_CPPFLAGS=`"${PKG_CONFIG}" --cflags ${mod}`CPPFLAGS="${CPPFLAGS} ${TIF_CPPFLAGS}"AC_CHECK_HEADERS(tiffio.h)CPPFLAGS=${save_CPPFLAGS}if test "x${ac_cv_header_tiffio_h}" = xyes ; thenTIF_LIBS=`"${PKG_CONFIG}" --libs ${mod}`AC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no],[${TIF_LIBS} ${BITMAP_LIBS}])if test "x${have_tiff}" = xno; thenunset ac_cv_lib_tiff_TIFFOpenAC_MSG_NOTICE([checking for libtiff with static libs])TIF_LIBS=`"${PKG_CONFIG}" --static --libs ${mod}`AC_CHECK_LIB(tiff, TIFFOpen, [have_tiff=yes], [have_tiff=no],[${TIF_LIBS} ${BITMAP_LIBS}])fiif test "x${have_tiff}" = xyes; thenAC_DEFINE(HAVE_TIFF, 1, [Define this if libtiff is available.])BITMAP_LIBS="${TIF_LIBS} ${BITMAP_LIBS}"BITMAP_CPPFLAGS="${BITMAP_CPPFLAGS} ${TIF_CPPFLAGS}"fifififiAC_SUBST(BITMAP_CPPFLAGS)AC_SUBST(BITMAP_LIBS)])# R_BITMAPS2## _R_HEADER_JPEGLIB## -----------------## Set shell variable r_cv_header_jpeglib_h to 'yes' if a recent enough## jpeglib.h is found, and to 'no' otherwise.AC_DEFUN([_R_HEADER_JPEGLIB],[AC_CACHE_CHECK([if jpeglib version >= 6b],[r_cv_header_jpeglib_h],AC_EGREP_CPP([yes],[#include <jpeglib.h>#if (JPEG_LIB_VERSION >= 62)yes#endif],[r_cv_header_jpeglib_h=yes],[r_cv_header_jpeglib_h=no]))])# _R_HEADER_JPEGLIB## _R_HEADER_PNG## -------------## Set shell variable r_cv_header_png_h to 'yes' if a recent enough## 'png.h' is found, and to 'no' otherwise.AC_DEFUN([_R_HEADER_PNG],[AC_CACHE_CHECK([if libpng version >= 1.2.7],[r_cv_header_png_h],AC_EGREP_CPP([yes],[#include <png.h>#if (PNG_LIBPNG_VER >= 10207)yes#endif],[r_cv_header_png_h=yes],[r_cv_header_png_h=no]))])# _R_HEADER_PNG## _R_PATH_TCL_CONFIG## ------------------## Try finding tclConfig.sh in common library directories and their## tcl$x.$y subdirectories. Set shell variable r_cv_path_TCL_CONFIG## to the entire path of the script if found, and leave it empty## otherwise.## /opt/csw/lib and /usr/sfw/lib are for Solaris (blastwave and sunfreeware## respectively).## /opt/freeware/lib is for 'IBM AIX Toolbox for Linux Applications'## We want to look in LIBnn only here.AC_DEFUN([_R_PATH_TCL_CONFIG],[AC_MSG_CHECKING([for tclConfig.sh in library (sub)directories])AC_CACHE_VAL([r_cv_path_TCL_CONFIG],[for ldir in /usr/local/${LIBnn} /usr/${LIBnn} /${LIBnn} /opt/lib /sw/lib /opt/csw/lib /usr/sfw/lib /opt/freeware/lib; dofor dir in \${ldir} \`ls -d ${ldir}/tcl[[8-9]].[[0-9]]* 2>/dev/null | sort -r`; doif test -f ${dir}/tclConfig.sh; thenr_cv_path_TCL_CONFIG="${dir}/tclConfig.sh"break 2fidonedone])if test -n "${r_cv_path_TCL_CONFIG}"; thenAC_MSG_RESULT([${r_cv_path_TCL_CONFIG}])elseAC_MSG_RESULT([no])fi])# _R_PATH_TCL_CONFIG## _R_PATH_TK_CONFIG## ------------------## Try finding tkConfig.sh in common library directories and their## tk$x.$y subdirectories. Set shell variable r_cv_path_TK_CONFIG## to the entire path of the script if found, and leave it empty## otherwise.AC_DEFUN([_R_PATH_TK_CONFIG],[AC_MSG_CHECKING([for tkConfig.sh in library (sub)directories])AC_CACHE_VAL([r_cv_path_TK_CONFIG],[for ldir in /usr/local/${LIBnn} /usr/${LIBnn} /${LIBnn} /opt/lib /sw/lib /opt/csw/lib /usr/sfw/lib /opt/freeware/lib; dofor dir in \${ldir} \`ls -d ${ldir}/tk[[8-9]].[[0-9]]* 2>/dev/null | sort -r`; doif test -f ${dir}/tkConfig.sh; thenr_cv_path_TK_CONFIG="${dir}/tkConfig.sh"break 2fidonedone])if test -n "${r_cv_path_TK_CONFIG}"; thenAC_MSG_RESULT([${r_cv_path_TK_CONFIG}])elseAC_MSG_RESULT([no])fi])# _R_PATH_TK_CONFIG## _R_TCLTK_CONFIG## ---------------## Try finding the tclConfig.sh and tkConfig.sh scripts in PATH as well## as in common library directories and their tcl/tk subdirectories.## Set shell variables TCL_CONFIG and TK_CONFIG to the entire paths to## the scripts if found and check that the corresponding Tcl/Tk versions## are at least 8; if not, set shell variable have_tcltk to 'no'.AC_DEFUN([_R_TCLTK_CONFIG],[AC_PATH_PROGS(TCL_CONFIG, [${TCL_CONFIG} tclConfig.sh])if test -z "${TCL_CONFIG}"; then_R_PATH_TCL_CONFIGif test -n "${r_cv_path_TCL_CONFIG}"; thenTCL_CONFIG="${r_cv_path_TCL_CONFIG}"fifiAC_PATH_PROGS(TK_CONFIG, [${TK_CONFIG} tkConfig.sh])if test -z "${TK_CONFIG}"; then_R_PATH_TK_CONFIGif test -n "${r_cv_path_TK_CONFIG}"; thenTK_CONFIG="${r_cv_path_TK_CONFIG}"fifiif test -z "${TCLTK_CPPFLAGS}" \|| test -z "${TCLTK_LIBS}"; then## Check whether the versions found via the *Config.sh files are at## least 8; otherwise, issue a warning and turn off Tcl/Tk support.## Note that in theory a system could have outdated versions of the## *Config.sh scripts and yet up-to-date installations of Tcl/Tk in## standard places ...## This doesn't make a great deal of sense: on past form## we don't even expect future versions of 8.x to work, let alone 9.0if test -n "${TCL_CONFIG}"; then. ${TCL_CONFIG}if test ${TCL_MAJOR_VERSION} -lt 8; thenwarn_tcltk_version="Tcl/Tk support requires Tcl version >= 8"AC_MSG_WARN([${warn_tcltk_version}])have_tcltk=nofifiif test -n "${TK_CONFIG}" \&& test -z "${warn_tcltk_version}"; then. ${TK_CONFIG}if test ${TK_MAJOR_VERSION} -lt 8; thenwarn_tcltk_version="Tcl/Tk support requires Tk version >= 8"AC_MSG_WARN([${warn_tcltk_version}])have_tcltk=nofifiif test -n "${TCL_CONFIG}" \&& test -n "${TK_CONFIG}" \&& test -z "${warn_tcltk_version}"; thenif test ${TCL_MAJOR_VERSION} -ne ${TK_MAJOR_VERSION} \|| test ${TCL_MINOR_VERSION} -ne ${TK_MINOR_VERSION}; thenwarn_tcltk_version="Tcl and Tk major or minor versions disagree"AC_MSG_WARN([${warn_tcltk_version}])have_tcltk=nofififi])# _R_TCLTK_CONFIG## _R_HEADER_TCL## -------------## Set shell variable 'r_cv_header_tcl_h' to 'yes' if a recent enough## 'tcl.h' is found, and to 'no' otherwise.AC_DEFUN([_R_HEADER_TCL],[AC_CACHE_CHECK([for tcl.h], [r_cv_header_tcl_h],[AC_EGREP_CPP([yes],[#include <tcl.h>/* Revise if 9.x ever appears (and 8.x seems to increment onlyevery few years). */#if (TCL_MAJOR_VERSION >= 8) && (TCL_MINOR_VERSION >= 4)yes#endif],[r_cv_header_tcl_h=yes],[r_cv_header_tcl_h=no])])])# _R_HEADER_TCL## _R_HEADER_TK## -------------## Set shell variable 'r_cv_header_tk_h' to 'yes' if a recent enough## 'tk.h' is found, and to 'no' otherwise.AC_DEFUN([_R_HEADER_TK],[AC_CACHE_CHECK([for tk.h], [r_cv_header_tk_h],[AC_EGREP_CPP([yes],[#include <tk.h>/* Revise if 9.x ever appears (and 8.x seems to increment onlyevery few years). */#if (TK_MAJOR_VERSION >= 8) && (TK_MINOR_VERSION >= 4)yes#endif],[r_cv_header_tk_h=yes],[r_cv_header_tk_h=no])])])# _R_HEADER_TK## _R_TCLTK_CPPFLAGS## -----------------## Need to ensure that we can find the tcl.h and tk.h headers, which## may be in non-standard and/or version-dependent directories, such as## on FreeBSD systems.#### The logic is as follows. If TCLTK_CPPFLAGS was specified, then we## do not investigate any further. Otherwise, if we still think we## have Tcl/Tk, then first try via the corresponding *Config.sh file,## or else try the obvious.AC_DEFUN([_R_TCLTK_CPPFLAGS],[AC_REQUIRE([_R_TCLTK_CONFIG])if test -z "${TCLTK_CPPFLAGS}"; then## We have to do the work.if test "${have_tcltk}" = yes; then## Part 1. Check for tcl.h.found_tcl_h=noif test -n "${TCL_CONFIG}"; then. ${TCL_CONFIG}## TCL_INCLUDE_SPEC (if set) is what we want.if test -n ${TCL_INCLUDE_SPEC} ; thenr_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${TCL_INCLUDE_SPEC}"AC_CHECK_HEADER([tcl.h],[TCLTK_CPPFLAGS="${TCL_INCLUDE_SPEC}"found_tcl_h=yes])CPPFLAGS="${r_save_CPPFLAGS}"fiif test "${found_tcl_h}" = no; then## Look for tcl.h in## ${TCL_PREFIX}/include/tcl${TCL_VERSION}## ${TCL_PREFIX}/include## Also look in## ${TCL_PREFIX}/include/tcl${TCL_VERSION}/generic## to deal with current FreeBSD layouts. These also link the real## thing to the version subdir, but the link cannot be used as it## fails to include 'tclDecls.h' which is not linked. Hence we## must look for the real thing first. Argh ...for dir in \${TCL_PREFIX}/include/tcl${TCL_VERSION}/generic \${TCL_PREFIX}/include/tcl${TCL_VERSION} \${TCL_PREFIX}/include; doAC_CHECK_HEADER([${dir}/tcl.h],[TCLTK_CPPFLAGS="-I${dir}"found_tcl_h=yesbreak])donefifiif test "${found_tcl_h}" = no; then_R_HEADER_TCLif test "${r_cv_header_tcl_h}" = yes; thenfound_tcl_h=yeselsehave_tcltk=nofififiif test "${have_tcltk}" = yes; then## Part 2. Check for tk.h.found_tk_h=nofound_tk_by_config=noif test -n "${TK_CONFIG}"; then. ${TK_CONFIG}## TK_INCLUDE_SPEC (if set) is what we want.if test -n ${TK_INCLUDE_SPEC} ; thenr_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${TCLTK_CPPFLAGS} ${TK_XINCLUDES} ${TK_INCLUDE_SPEC}"AC_CHECK_HEADER([tk.h],[TCLTK_CPPFLAGS="${TCLTK_CPPFLAGS} ${TK_INCLUDE_SPEC}"found_tk_h=yes])found_tk_by_config=yesCPPFLAGS="${r_save_CPPFLAGS}"fiif test "${found_tk_h}" = no; then## Look for tk.h in## ${TK_PREFIX}/include/tk${TK_VERSION}## ${TK_PREFIX}/include## Also look in## ${TK_PREFIX}/include/tcl${TK_VERSION}## to compensate for Debian madness ...## Also look in## ${TK_PREFIX}/include/tk${TK_VERSION}/generic## to deal with current FreeBSD layouts. See above for details.#### As the AC_CHECK_HEADER test tries including the header file and## tk.h includes tcl.h and X11/Xlib.h, we need to change CPPFLAGS## for the check.r_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CPPFLAGS} ${TK_XINCLUDES} ${TCLTK_CPPFLAGS}"for dir in \${TK_PREFIX}/include/tk${TK_VERSION}/generic \${TK_PREFIX}/include/tk${TK_VERSION} \${TK_PREFIX}/include/tcl${TK_VERSION} \${TK_PREFIX}/include; doAC_CHECK_HEADER([${dir}/tk.h],[TCLTK_CPPFLAGS="${TCLTK_CPPFLAGS} -I${dir}"found_tk_h=yesbreak])doneCPPFLAGS="${r_save_CPPFLAGS}"fifiif test "${found_tk_h}" = no; then_R_HEADER_TKif test "{r_cv_header_tk_h}" = yes; thenfound_tk_h=yeselsehave_tcltk=nofifififidnl TK_XINCLUDES should be empty for Aqua Tk, so earlier test was wrongdnl Our code does not include any X headers, but tk.h may ....dnl That is true even on macOS, but Aqua Tk has a private version ofdnl X11 headers, and we want that one and not the XQuartz one.if test "${have_tcltk}" = yes; thenif test "${found_tk_by_config}" = yes; thenTCLTK_CPPFLAGS="${TCLTK_CPPFLAGS} ${TK_XINCLUDES}"elseTCLTK_CPPFLAGS="${TCLTK_CPPFLAGS} ${X_CFLAGS}"fifi])# _R_TCLTK_CPPFLAGS## _R_TCLTK_LIBS## -------------## Find the tcl and tk libraries.AC_DEFUN([_R_TCLTK_LIBS],[AC_REQUIRE([_R_TCLTK_CONFIG])if test -z "${TCLTK_LIBS}"; then## We have to do the work.if test "${have_tcltk}" = yes; then## Part 1. Try finding the tcl library.if test -n "${TCL_CONFIG}"; then. ${TCL_CONFIG}TCLTK_LIBS="${TCL_LIB_SPEC}"elseAC_CHECK_LIB(tcl, Tcl_CreateInterp,[TCLTK_LIBS=-ltcl],[have_tcltk=no])fifiif test "${have_tcltk}" = yes; then## Part 2. Try finding the tk library.if test -n "${TK_CONFIG}"; then. ${TK_CONFIG}TCLTK_LIBS="${TCLTK_LIBS} ${TK_LIB_SPEC} ${TK_XLIBSW}"elseAC_CHECK_LIB(tk, Tk_Init, , , [${TCLTK_LIBS}])if test "${ac_cv_lib_tk_Tk_Init}" = no; then## Grr, simple -ltk does not work.## But maybe we simply need to add X11 libs.## Note that we cannot simply repeat the above test with extra## libs, because AC_CHECK_LIB uses the corresponding cache var## (ac_cv_lib_tk_Tk_Init in our case) if set. As using unset## is not portable shell programming according to the Autoconf## docs, we use Tk_SafeInit in the test with X11 libs added.AC_CHECK_LIB(tk, Tk_SafeInit,[TCLTK_LIBS="${TCLTK_LIBS} -ltk ${X_LIBS}"],[have_tcltk=no],[${TCLTK_LIBS} ${X_LIBS}])fififi## Postprocessing for AIX.## On AIX, the *_LIB_SPEC variables need to contain '-bI:' flags for## the Tcl export file. These are really flags for ld rather than the## C/C++ compilers, and hence may need protection via '-Wl,'.## We have two ways of doing that:## * Recording whether '-Wl,' is needed for the C or C++ compilers,## and getting this info into the TCLTK_LIBS make variable ... mess!## * Protecting all entries in TCLTK_LIBS that do not start with '-l'## or '-L' with '-Wl,' (hoping that all compilers understand this).## Easy, hence ...case "${host_os}" inaix*)orig_TCLTK_LIBS="${TCLTK_LIBS}"TCLTK_LIBS=for flag in ${orig_TCLTK_LIBS}; docase "${flag}" in-l*|-L*|-Wl,*) ;;*) flag="-Wl,${flag}" ;;esacTCLTK_LIBS="${TCLTK_LIBS} ${flag}"done;;esac## Force evaluation ('-ltcl8.3${TCL_DBGX}' and friends ...).eval "TCLTK_LIBS=\"${TCLTK_LIBS}\""fi])# _R_TCLTK_LIBS## _R_TCLTK_WORKS## --------------## Check whether compiling and linking code using Tcl/Tk works.## Set shell variable r_cv_tcltk_works to 'yes' or 'no' accordingly.AC_DEFUN([_R_TCLTK_WORKS],[AC_CACHE_CHECK([whether compiling/linking Tcl/Tk code works],[r_cv_tcltk_works],[AC_LANG_PUSH(C)r_save_CPPFLAGS="${CPPFLAGS}"r_save_LIBS="${LIBS}"CPPFLAGS="${CPPFLAGS} ${TCLTK_CPPFLAGS}"LIBS="${LIBS} ${TCLTK_LIBS}"AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <tcl.h>#include <tk.h>]],[[static char * p1 = (char *) Tcl_Init;static char * p2 = (char *) Tk_Init;]])],r_cv_tcltk_works=yes,r_cv_tcltk_works=no)CPPFLAGS="${r_save_CPPFLAGS}"LIBS="${r_save_LIBS}"AC_LANG_POP(C)])])# _R_TCLTK_WORKS## R_TCLTK## -------AC_DEFUN([R_TCLTK],[if test "${want_tcltk}" = yes; thenhave_tcltk=yes## (Note that the subsequent 3 macros assume that have_tcltk has been## set appropriately.)_R_TCLTK_CONFIG_R_TCLTK_CPPFLAGS_R_TCLTK_LIBSif test "${have_tcltk}" = yes; then_R_TCLTK_WORKShave_tcltk=${r_cv_tcltk_works}fielsehave_tcltk=no## Just making sure.TCLTK_CPPFLAGS=TCLTK_LIBS=fiif test "${have_tcltk}" = yes; thenAC_DEFINE(HAVE_TCLTK, 1,[Define if you have the Tcl/Tk headers and libraries andwant Tcl/Tk support to be built.])use_tcltk=yeselseuse_tcltk=nofiAC_SUBST(TCLTK_CPPFLAGS)AC_SUBST(TCLTK_LIBS)AC_SUBST(use_tcltk)])# R_TCLTK## R_BLAS_LIBS## -----------## Look for a library that implements the BLAS linear-algebra interface## (see http://www.netlib.org/blas/). On success, sets BLAS_LIBS to the## requisite library linkages.#### This is based on ACX_BLAS by Steven G. Johnson <stevenj@alum.mit.edu>## from the Official Autoconf Macro Archive## (formerly https://www.gnu.org/software/ac-archive/htmldoc/acx_blas.m4),## with the following changes:## * We also handle HP-UX .sl command line specifications.## * We only care about the Fortran interface to Atlas, hence do not## test for -lcblas.## * We do not use BLAS libs that caused problems in the past.## * As we link with $BLAS_LIBS $FLIBS $LIBS (in that order), we use the## same order in the tests.## * We do not use ACTION-IF-FOUND and ACTION-IF-NOT-FOUND.## The sunperf test calls the library as now required.## 2020-11-27 --with-blas=foo now does not fallback to search.## Based on acx_blas.m4 version 1.2 (2001-12-13)## (Since renamed to ax_blas.m4)AC_DEFUN([R_BLAS_LIBS],[AC_REQUIRE([R_PROG_FC_FLIBS])AC_REQUIRE([R_PROG_FC_APPEND_UNDERSCORE])acx_blas_ok=nocase "${with_blas}" inyes | "") ;;no) acx_blas_ok=disable ;;-* | */* | *.a | *.so | *.so.* | *.sl | *.sl.* | *.o)BLAS_LIBS="${with_blas}";;*) BLAS_LIBS="-l${with_blas}" ;;esacif test "${r_cv_prog_fc_append_underscore}" = yes; thendgemm=dgemm_sgemm=sgemm_xerbla=xerbla_elsedgemm=dgemmsgemm=sgemmxerbla=xerblafiacx_blas_save_LIBS="${LIBS}"LIBS="${FLIBS} ${LIBS}"dnl First, check BLAS_LIBS environment variable/command-line settingdnl Dummy xerbla was added in 2003 for the Goto BLAS.dnl Declaration added in 2020 for Apple's -Werror=implicit-function-declarationif test "${acx_blas_ok}" = no; thenif test "x${BLAS_LIBS}" != x; thenr_save_LIBS="${LIBS}"; LIBS="${BLAS_LIBS} ${LIBS}"AC_MSG_CHECKING([for ${dgemm} in ${BLAS_LIBS}])AC_LINK_IFELSE([AC_LANG_PROGRAM([[void ${xerbla}(char *srname, int *info){}void ${dgemm}();]], [[${dgemm}()]])],[acx_blas_ok=yes],[BLAS_LIBS=""])AC_MSG_RESULT([${acx_blas_ok}])LIBS="${r_save_LIBS}"dnl from 2020-11 make failure an error: used to fallback to searchif test "${acx_blas_ok}" = no; thenAC_MSG_ERROR([BLAS was specified but not available])fififiif test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for an external BLAS])fidnl BLAS linked to by default? (happens on some supercomputers)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for BLAS in default libraries])AC_CHECK_FUNC(${dgemm}, [acx_blas_ok=yes])fidnl Taken from 2008 version of ax_blas.m4# BLAS in OpenBLAS library? (https://www.openblas.net/)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for OpenBLAS])AC_CHECK_LIB(openblas, $sgemm, [acx_blas_ok=yesBLAS_LIBS="-lopenblas"])fi# BLAS in BLIS library? (https://github.com/flame/blis)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for BLIS])AC_CHECK_LIB(blis, $sgemm, [acx_blas_ok=yes BLAS_LIBS="-lblis"])fidnl BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for ATLAS])AC_CHECK_LIB(atlas, ATL_xerbla,[AC_CHECK_LIB(f77blas, ${dgemm},[acx_blas_ok=yesBLAS_LIBS="-lf77blas -latlas"],[], [-latlas])])fidnl Unable to find a URL for PhiPACK in 2022 ....dnl BLAS in PhiPACK libraries? (requires generic BLAS lib, too)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for PhiPACK])AC_CHECK_LIB(blas, ${dgemm},[AC_CHECK_LIB(dgemm, $dgemm,[AC_CHECK_LIB(sgemm, ${sgemm},[acx_blas_ok=yesBLAS_LIBS="-lsgemm -ldgemm -lblas"],[], [-lblas])],[], [-lblas])])fidnl BLAS in Apple Accelerate? Based on ax_blas.m4 #37if test $acx_blas_ok = no; thencase "${host_os}" indarwin*)AC_MSG_NOTICE([searching for Accelerate])save_LIBS="$LIBS"; LIBS="-framework Accelerate $LIBS"AC_MSG_CHECKING([for $dgemm in -framework Accelerate])AC_LINK_IFELSE([AC_LANG_CALL([], [$dgemm])],[acx_blas_ok=yes;BLAS_LIBS="-framework Accelerate"])AC_MSG_RESULT($acx_blas_ok)LIBS="$save_LIBS";;esacfidnl BLAS in Sun Performance library?dnl Some versions require -xlic_lib=sunperf: -lsunperf will not workdnl Not sure whether -lsunmath is required, but it helps anywayif test "${acx_blas_ok}" = no; thenif test "x$GCC" != xyes; then # only works with Sun CCAC_MSG_NOTICE([searching for Sun Performance library])AC_MSG_CHECKING([for ${dgemm} in -lsunperf])r_save_LIBS="${LIBS}"LIBS="-xlic_lib=sunperf -lsunmath ${LIBS}"AC_TRY_LINK_FUNC([${dgemm}], [R_sunperf=yes], [R_sunperf=no])if test "${R_sunperf}" = yes; thenBLAS_LIBS="-xlic_lib=sunperf -lsunmath"acx_blas_ok=yesfiLIBS="${r_save_LIBS}"AC_MSG_RESULT([${acx_blas_ok}])fifidnl BLAS in IBM ESSL library? (requires generic BLAS lib, too)if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for IBM ESSL])AC_CHECK_LIB(blas, ${dgemm},[AC_CHECK_LIB(essl, ${dgemm},[acx_blas_ok=yesBLAS_LIBS="-lessl -lblas"],[], [-lblas ${FLIBS}])])fidnl Generic BLAS library?if test "${acx_blas_ok}" = no; thenAC_MSG_NOTICE([searching for generic BLAS library])AC_CHECK_LIB(blas, ${dgemm},[acx_blas_ok=yes; BLAS_LIBS="-lblas"])fidnl Now check if zdotu works (fails on AMD64 with the wrong compiler;dnl also fails on macOS with Accelerate/vecLib and gfortran;dnl but in that case we have a work-around using USE_VECLIB_G95FIX)if test "${acx_blas_ok}" = yes; thenAC_MSG_CHECKING([whether double complex BLAS can be used])AC_CACHE_VAL([r_cv_zdotu_is_usable],[cat > conftestf.f <<EOFc Goto's BLAS at least needs a XERBLAsubroutine xerbla(srname, info)character*6 srnameinteger infoendsubroutine test1(iflag)double complex zx(2), ztemp, zres, zdotuinteger iflagzx(1) = (3.1d0,1.7d0)zx(2) = (1.6d0,-0.6d0)zres = zdotu(2, zx, 1, zx, 1)ztemp = (0.0d0,0.0d0)do 10 i = 1,2ztemp = ztemp + zx(i)*zx(i)10 continueif(abs(zres - ztemp) > 1.0d-10) theniflag = 1elseiflag = 0endifendEOF${FC} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FDdnl Yes we need to double quote this ...[cat > conftest.c <<EOF#include <stdlib.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endifextern void F77_SYMBOL(test1)(int *iflag);int main () {int iflag;F77_SYMBOL(test1)(&iflag);exit(iflag);}EOF]if ${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then## <NOTE>## This should really use MAIN_LD, and hence come after this is## determined (and necessary additions to MAIN_LDFLAGS were made).## But it seems that we currently can always use the C compiler.## Also, to be defensive there should be a similar test with SHLIB_LD## and SHLIB_LDFLAGS (and note that on HP-UX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} \-o conftest${ac_exeext} conftest.${ac_objext} conftestf.${ac_objext} \${BLAS_LIBS} ${FLIBS} ${LIBM} 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;## </NOTE>then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`if test ${?} = 0; thenr_cv_zdotu_is_usable=yesfififi])rm -Rf conftest conftest.* conftestf.* coreif test -n "${r_cv_zdotu_is_usable}"; thenAC_MSG_RESULT([yes])elsecase "${BLAS_LIBS}" in*Accelerate* | *vecLib*)## for vecLib we have a work-around by using cblas_..._subAC_MSG_RESULT([yes])use_veclib_g95fix=yes;;*)AC_MSG_RESULT([no])BLAS_LIBS=acx_blas_ok="no";;esacfifiif test "${acx_blas_ok}" = yes; thenAC_MSG_CHECKING([whether the BLAS is complete])AC_CACHE_VAL([r_cv_complete_blas],[[cat > conftest.c <<EOF#include <stdlib.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endifvoid F77_SYMBOL(xerbla)(char *srname, int *info){}// declare (with empty args) before use.void F77_SYMBOL(dasum)();void F77_SYMBOL(daxpy)();void F77_SYMBOL(dcopy)();void F77_SYMBOL(ddot)();void F77_SYMBOL(dgbmv)();void F77_SYMBOL(dgemm)();void F77_SYMBOL(dgemv)();void F77_SYMBOL(dger)();void F77_SYMBOL(dnrm2)();void F77_SYMBOL(drot)();void F77_SYMBOL(drotg)();void F77_SYMBOL(drotm)();void F77_SYMBOL(drotmg)();void F77_SYMBOL(dsbmv)();void F77_SYMBOL(dscal)();void F77_SYMBOL(dsdot)();void F77_SYMBOL(dspmv)();void F77_SYMBOL(dspr)();void F77_SYMBOL(dspr2)();void F77_SYMBOL(dswap)();void F77_SYMBOL(dsymm)();void F77_SYMBOL(dsymv)();void F77_SYMBOL(dsyr)();void F77_SYMBOL(dsyr2)();void F77_SYMBOL(dsyr2k)();void F77_SYMBOL(dsyrk)();void F77_SYMBOL(dtbmv)();void F77_SYMBOL(dtbsv)();void F77_SYMBOL(dtpmv)();void F77_SYMBOL(dtpsv)();void F77_SYMBOL(dtrmm)();void F77_SYMBOL(dtrmv)();void F77_SYMBOL(dtrsm)();void F77_SYMBOL(dtrsv)();void F77_SYMBOL(idamax)();void F77_SYMBOL(lsame)();#ifdef HAVE_FORTRAN_DOUBLE_COMPLEX/* cmplxblas */void F77_SYMBOL(dcabs1)();void F77_SYMBOL(dzasum)();void F77_SYMBOL(dznrm2)();void F77_SYMBOL(izamax)();void F77_SYMBOL(zaxpy)();void F77_SYMBOL(zcopy)();void F77_SYMBOL(zdotc)();void F77_SYMBOL(zdotu)();void F77_SYMBOL(zdrot)();void F77_SYMBOL(zdscal)();void F77_SYMBOL(zgbmv)();void F77_SYMBOL(zgemm)();void F77_SYMBOL(zgemv)();void F77_SYMBOL(zgerc)();void F77_SYMBOL(zgeru)();void F77_SYMBOL(zhbmv)();void F77_SYMBOL(zhemm)();void F77_SYMBOL(zhemv)();void F77_SYMBOL(zher)();void F77_SYMBOL(zherk)();void F77_SYMBOL(zher2)();void F77_SYMBOL(zher2k)();void F77_SYMBOL(zhpmv)();void F77_SYMBOL(zhpr)();void F77_SYMBOL(zhpr2)();void F77_SYMBOL(zrotg)();void F77_SYMBOL(zscal)();void F77_SYMBOL(zswap)();void F77_SYMBOL(zsymm)();void F77_SYMBOL(zsyr2k)();void F77_SYMBOL(zsyrk)();void F77_SYMBOL(ztbmv)();void F77_SYMBOL(ztbsv)();void F77_SYMBOL(ztpmv)();void F77_SYMBOL(ztpsv)();void F77_SYMBOL(ztrmm)();void F77_SYMBOL(ztrmv)();void F77_SYMBOL(ztrsm)();void F77_SYMBOL(ztrsv)();#endifvoid blas_set () {F77_SYMBOL(dasum)();F77_SYMBOL(daxpy)();F77_SYMBOL(dcopy)();F77_SYMBOL(ddot)();F77_SYMBOL(dgbmv)();F77_SYMBOL(dgemm)();F77_SYMBOL(dgemv)();F77_SYMBOL(dger)();F77_SYMBOL(dnrm2)();F77_SYMBOL(drot)();F77_SYMBOL(drotg)();F77_SYMBOL(drotm)();F77_SYMBOL(drotmg)();F77_SYMBOL(dsbmv)();F77_SYMBOL(dscal)();F77_SYMBOL(dsdot)();F77_SYMBOL(dspmv)();F77_SYMBOL(dspr)();F77_SYMBOL(dspr2)();F77_SYMBOL(dswap)();F77_SYMBOL(dsymm)();F77_SYMBOL(dsymv)();F77_SYMBOL(dsyr)();F77_SYMBOL(dsyr2)();F77_SYMBOL(dsyr2k)();F77_SYMBOL(dsyrk)();F77_SYMBOL(dtbmv)();F77_SYMBOL(dtbsv)();F77_SYMBOL(dtpmv)();F77_SYMBOL(dtpsv)();F77_SYMBOL(dtrmm)();F77_SYMBOL(dtrmv)();F77_SYMBOL(dtrsm)();F77_SYMBOL(dtrsv)();F77_SYMBOL(idamax)();F77_SYMBOL(lsame)();#ifdef HAVE_FORTRAN_DOUBLE_COMPLEX/* cmplxblas */F77_SYMBOL(dcabs1)();F77_SYMBOL(dzasum)();F77_SYMBOL(dznrm2)();F77_SYMBOL(izamax)();F77_SYMBOL(zaxpy)();F77_SYMBOL(zcopy)();F77_SYMBOL(zdotc)();F77_SYMBOL(zdotu)();F77_SYMBOL(zdrot)();F77_SYMBOL(zdscal)();F77_SYMBOL(zgbmv)();F77_SYMBOL(zgemm)();F77_SYMBOL(zgemv)();F77_SYMBOL(zgerc)();F77_SYMBOL(zgeru)();F77_SYMBOL(zhbmv)();F77_SYMBOL(zhemm)();F77_SYMBOL(zhemv)();F77_SYMBOL(zher)();F77_SYMBOL(zherk)();F77_SYMBOL(zher2)();F77_SYMBOL(zher2k)();F77_SYMBOL(zhpmv)();F77_SYMBOL(zhpr)();F77_SYMBOL(zhpr2)();F77_SYMBOL(zrotg)();F77_SYMBOL(zscal)();F77_SYMBOL(zswap)();F77_SYMBOL(zsymm)();F77_SYMBOL(zsyr2k)();F77_SYMBOL(zsyrk)();F77_SYMBOL(ztbmv)();F77_SYMBOL(ztbsv)();F77_SYMBOL(ztpmv)();F77_SYMBOL(ztpsv)();F77_SYMBOL(ztrmm)();F77_SYMBOL(ztrmv)();F77_SYMBOL(ztrsm)();F77_SYMBOL(ztrsv)();#endif}int main (){exit(0);}EOF]if ${CC} ${CPPFLAGS} ${CFLAGS} -c conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then## <NOTE>## This should really use MAIN_LD, and hence come after this is## determined (and necessary additions to MAIN_LDFLAGS were made).## But it seems that we currently can always use the C compiler.## Also, to be defensive there should be a similar test with SHLIB_LD## and SHLIB_LDFLAGS (and note that on HP-UX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} \-o conftest${ac_exeext} conftest.${ac_objext} \${BLAS_LIBS} ${FLIBS} ${LIBM} 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;## </NOTE>thenr_cv_complete_blas=yesfifi])if test x"${r_cv_complete_blas}" != xyes; thenacx_blas_ok="no"r_cv_complete_blas=noBLAS_LIBS=""fiAC_MSG_RESULT([${r_cv_complete_blas}])fiLIBS="${acx_blas_save_LIBS}"AC_SUBST(BLAS_LIBS)])# R_BLAS_LIBS## R_LAPACK_LIBS## -------------## Look for a library that implements LAPACK (see## http://www.netlib.org/lapack/). On success, sets LAPACK_LIBS to the## requisite library linkages. Only used by the lapack module at## present.#### This is roughly based on ACX_LAPACK by Steven G. Johnson## <stevenj@alum.mit.edu> from the Official Autoconf Macro Archive## (formerly https://www.gnu.org/software/ac-archive/htmldoc/acx_lapack.m4),## with the following changes:## * We also handle HP-UX .sl command line specifications.## * We test for a LAPACK_LIBS environment variable after checking## whether LAPACK is already linked (see below).## * As we link with $LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS (in that## order), we use the same order in the tests.## * We do not use ACTION-IF-FOUND and ACTION-IF-NOT-FOUND.## Note that Debian ATLAS has LAPACK libs in /usr/lib/atlas (or $arch## variants) which should be used if ATLAS is used for BLAS, and not## found at configure time but used at run time ...## Note also that (see R-admin) that our main intention is to allow a## LAPACK-containing BLAS to be used ... there are too many slow or## broken LAPACKs out there.## Based on acx_lapack.m4 version 1.3 (2002-03-12).## (Since renamed to ax_lapack.m4)## Test function was zgeev, changed to dpstrf which is LAPACK 3.2.## (2009 version used cheev)AC_DEFUN([R_LAPACK_LIBS],[AC_REQUIRE([R_PROG_FC_FLIBS])AC_REQUIRE([R_PROG_FC_APPEND_UNDERSCORE])AC_REQUIRE([R_BLAS_LIBS])acx_lapack_ok=nocase "${with_lapack}" inyes | "") ;;no) acx_lapack_ok=disable ;;-* | */* | *.a | *.so | *.so.* | *.sl | *.sl.* | *.o)LAPACK_LIBS="${with_lapack}";;*) LAPACK_LIBS="-l${with_lapack}" ;;esacif test "${r_cv_prog_fc_append_underscore}" = yes; thenlapack=dpstrf_elselapack=dpstrffi# We cannot use LAPACK if BLAS is not foundif test "x${acx_blas_ok}" != xyes; thenAC_MSG_NOTICE([cannot use --with-lapack without --with-blas])acx_lapack_ok=noblasfiacx_lapack_save_LIBS="${LIBS}"LIBS="${BLAS_LIBS} ${FLIBS} ${LIBS}"dnl Check LAPACK_LIBS environment variableif test "${acx_lapack_ok}" = no; thenif test "x${LAPACK_LIBS}" = "x${BLAS_LIBS}"; then## make it clear that we are using LAPACK from BLAS libsLAPACK_LIBS=""fiif test "x${LAPACK_LIBS}" != x; thenr_save_LIBS="${LIBS}"; LIBS="${LAPACK_LIBS} ${LIBS}"AC_MSG_CHECKING([for ${lapack} in ${LAPACK_LIBS}])AC_TRY_LINK_FUNC(${lapack}, [acx_lapack_ok=yes], [LAPACK_LIBS=""])AC_MSG_RESULT([${acx_lapack_ok}])LIBS="${r_save_LIBS}"fifidnl LAPACK linked to by default? (Could be in the BLAS libs.)if test "${acx_lapack_ok}" = no; thenAC_CHECK_FUNC(${lapack}, [acx_lapack_ok=yes])fidnl LAPACK in Sun Performance library?dnl No longer test here as will be picked up by the default test.dnl Generic LAPACK library?if test "${acx_lapack_ok}" = no; thenAC_CHECK_LIB(lapack, ${lapack},[acx_lapack_ok=yes; LAPACK_LIBS="-llapack"])fiLIBS="${acx_lapack_save_LIBS}"AC_SUBST(LAPACK_LIBS)])# R_LAPACK_LIBS## R_LAPACK_SYSTEM_LIB## -------------------## New for R 4.2.0## Look for system -llapack of version at least 3.10.0.## We have to test with a system BLAS.## We don't want an external lapack which contains a BLAS.## We document that at least ATLAS, OpenBLAS and Accelerate lapack## is excluded (R-admin).AC_DEFUN([R_LAPACK_SYSTEM_LIB],[AC_REQUIRE([R_PROG_FC_FLIBS])AC_REQUIRE([R_PROG_FC_APPEND_UNDERSCORE])acx_lapack_ok=noacx_lapack_save_LIBS="${LIBS}"dnl Generic LAPACK library?if test "${r_cv_prog_fc_append_underscore}" = yes; thendgemm=dgemm_lapack=dpstrf_ilaver=ilaver_elsedgemm=dgemmlapack=dpstrfilaver=ilaverfiacx_lapack_ok=yesLIBS="${FLIBS} ${LIBS}"AC_CHECK_LIB(lapack, ${dgemm}, [acx_lapack_ok=no])if test "${acx_lapack_ok}" = no; thenAC_MSG_NOTICE([Not using liblapack as it contains BLAS routines])fiif test "${acx_lapack_ok}" = yes; thenLIBS="-llapack -lblas ${FLIBS} ${acx_lapack_save_LIBS}"dnl Detect ATLAS liblapack.dnl Note on Debian/Ubuntu, liblapack.so is generic but has a SONAMEdnl that may point to an optimized version, e.g. from ATLAS.dnl Hence AC_CHECK_LIB doesn't work, it would never find thednl symbol.AC_CACHE_CHECK([for ATLAS routines in liblapack], [r_cv_atlas_liblapack],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <dlfcn.h>#include <stdlib.h>extern void ${ilaver}(int *major, int *minor, int *patch);int major, minor, patch;volatile int dummy;int main (void) {${ilaver}(&major, &minor, &patch); /* force linking LAPACK */dummy = major + minor + patch;/* return 1 when we find an ATLAS optimized LAPACK routine dpotrfsee do_eSoftVersion in platform.c for more on PLT andRTLD_DEFAULT, RTLD_NEXT */if (dlsym(RTLD_DEFAULT, "ATL_dpotrf") || dlsym(RTLD_NEXT, "ATL_dpotrf"))exit(1);elseexit(0);}]])],[r_cv_atlas_liblapack=no],[r_cv_atlas_liblapack=yes],[r_cv_atlas_liblapack=no])])LIBS="${acx_lapack_save_LIBS}"if test "${r_cv_atlas_liblapack}" = yes; thenacx_lapack_ok=nofifiif test "${acx_lapack_ok}" = yes; thenLIBS="-lblas ${FLIBS} ${acx_lapack_save_LIBS}"AC_CHECK_LIB(lapack, ${lapack}, [acx_lapack_ok=yes], [acx_lapack_ok=no])fiif test "${acx_lapack_ok}" = yes; thenLIBS="-llapack -lblas ${FLIBS} ${acx_lapack_save_LIBS}"dnl This heuristic can detect liblapack which is e.g. part of OpenBLASAC_CACHE_CHECK([for liblapack dependency with both BLAS and LAPACK routines], [r_cv_dep_lapackblas],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <dlfcn.h>#include <stdio.h>#include <stdlib.h>void *libforsym(const char *name, int current) {void *addr = dlsym(current ? RTLD_DEFAULT : RTLD_NEXT, name);if (!addr) return NULL;Dl_info nfo;if (!dladdr(addr, &nfo)) return NULL;return dlopen(nfo.dli_fname, RTLD_LAZY);}/* does a library having symbol a also have symbol b? */int libwithhas(const char *syma, const char *symb, int current) {void *lib = libforsym(syma, current);int ans = lib && dlsym(lib, symb);dlclose(lib);return ans;}extern void ${ilaver}(int *major, int *minor, int *patch);int major, minor, patch;volatile int dummy;int main (void) {${ilaver}(&major, &minor, &patch); /* force linking LAPACK */dummy = major + minor + patch;/* return 1 when we know a dependent library which includes BLASroutines also includes LAPACK routinessee do_eSoftVersion in platform.c for more on PLT andRTLD_DEFAULT, RTLD_NEXT */if (libwithhas("${dgemm}", "${lapack}", 0) ||libwithhas("${dgemm}", "${lapack}", 1)) {exit(1);}exit(0);}]])],[r_cv_dep_lapackblas=no],[r_cv_dep_lapackblas=yes],[r_cv_dep_lapackblas=no])])LIBS="${acx_lapack_save_LIBS}"if test "${r_cv_dep_lapackblas}" = yes; thenacx_lapack_ok=nofifiif test "${acx_lapack_ok}" = yes; thenLIBS="-lblas -llapack ${FLIBS} ${acx_lapack_save_LIBS}"AC_CACHE_CHECK([if LAPACK version >= 3.10.0], [r_cv_lapack_ver],[AC_RUN_IFELSE([AC_LANG_SOURCE([[extern void ${ilaver}(int *major, int *minor, int *patch);#include <stdlib.h>#include <stdio.h>int main(void) {int major, minor, patch;${ilaver}(&major, &minor, &patch);printf("%d.%d.%d, so ", major, minor, patch);if (major < 3 || (major == 3 && minor < 10)) exit(1);exit(0);}]])],[r_cv_lapack_ver=yes],[r_cv_lapack_ver=no],[r_cv_lapack_ver=no])])LIBS="${acx_lapack_save_LIBS}"if test "${r_cv_lapack_ver}" = no; thenacx_lapack_ok=nofifiif test "${acx_lapack_ok}" = yes; thenLAPACK_LIBS=-llapackfiAC_SUBST(LAPACK_LIBS)])# R_LAPACK_SYSTEM_LIB## R_XDR## -----## Try finding XDR library functions and headers.## FreeBSD in particular needs rpc/types.h before rpc/xdr.h.AC_DEFUN([R_XDR],[AC_CHECK_HEADER(rpc/types.h)if test "${ac_cv_header_rpc_types_h}" = yes ; thenAC_CHECK_HEADER(rpc/xdr.h, , , [#include <rpc/types.h>])fiif test "${ac_cv_header_rpc_types_h}" = yes && \test "${ac_cv_header_rpc_xdr_h}" = yes && \test "${ac_cv_search_xdr_string}" != no ; thenr_xdr=yeselser_xdr=nofiTIRPC_CPPFLAGS=if test "${r_xdr}" = no ; then## No RPC headers, so try for TI-RPC headers: need /usr/include/tirpc## on include path to find /usr/include/tirpc/netconfig.hsave_CPPFLAGS=${CPPFLAGS}CPPFLAGS="${CPPFLAGS} -I/usr/include/tirpc"AC_CHECK_HEADER(tirpc/rpc/types.h)if test "${ac_cv_header_tirpc_rpc_types_h}" = yes ; thenAC_CHECK_HEADER(tirpc/rpc/xdr.h, , , [#include <tirpc/rpc/types.h>])fiif test "${ac_cv_header_tirpc_rpc_types_h}" = yes && \test "${ac_cv_header_tirpc_rpc_xdr_h}" = yes &&test "${ac_cv_search_xdr_string}" != no ; thenTIRPC_CPPFLAGS=-I/usr/include/tirpcr_xdr=yesfiCPPFLAGS="${save_CPPFLAGS}"fiAC_MSG_CHECKING([for XDR support])AC_MSG_RESULT([${r_xdr}])AM_CONDITIONAL(BUILD_XDR, [test "x${r_xdr}" = xno])AC_SUBST(TIRPC_CPPFLAGS)])# R_XDR## R_ZLIB## ------## Try finding zlib library and headers.## We check that both are installed, and that the header >= 1.2.3AC_DEFUN([R_ZLIB],[AC_CHECK_LIB(z, inflateInit2_, [have_zlib=yes], [have_zlib=no])if test "${have_zlib}" = yes; thenAC_CHECK_HEADER(zlib.h, [have_zlib=yes], [have_zlib=no])fiif test "${have_zlib}" = yes; then_R_HEADER_ZLIBhave_zlib=${r_cv_header_zlib_h}fiAC_MSG_CHECKING([whether zlib support suffices])if test "${have_zlib}" != yes; thenAC_MSG_ERROR([zlib library and headers are required])elseLIBS="-lz ${LIBS}"AC_MSG_RESULT([yes])fi])# R_ZLIB## _R_HEADER_ZLIB## --------------## Set shell variable r_cv_header_zlib_h to 'yes' if a recent enough## zlib.h is found, and to 'no' otherwise.AC_DEFUN([_R_HEADER_ZLIB],[AC_CACHE_CHECK([if zlib version >= 1.2.5],[r_cv_header_zlib_h],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <string.h>#include <zlib.h>int main(void) {#ifdef ZLIB_VERNUMif (ZLIB_VERNUM < 0x1250) {exit(1);}exit(0);#elseexit(1);#endif}]])],[r_cv_header_zlib_h=yes],[r_cv_header_zlib_h=no],[r_cv_header_zlib_h=no])])])# _R_HEADER_ZLIB## R_PCRE## ------## If selected, try finding system pcre library and headers.## RedHat put the headers in /usr/include/pcre.## JIT was possible in >= 8.20 , and important bug fixes in 8.32AC_DEFUN([R_PCRE],[AC_REQUIRE([R_PCRE2])if test "x${r_cv_have_pcre2utf}" != xyes && test "x${use_pcre1}" = xyes; thenAC_CHECK_LIB(pcre, pcre_fullinfo, [have_pcre=yes], [have_pcre=no])if test "${have_pcre}" = yes; thenAC_CHECK_HEADERS(pcre.h pcre/pcre.h)if test "${ac_cv_header_pcre_h}" = no \&& test "${ac_cv_header_pcre_pcre_h}" = no; thenhave_pcre=nofifiif test "x${have_pcre}" = xyes; thenr_save_LIBS="${LIBS}"LIBS="-lpcre ${LIBS}"AC_CACHE_CHECK([if PCRE1 version >= 8.32 and has UTF-8 support], [r_cv_have_pcre832],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_PCRE_PCRE_H#include <pcre/pcre.h>#else#ifdef HAVE_PCRE_H#include <pcre.h>#endif#endif#include <stdlib.h>int main(void) {#ifdef PCRE_MAJOR#if PCRE_MAJOR > 8exit(1);#elif PCRE_MAJOR == 8 && PCRE_MINOR >= 32{int ans;int res = pcre_config(PCRE_CONFIG_UTF8, &ans);if (res || ans != 1) exit(1); else exit(0);}#elseexit(1);#endif#elseexit(1);#endif}]])], [r_cv_have_pcre832=yes], [r_cv_have_pcre832=no], [r_cv_have_pcre832=no])])if test "x${r_cv_have_pcre832}" != xyes; thenhave_pcre=noLIBS="${r_save_LIBS}"fifielsehave_pcre=nor_cv_have_pcre832=nofiAC_MSG_CHECKING([whether PCRE support suffices])if test "x${r_cv_have_pcre2utf}" != xyes && \test "x${r_cv_have_pcre832}" != xyes; thenAC_MSG_RESULT([no])AC_MSG_ERROR([PCRE2 library and headers are required, or use --with-pcre1 and PCRE >= 8.32 with UTF-8 support])elseAC_MSG_RESULT([yes])fi])# R_PCRE## R_PCRE2## -------## Try finding pcre2 (8-bit) library and header.AC_DEFUN([R_PCRE2],[have_pcre2=noif test "x${use_pcre2}" = xyes; thendnl FIXME: Maybe these should be the other way around?dnl Maybe there should be a way to use pkg-config --staticif "${PKG_CONFIG}" --exists libpcre2-8; thenPCRE2_CPPFLAGS=`"${PKG_CONFIG}" --cflags libpcre2-8`PCRE2_LIBS=`"${PKG_CONFIG}" --libs libpcre2-8`have_pcre2=yeselseAC_PATH_PROG(PCRE2_CONFIG, pcre2-config)if test -n "${PCRE2_CONFIG}"; thenPCRE2_CPPFLAGS=`"${PCRE2_CONFIG}" --cflags`PCRE2_LIBS=`"${PCRE2_CONFIG}" --libs8`have_pcre2=yesfifiif test "x${have_pcre2}" = "xyes"; thenr_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${PCRE2_CPPFLAGS} ${CPPFLAGS}"r_save_LIBS="${LIBS}"LIBS="${PCRE2_LIBS} ${LIBS}"AC_DEFINE([PCRE2_CODE_UNIT_WIDTH], [8], [PCRE2 code unit width wanted.])AC_CHECK_HEADER(pcre2.h, [have_pcre2=yes], [have_pcre2=no])if test "x${have_pcre2}" = "xyes"; thenAC_CHECK_LIB(pcre2-8, pcre2_compile_8, [have_pcre2=yes], [have_pcre2=no])fidnl now check it was built with UTF-8 supportAC_CACHE_CHECK([if PCRE2 has Unicode support], [r_cv_have_pcre2utf],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#define PCRE2_CODE_UNIT_WIDTH 8#include <pcre2.h>#include <stdlib.h>int main(void) {int ans;int res = pcre2_config(PCRE2_CONFIG_UNICODE, &ans);if (res || ans != 1) exit(1); else exit(0);}]])], [r_cv_have_pcre2utf=yes], [r_cv_have_pcre2utf=no], [r_cv_have_pcre2utf=no])])if test "x${r_cv_have_pcre2utf}" = "xyes"; thenAC_DEFINE(HAVE_PCRE2, 1, [Define if your system has pcre2.])elseCPPFLAGS="${r_save_CPPFLAGS}"LIBS="${r_save_LIBS}"fifielsehave_pcre2=nor_cv_have_pcre2utf=nofi])# R_PCRE2## R_BZLIB## -------## Try finding bzlib library and headers.## We check that both are installed,## and that BZ2_bzlibVersion is in the library.AC_DEFUN([R_BZLIB],[AC_CHECK_LIB(bz2, BZ2_bzlibVersion, [have_bzlib=yes], [have_bzlib=no])if test "${have_bzlib}" = yes; thenAC_CHECK_HEADERS(bzlib.h, [have_bzlib=yes], [have_bzlib=no])fiif test "x${have_bzlib}" = xyes; thenAC_CACHE_CHECK([if bzip2 version >= 1.0.6], [r_cv_have_bzlib],[AC_LANG_PUSH(C)r_save_LIBS="${LIBS}"LIBS="-lbz2 ${LIBS}"AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_BZLIB_H#include <stdlib.h> // for exit#include <string.h> // for strcmp#include <bzlib.h>#endifint main(void) {const char *ver = BZ2_bzlibVersion();exit(strcmp(ver, "1.0.6") < 0);}]])], [r_cv_have_bzlib=yes], [r_cv_have_bzlib=no], [r_cv_have_bzlib=no])LIBS="${r_save_LIBS}"AC_LANG_POP(C)])fiif test "x${r_cv_have_bzlib}" = xno; thenhave_bzlib=nofiAC_MSG_CHECKING([whether bzip2 support suffices])if test "x${have_bzlib}" = xyes; thenAC_MSG_RESULT([yes])LIBS="-lbz2 ${LIBS}"elseAC_MSG_ERROR([bzip2 library and headers are required])fi])# R_BZLIB## R_LIBDEFLATE## ------------## Try finding libdeflate library and headers.## We check that both are installed,AC_DEFUN([R_LIBDEFLATE],[AC_CHECK_HEADERS(libdeflate.h, [have_libdeflate=yes], [have_libdeflate=no])if test "${have_libdeflate}" = yes; thenAC_CHECK_LIB(deflate, libdeflate_alloc_compressor, [have_libdeflate=yes], [have_libdeflate=no])fiif test "x${r_cv_have_libdeflate}" = xno; thenhave_libdeflate=nofiif test "x${have_libdeflate}" = xyes; thenAC_MSG_RESULT([yes])LIBS="-ldeflate ${LIBS}"AC_DEFINE(HAVE_LIBDEFLATE, 1,[Define to 1 if you have libdeflate headers and library.])fi])# R_LIBDEFLATE## R_TRE## -------## Try finding tre library and headers.## We check that both are installed,AC_DEFUN([R_TRE],[if test "x${use_system_tre}" = xyes; thenAC_CHECK_LIB(tre, tre_regncompb, [have_tre=yes], [have_tre=no])if test "${have_tre}" = yes; thenAC_CHECK_HEADERS(tre/tre.h, [have_tre=yes], [have_tre=no])fiif test "x${have_tre}" = xyes; thenAC_DEFINE(HAVE_TRE, 1, [Define if your system has tre.])LIBS="-ltre ${LIBS}"fielsehave_tre="no"fiAM_CONDITIONAL(BUILD_TRE, [test x${have_tre} != xyes])])# R_TRE## R_LZMA## -------## Try finding liblzma library and headers.## We check that both are installed,AC_DEFUN([R_LZMA],[AC_CHECK_LIB(lzma, lzma_version_number, [have_lzma=yes], [have_lzma=no])if test "${have_lzma}" = yes; thenAC_CHECK_HEADERS(lzma.h, [have_lzma=yes], [have_lzma=no])fiif test "x${have_lzma}" = xyes; thenAC_CACHE_CHECK([if lzma version >= 5.0.3], [r_cv_have_lzma],[AC_LANG_PUSH(C)r_save_LIBS="${LIBS}"LIBS="-llzma ${LIBS}"AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_LZMA_H#include <lzma.h>#endif#include <stdlib.h>int main(void) {unsigned int ver = lzma_version_number();// This is 10000000*major + 10000*minor + 10*revision + [012]// I.e. xyyyzzzs and 5.1.2 would be 50010020exit(ver < 50000030);}]])], [r_cv_have_lzma=yes], [r_cv_have_lzma=no], [r_cv_have_lzma=no])LIBS="${r_save_LIBS}"AC_LANG_POP(C)])fiif test "x${r_cv_have_lzma}" = xno; thenhave_lzma=nofiif test "x${have_lzma}" = xyes; thenAC_DEFINE(HAVE_LZMA, 1, [Define if your system has lzma >= 5.0.3.])LIBS="-llzma ${LIBS}"elseAC_MSG_ERROR("liblzma library and headers are required")fi])# R_LZMA## R_SYS_POSIX_LEAPSECONDS## -----------------------## See if your system time functions do not count leap seconds, as## required by POSIX.AC_DEFUN([R_SYS_POSIX_LEAPSECONDS],[AC_CACHE_CHECK([whether leap seconds are treated according to POSIX],[r_cv_sys_posix_leapseconds],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <time.h>#include <stdio.h>#include "confdefs.h"int main () {struct tm *tm;time_t ct = 0; /* required on 64bit AIX */ctime(&ct);ct = ct - (ct % 60);tm = gmtime(&ct);if(tm->tm_sec == 0) exit(1); else exit(0);}]])],[r_cv_sys_posix_leapseconds=no],[r_cv_sys_posix_leapseconds=yes],[r_cv_sys_posix_leapseconds=yes])])if test "x${r_cv_sys_posix_leapseconds}" = xyes; thenAC_DEFINE(HAVE_POSIX_LEAPSECONDS, 1,[Define if your system time functions do not count leapseconds, as required by POSIX.])fi])# R_SYS_POSIX_LEAPSECONDS### * Miscellaneous## R_RECOMMENDED_PACKAGES## ----------------------## See if the sources for (all) the recommended packages are available.AC_DEFUN([R_RECOMMENDED_PACKAGES],[AC_CACHE_CHECK([for recommended packages],[r_cv_misc_recommended_packages],[r_cv_misc_recommended_packages=yesrecommended_pkgs=`grep '^R_PKGS_RECOMMENDED *=' \${srcdir}/share/make/vars.mk | sed 's/.*=//'`for pkg in ${recommended_pkgs}; don_pkg=`ls ${srcdir}/src/library/Recommended/${pkg}_*.tar.gz | wc -l`if test ${n_pkg} -ne 1; thenr_cv_misc_recommended_packages=nobreakfidone])use_recommended_packages=${r_cv_misc_recommended_packages}if test "x${r_cv_misc_recommended_packages}" = xno; thenAC_MSG_ERROR([Some of the recommended packages are missingUse --without-recommended-packages if this was intentional])fi])# R_RECOMMENDED_PACKAGES## R_SIZE_MAX## ----------## Look for a definition of SIZE_MAX (the maximum of size_t).## C99 has it declared in <stdint.h>, pre-C99 POSIX in <inttypes.h>,## glibc in <stdint.h> and Solaris 8 in <limits.h>!## autoconf tests for inttypes.h and stdint.h by defaultAC_DEFUN([R_SIZE_MAX],[AC_CACHE_CHECK([whether SIZE_MAX is declared],[r_cv_size_max],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#ifdef HAVE_INTTYPES_H# include <inttypes.h>#endif#ifdef HAVE_STDINT_H# include <stdint.h>#endif#ifdef HAVE_LIMITS_H# include <limits.h>#endifintmain(void) {#ifndef SIZE_MAXchar *p = (char *) SIZE_MAX;#endif;return 0;}]])],[r_cv_size_max=yes],[r_cv_size_max=no],[r_cv_size_max=no])])if test "x${r_cv_size_max}" = xyes; thenAC_DEFINE(HAVE_DECL_SIZE_MAX, 1,[Define to 1 if you have the declaration of `SIZE_MAX', and to 0 if you don't.])fi])# R_SIZE_MAX## R_ICONV## -------## Look for iconv, possibly in libiconv.## Need to include <iconv.h> as this may define iconv as a macro.## libiconv, e.g. on macOS, has iconv as a macro and needs -liconv.AC_DEFUN([R_ICONV],[AC_CHECK_HEADERS(iconv.h)dnl need to ignore cache for this as it may set LIBSunset ac_cv_func_iconvAC_CACHE_CHECK(for iconv, ac_cv_func_iconv, [ac_cv_func_iconv="no"AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>#ifdef HAVE_ICONV_H#include <iconv.h>#endif]], [[iconv_t cd = iconv_open("","");iconv(cd,NULL,NULL,NULL,NULL);iconv_close(cd);]])],[ac_cv_func_iconv=yes],[])if test "$ac_cv_func_iconv" != yes; thenr_save_LIBS="$LIBS"LIBS="$LIBS -liconv"AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>#ifdef HAVE_ICONV_H#include <iconv.h>#endif]], [[iconv_t cd = iconv_open("","");iconv(cd,NULL,NULL,NULL,NULL);iconv_close(cd);]])],[ac_cv_func_iconv="in libiconv"],[])if test "$ac_cv_func_iconv" = no; thenLIBS="$r_save_LIBS"fifi])if test "$ac_cv_func_iconv" != no; thenAC_DEFINE(HAVE_ICONV, 1, [Define if you have the `iconv' function.])AC_CACHE_CHECK([whether iconv accepts "UTF-8", "latin1", "ASCII" and "UCS-*"],[r_cv_iconv_latin1],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <stdlib.h>#ifdef HAVE_ICONV_H#include <iconv.h>#endifint main () {iconv_t cd;cd = iconv_open("latin1","UTF-8");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UTF-8","latin1");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("","latin1");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("","UTF-8");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("latin1", "");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UTF-8","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("ASCII","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UCS-2LE","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("", "UCS-2LE");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UCS-2BE","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("", "UCS-2BE");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UCS-4LE","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("", "UCS-4LE");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UCS-4BE","");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("", "UCS-4BE");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);exit(0);}]])], [r_cv_iconv_latin1=yes], [r_cv_iconv_latin1=no],[r_cv_iconv_latin1=yes])])## on Windows we supply iconv ourselvescase "${host_os}" inmingw*|msys)r_cv_iconv_latin1=yes;;esacif test "$r_cv_iconv_latin1" != yes; thenAC_MSG_ERROR([a suitable iconv is essential])fiAC_CACHE_CHECK([whether iconv accepts "CP1252"],[r_cv_iconv_cp1252],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <stdlib.h>#ifdef HAVE_ICONV_H#include <iconv.h>#endifint main () {iconv_t cd;cd = iconv_open("CP1252","UTF-8");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("UTF-8","CP1252");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("CP1252", "");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("","CP1252");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("CP1252","latin1");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);cd = iconv_open("latin1","CP1252");if(cd == (iconv_t)(-1)) exit(1);iconv_close(cd);exit(0);}]])], [r_cv_iconv_cp1252=yes], [r_cv_iconv_cp1252=no],[r_cv_iconv_cp1252=yes])])## on Windows we supply iconv ourselvescase "${host_os}" inmingw*|msys)r_cv_iconv_cp1252=yes;;esacif test "$r_cv_iconv_cp1252" = yes; thenAC_DEFINE(HAVE_ICONV_CP1252, 1, [Define if `iconv' accepts "CP1252".])fifidnl if the iconv we are using was in libiconv we have already included -liconvAC_CACHE_CHECK(for iconvlist, ac_cv_func_iconvlist, [ac_cv_func_iconvlist="no"AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>#ifdef HAVE_ICONV_H#include <iconv.h>#endifstatic int count_one (unsigned int namescount, const char * const *names, void *data){return 0;}]], [[iconvlist(count_one, NULL);]])],[ac_cv_func_iconvlist=yes],[])])if test "$ac_cv_func_iconvlist" = yes; thenAC_DEFINE(HAVE_ICONVLIST, 1, [Define if you have the `iconvlist' function.])fiAM_ICONV dnl from gettext.m4])# R_ICONV## R_MBCS## -------------## locales - support for MBCS and specifically UTF-8AC_DEFUN([R_MBCS],[want_mbcs_support=yesdnl Wide character support -- first test for headers (which are assumed in code)AC_CHECK_HEADERS(wchar.h wctype.h)for ac_header in wchar wctype; doas_ac_var=`echo "ac_cv_header_${ac_header}_h"`this=`eval echo '${'$as_ac_var'}'`if test "x$this" = xno; thenwant_mbcs_support=nofidoneif test "$want_mbcs_support" = yes ; thendnl These are all C99, but Cygwin lacks wcsftime & wcstodR_CHECK_FUNCS([mbrtowc wcrtomb wcscoll wcsftime wcstod], [#include <wchar.h>])R_CHECK_FUNCS([mbstowcs wcstombs], [#include <stdlib.h>])R_CHECK_FUNCS([wctrans wctype iswctype],[#include <wchar.h>#include <wctype.h>])for ac_func in mbrtowc mbstowcs wcrtomb wcscoll wcstombs \wctrans wctype iswctypedoas_ac_var=`echo "ac_cv_have_decl_$ac_func"`this=`eval echo '${'$as_ac_var'}'`if test "x$this" = xno; thenwant_mbcs_support=nofidonefidnl These are POSIX. not used by default.if test "$want_mbcs_support" = yes ; thenR_CHECK_FUNCS([wcwidth wcswidth], [#include <wchar.h>])fidnl it seems IRIX once had wctrans but not wctrans_t: we check this when wednl know we have the headers and wctrans().dnl Also Solaris 2.6 (very old) seems to be missing mbstate_tif test "$want_mbcs_support" = yes ; thenAC_CHECK_TYPES([wctrans_t, mbstate_t], , , [#include <wchar.h>#include <wctype.h>])if test $ac_cv_type_wctrans_t != yes; thenwant_mbcs_support=nofiif test $ac_cv_type_mbstate_t != yes; thenwant_mbcs_support=nofifiif test "x${want_mbcs_support}" != xyes; thenAC_MSG_ERROR([Support for MBCS locales is required.])fi])# R_MBCS## R_C99_COMPLEX## -------------## C99 complexAC_DEFUN([R_C99_COMPLEX],[AC_CHECK_HEADER(complex.h,[r_c99_complex=yes],[r_c99_complex=no])if test "${r_c99_complex}" = "yes"; thenAC_CHECK_TYPE([double complex], , [r_c99_complex=no],[#include <complex.h>])fiAC_MSG_CHECKING([whether C99 double complex is supported])AC_MSG_RESULT([${r_c99_complex}])dnl we are supposed to have a C99 compiler, so fail at this point.if test "${r_c99_complex}" = "no"; thenAC_MSG_ERROR([Support for C99 double complex type is required.])fiR_CHECK_FUNCS([cabs carg cexp clog csqrt cpow ccos csin ctan \cacos casin catan ccosh csinh ctanh],[#include <complex.h>])])# R_COMPLEX## R_CHECK_DECL(SYMBOL,## [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],## [INCLUDES = DEFAULT-INCLUDES])## -------------------------------------------------------## Check if SYMBOL (a variable or a function) is declared.AC_DEFUN([R_CHECK_DECL],[AS_VAR_PUSHDEF([ac_Symbol], [ac_cv_have_decl_$1])dnlAC_CACHE_CHECK([whether $1 exists and is declared], ac_Symbol,[AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[#ifndef $1char *p = (char *) $1;#endif])],[AS_VAR_SET(ac_Symbol, yes)],[AS_VAR_SET(ac_Symbol, no)])])AS_IF([test AS_VAR_GET(ac_Symbol) = yes], [$2], [$3])[]dnlAS_VAR_POPDEF([ac_Symbol])dnl])# R_CHECK_DECL## R_CHECK_FUNCS(SYMBOLS,## [INCLUDES = DEFAULT-INCLUDES])## --------------------------------------------------------## Defines HAVE_SYMBOL if declared. SYMBOLS is an m4 list.AC_DEFUN([R_CHECK_FUNCS],[m4_foreach_w([AC_Func],[$1],[AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func),[Define to 1 if you have the `]AC_Func[' function.])])dnlfor ac_func in $1doR_CHECK_DECL($ac_func,[AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$ac_func]), 1)], , [$2])done])# R_CHECK_FUNCS## R_GCC4_VISIBILITY## Sets up suitable macros for visibility attributes in gcc/gfortran## Also accepted on clang (which defines __GNUC__).## Intel also defines __GNUC__ but is excluded below, and## Solaris <= 12.4 rejected -Werror, but 12.5 did not.AC_DEFUN([R_GCC4_VISIBILITY],[AC_CACHE_CHECK([whether __attribute__((visibility())) is supported],[r_cv_visibility_attribute],[cat > conftest.c <<EOFint foo __attribute__ ((visibility ("hidden"))) = 1;int bar __attribute__ ((visibility ("default"))) = 1;#ifndef __GNUC__# error unsupported compiler#endifEOFr_cv_visibility_attribute=noif AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); thenif grep '\.hidden.*foo' conftest.s >/dev/null; thenr_cv_visibility_attribute=yesfifirm -f conftest.[cs]])if test $r_cv_visibility_attribute = yes; thenAC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE, 1,[Define to 1 if __attribute__((visibility())) is supported])fidnl test if visibility flag is accepted: NB Solaris compilers do and ignore,dnl so only make use of this if HAVE_VISIBILITY_ATTRIBUTE is true.if test -z "${C_VISIBILITY+set}"; thenr_save_CFLAGS=$CFLAGSCFLAGS="$CFLAGS -fvisibility=hidden"AC_CACHE_CHECK(whether $CC accepts -fvisibility, r_cv_prog_cc_vis,[_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[r_cv_prog_cc_vis=yes], [r_cv_prog_cc_vis=no])])CFLAGS=$r_save_CFLAGSif test "${r_cv_prog_cc_vis}" = yes; thenif test "${r_cv_visibility_attribute}" = yes; thenC_VISIBILITY="-fvisibility=hidden"fifidnl Need to exclude Intel compilers, where this does not work correctly.dnl The flag is documented and is effective, but also hidesdnl unsatisfied references. We cannot test for GCC, as icc passes that test.dnl Seems to work for the revamped icx.case "${CC}" in## Intel compiler: note that -c99 may have been appended*icc*)C_VISIBILITY=;;esacfiif test -z "${CXX_VISIBILITY+set}"; thenr_save_CXXFLAGS=$CXXFLAGSCXXFLAGS="$CXXFLAGS -fvisibility=hidden"AC_LANG_PUSH(C++)AC_CACHE_CHECK(whether $CXX accepts -fvisibility, r_cv_prog_cxx_vis,[_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[r_cv_prog_cxx_vis=yes], [r_cv_prog_cxx_vis=no])])AC_LANG_POP(C++)CXXFLAGS=$r_save_CXXFLAGSif test "${r_cv_prog_cxx_vis}" = yes; thenif test "${r_cv_visibility_attribute}" = yes; thenCXX_VISIBILITY="-fvisibility=hidden"fifidnl Need to exclude Intel compilers, where this does not work correctly.dnl The flag is documented and is effective, but also hidesdnl unsatisfied references. We cannot test for GCC, as icc passes that test.dnl Seems to work for the revamped icpx.case "${CXX}" in## Intel compiler*icc*|*icpc*)CXX_VISIBILITY=;;esacfiif test -z "${F_VISIBILITY+set}"; thenAC_LANG_PUSH(Fortran)r_save_FCFLAGS=$FCFLAGSFCFLAGS="$FCFLAGS -fvisibility=hidden"AC_CACHE_CHECK(whether $FC accepts -fvisibility, r_cv_prog_fc_vis,[_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[r_cv_prog_fc_vis=yes], [r_cv_prog_fc_vis=no])])FCFLAGS=$r_save_FCFLAGSAC_LANG_POP(Fortran)if test "${r_cv_prog_fc_vis}" = yes; thenif test "${r_cv_visibility_attribute}" = yes; thenF_VISIBILITY="-fvisibility=hidden"fifidnl flang accepts this but ignores it.dnl Need to exclude Intel compilers, but ifx seems to work.case "${FC}" in## Intel compiler*ifc|*ifort)F_VISIBILITY=;;esacfiAC_SUBST(C_VISIBILITY)AC_SUBST(F_VISIBILITY)AC_SUBST(CXX_VISIBILITY)])# R_GCC4_VISIBILITY## R_KERN_USRSTACK## -------------## Checks whether we can use KERN_USRSTACK sysctl to## get the bottom of the stack (*BSD, Darwin, ...)AC_DEFUN([R_KERN_USRSTACK],[AC_CACHE_CHECK([whether KERN_USRSTACK sysctl is supported],[r_cv_kern_usrstack],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/sysctl.h>int main () {int nm[2] = {CTL_KERN, KERN_USRSTACK};void * base;size_t len = sizeof(void *);int r = sysctl(nm, 2, &base, &len, NULL, 0);exit((r==0)?0:1);}]])], [r_cv_kern_usrstack=yes], [r_cv_kern_usrstack=no],[r_cv_kern_usrstack=no])])if test $r_cv_kern_usrstack = yes; thenAC_DEFINE(HAVE_KERN_USRSTACK, 1, [Define if KERN_USRSTACK sysctl is supported.])fi])## R_PUTENV_AS_UNSETENV## --------------------## On some OSes putenv can unset an environment variable via## putenv(FOO) (glibc >= 2.2) or putenv(FOO=) (Windows)AC_DEFUN([R_PUTENV_AS_UNSETENV],[AC_CACHE_CHECK([whether putenv("FOO") can unset an environment variable],[r_cv_putenv_unset],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <stdlib.h>#include <string.h>int main(void){char *p;#ifdef HAVE_PUTENVputenv("R_TEST=testit");p = getenv("R_TEST");if(!p) exit(10);if(strcmp(p, "testit")) exit(11);putenv("R_TEST");p = getenv("R_TEST");if(!p) exit(0);#endifexit(1);}]])], [r_cv_putenv_unset=yes], [r_cv_putenv_unset=no],[r_cv_putenv_unset=no])])if test $r_cv_putenv_unset = yes; thenAC_DEFINE(HAVE_PUTENV_UNSET, 1, [Define if putenv("FOO") can unset an environment variable])fi][AC_CACHE_CHECK([whether putenv("FOO=") can unset an environment variable],[r_cv_putenv_unset2],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <stdlib.h>#include <string.h>int main(void){char *p;#ifdef HAVE_PUTENVputenv("R_TEST=testit");p = getenv("R_TEST");if(!p) exit(10);if(strcmp(p, "testit")) exit(11);putenv("R_TEST=");p = getenv("R_TEST");if(!p) exit(0);#endifexit(1);}]])], [r_cv_putenv_unset2=yes], [r_cv_putenv_unset2=no],[r_cv_putenv_unset2=no])])if test $r_cv_putenv_unset2 = yes; thenAC_DEFINE(HAVE_PUTENV_UNSET2, 1, [Define if putenv("FOO=") can unset an environment variable])fi])## R_FUNC_SIGACTION## ----------------## Some people claim that the SA_SIGINFO flag is an extension,## despite the clarity of POSIX markup. One such case is Hurd.AC_DEFUN([R_FUNC_SIGACTION],[AC_CACHE_CHECK([for working sigaction],[r_cv_func_sigaction_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "confdefs.h"#include <stdlib.h>#include <signal.h>int main (){struct sigaction sa;siginfo_t si, *ip;sigemptyset(&sa.sa_mask);sa.sa_flags = SA_ONSTACK | SA_SIGINFO;ip = &si;{void *addr = ip->si_addr;int code = ip->si_code;}exit(0);}]])],[r_cv_func_sigaction_works=yes],[r_cv_func_sigaction_works=no],[r_cv_func_sigaction_works=no])])if test "x${r_cv_func_sigaction_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_SIGACTION, 1,[Define if sigaction() is complete enough for R's usage])fi])# R_FUNC_SIGACTION## R_MKTIME_ERRNO## --------------## Check whether mktime sets errnoAC_DEFUN([R_MKTIME_ERRNO],[AC_CACHE_CHECK([whether mktime sets errno], [r_cv_mktime_errno],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <limits.h>#include <stdlib.h>#include <time.h>#include <errno.h>int main(void){struct tm tm;time_t res;/* It's hard to know what is an error, since mktime is allowed tofix up times.POSIX requires that mktime() sets errno, but it was optionalin earlier versions. Test whether once (time_t)-1 is returnedas an indication error, errno is set (see also PR#18532).At time of writing, Linux & Windows set errno, macOS does not.The tests below are POSIX only, because ISO C does not specify themeaning of time_t values, and hence we cannot know for sure that theresult is an indication of error and not a valid representation ofthe date. On POSIX, it is the number of seconds since Epoch. *//* test year 4900, which will fail with 32-bit time_t */tm.tm_year = 3000; tm.tm_mon = 0; tm.tm_mday = 0;tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1;errno = 0;res = mktime(&tm);if (res == (time_t)-1)exit(errno == 0);/* try harder to produce invalid date */tm.tm_year = INT_MAX; tm.tm_mon = INT_MAX; tm.tm_mday = INT_MAX;tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1;errno = 0;res = mktime(&tm);if (res == (time_t)-1)exit(errno == 0);/* try year 1848 */tm.tm_year = -52; tm.tm_mon = 0; tm.tm_mday = 0;tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1;errno = 0;res = mktime(&tm);if (res == (time_t)-1)exit(errno == 0);exit(1); /* fall back to errno not set */}]])],[r_cv_mktime_errno=yes],[r_cv_mktime_errno=no],[r_cv_mktime_errno=no])])if test "${r_cv_mktime_errno}" = yes; thenAC_DEFINE(MKTIME_SETS_ERRNO, 1, [Define if mktime sets errno.])fi])# R_MKTIME_ERRNO## R_ICU## -----AC_DEFUN([R_ICU],[AC_CACHE_CHECK([for ICU], [r_cv_icu],[r_save_LIBS="${LIBS}"LIBS="${LIBS} -licuuc -licui18n"AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <unicode/utypes.h>#include <unicode/ucol.h>#include <unicode/uloc.h>#include <unicode/uiter.h>#include <stdlib.h>int main () {UErrorCode status = U_ZERO_ERROR;UCollator *collator;UCharIterator aIter;collator = ucol_open(NULL, &status);if (U_FAILURE(status)) exit(1);/* check if ICU is complete enough */uiter_setUTF8(&aIter, "abc", 3);int result = ucol_strcollIter(collator, &aIter, &aIter, &status);if (U_FAILURE(status)) exit(1);exit(0);}]])],[r_cv_icu=yes], [r_cv_icu=no], [r_cv_icu=no])LIBS="${r_save_LIBS}"])if test "x${r_cv_icu}" = xyes; thenAC_DEFINE(USE_ICU, 1, [Define to use ICU for collation.])LIBS="${LIBS} -licuuc -licui18n"elseuse_ICU=nofi])# R_ICU## R_ABI## ------------## This gets recorded in etc/Renviron and used in tools/R/sotools.R## It is a comma-separated string of 5 items, OS,C,CXX,F77,F95 .## These days f77 and f90 are the same compiler.## Hard-coded in sotools.R for Windows.AC_DEFUN([R_ABI],[## System type.case "${host_os}" inlinux*)R_SYSTEM_ABI="linux";;solaris*)R_SYSTEM_ABI="solaris";;darwin*)R_SYSTEM_ABI="macos";;freebsd*)R_SYSTEM_ABI="freebsd";;*)R_SYSTEM_ABI="?";;esacdnl Compiler typesdnl C: AC_PROG_CC doesdnl If using the GNU C compiler, set shell variable `GCC' to `yes'.dnl Alternatively, could use ac_cv_c_compiler_gnu (undocumented).dnl clang and Intel compilers identify as GNU, which is OK here asdnl we list alternatives in sotools.Rif test "${GCC}" = yes; thenR_SYSTEM_ABI="${R_SYSTEM_ABI},gcc"elsecase "${host_os}" insolaris*)## we assume native compilers elsewhere (e.g. for -KPIC), so do so here too.R_SYSTEM_ABI="${R_SYSTEM_ABI},solcc";;*)R_SYSTEM_ABI="${R_SYSTEM_ABI},?"esacfidnl C++: AC_PROG_CXX doesdnl If using the GNU C++ compiler, set shell variable `GXX' to `yes'.dnl Alternatively, could use ac_cv_cxx_compiler_gnu (undocumented).dnl clang and Intel compilers identify as GNU, which is OK here asdnl we list alternatives in sotools.Rif test "${GXX}" = yes; thenR_SYSTEM_ABI="${R_SYSTEM_ABI},gxx"elsecase "${host_os}" insolaris*)R_SYSTEM_ABI="${R_SYSTEM_ABI},solCC";;*)R_SYSTEM_ABI="${R_SYSTEM_ABI},?"esacfidnl Fortran (fixed- then free-form). These days always the same compiler.if test "${ac_cv_fc_compiler_gnu}" = yes; thenR_SYSTEM_ABI="${R_SYSTEM_ABI},gfortran,gfortran"elsecase "${FC}" in*flang-new)R_SYSTEM_ABI="${R_SYSTEM_ABI},flang-new,flang-new";;## This means Classic flang*flang)R_SYSTEM_ABI="${R_SYSTEM_ABI},ClassicFlang,ClassicFlang";;## We need not consider ifort as it will be discontinued in 2023,## but it seems to have the same runtime as ifx.*ifx|*ifort)R_SYSTEM_ABI="${R_SYSTEM_ABI},intel,intel";;*)case "${host_os}" insolaris*)R_SYSTEM_ABI="${R_SYSTEM_ABI},solf95,solf95";;*)R_SYSTEM_ABI="${R_SYSTEM_ABI},?,?"esac;;esacfiAC_SUBST(R_SYSTEM_ABI)]) # R_ABI## Sanity check, failed by platforms without tzdata## (possible on Alpine Linux).## R_WORKING_MKTIME## ------------AC_DEFUN([R_WORKING_MKTIME],[AC_CACHE_CHECK([whether mktime, gmtime, localtime work correctly in 2020],[r_cv_working_mktime],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <time.h>#include <stdio.h>//#define PRINTint main(void) {struct tm tm, *stm;time_t res;putenv("TZ=UTC");tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 120; tm.tm_isdst = 0;// test 2020-01-01res = mktime(&tm);#ifdef PRINTprintf("day %ld\n", res);#elseif(res != 1577880000L) exit(1);#endif// and can we go back to POSIXlt?#ifdef HAVE_GMTIME_Rstm = gmtime_r(&res, &tm);#elsestm = gmtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 0 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 0) exit(10);#endiftm.tm_mon = 6; tm.tm_isdst = 0;// test 2020-07-01res = mktime(&tm);#ifdef PRINTprintf("res %ld\n", res);#elseif(res != 1593604800L) exit(2);#endif#ifdef HAVE_GMTIME_Rstm = gmtime_r(&res, &tm);#elsestm = gmtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 6 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 0) exit(20);#endifputenv("TZ=Europe/London");tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 120; tm.tm_isdst = -1;// test 2020-01-01, which is assumed to be in GMTres = mktime(&tm);#ifdef PRINTprintf("res %ld\n", res);#elseif(res != 1577880000L) exit(3);#endif#ifdef HAVE_LOCALTIME_Rstm = localtime_r(&res, &tm);#elsestm = localtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 0 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 0) exit(30);#endiftm.tm_mon = 6; tm.tm_isdst = -1;// test 2020-07-01 which is assumed to be in BSTres = mktime(&tm);#ifdef PRINTprintf("res %ld\n", res);#elseif(res != 1593601200L) exit(4);#endif#ifdef HAVE_LOCALTIME_Rstm = localtime_r(&res, &tm);#elsestm = localtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 6 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 1) exit(40);#endifputenv("TZ=Pacific/Auckland");tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 120; tm.tm_isdst = -1;res = mktime(&tm);#ifdef PRINTprintf("res %ld\n", res);#elseif(res != 1577833200L) exit(5);#endif#ifdef HAVE_LOCALTIME_Rstm = localtime_r(&res, &tm);#elsestm = localtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 0 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 1) exit(50);#endiftm.tm_mon = 6; tm.tm_isdst = -1;res = mktime(&tm);#ifdef PRINTprintf("res %ld\n", res);#elseif(res != 1593561600L) exit(6);#endif#ifdef HAVE_LOCALTIME_Rstm = localtime_r(&res, &tm);#elsestm = localtime(&res);#endif#ifdef PRINTprintf("%d-%02d-%02d %02d:%02d:%02d\n",1900+stm->tm_year, 1+stm->tm_mon, stm->tm_mday,stm->tm_hour, stm->tm_min, stm->tm_sec);#elseif(stm->tm_year != 120 || stm->tm_mon != 6 || stm->tm_mday != 1|| stm->tm_hour != 12 || stm-> tm_isdst != 0) exit(60);#endifexit(0);}]])],[r_cv_working_mktime=yes],[r_cv_working_mktime=no],[r_cv_working_mktime=no])])])# R_WORKING_MKTIME## 32-bit time_t will not## R_FUNC_MKTIME## ------------AC_DEFUN([R_FUNC_MKTIME],[AC_CACHE_CHECK([whether mktime works correctly after 2037],[r_cv_working_mktime1],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <time.h>int main(void) {if(sizeof(time_t) < 8) exit(1);struct tm tm;time_t res;putenv("TZ=Europe/London");tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 140; tm.tm_isdst = 0;// test 2040-01-01, whoch is assumed to be in GMTres = mktime(&tm);if(res != 2209032000L) exit(4);tm.tm_mon = 6; tm.tm_isdst = 1;// test 2040-07-01 which is assumed to be in BSTres = mktime(&tm);if(res != 2224753200L) exit(5);exit(0);}]])],[r_cv_working_mktime1=yes],[r_cv_working_mktime1=no],[r_cv_working_mktime1=no])])if test "x${r_cv_working_mktime1}" = xyes; thenAC_DEFINE(HAVE_WORKING_MKTIME_AFTER_2037, 1,[Define if your mktime works correctly after 2037.])fi])# R_FUNC_MKTIME## 32-bit time_t will fail in 1901## macOS (at leat 13) failed for < 1900## R_FUNC_MKTIME2## ------------AC_DEFUN([R_FUNC_MKTIME2],[AC_CACHE_CHECK([whether mktime works correctly before 1902],[r_cv_working_mktime2],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <time.h>int main(void) {if(sizeof(time_t) < 8) exit(1);struct tm tm;time_t res;putenv("TZ=Europe/London");// test 1901-01-01 12:00:00tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_isdst = 0;tm.tm_year = 01;// test 1901-01-01, where 32-bit time_t may fail.res = mktime(&tm);if(res == (time_t)-1) exit(3);tm.tm_year = -52; // macOS 13 fails for 1848.res = mktime(&tm);if(res == (time_t)-1) exit(4);tm.tm_year = -1; // and for 1899res = mktime(&tm);if(res == (time_t)-1) exit(5);exit(0);}]])],[r_cv_working_mktime2=yes],[r_cv_working_mktime2=no],[r_cv_working_mktime2=no])])if test "x${r_cv_working_mktime2}" = xyes; thenAC_DEFINE(HAVE_WORKING_MKTIME_BEFORE_1902, 1,[Define if your mktime works correctly before 1902.])fi])# R_FUNC_MKTIME2## R_FUNC_MKTIME3## ------------AC_DEFUN([R_FUNC_MKTIME3],[AC_CACHE_CHECK([whether mktime works correctly in 1969],[r_cv_working_mktime3],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <time.h>int main(void) {struct tm tm;time_t res;putenv("TZ=Europe/London");// test 1969-01-01 12:00:00tm.tm_sec = tm.tm_min = 0; tm.tm_hour = 12;tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 69; tm.tm_isdst = 0;tm.tm_year = 69; // TK says Windows UCRT fails prior to 1970res = mktime(&tm);if(res == (time_t)-1) exit(4);exit(0);}]])],[r_cv_working_mktime3=yes],[r_cv_working_mktime3=no],[r_cv_working_mktime3=no])])if test "x${r_cv_working_mktime3}" = xyes; thenAC_DEFINE(HAVE_WORKING_MKTIME_BEFORE_1970, 1,[Define if your mktime works correctly in 1969.])fi])# R_FUNC_MKTIME3## R_STDCXX## --------## Support for C++ standards (C++11, C++14, C++17, C++20, C++23), for use in packages.## R_STDCXX(VERSION, PREFIX, DEFAULT)AC_DEFUN([R_STDCXX],[r_save_CXX="${CXX}"r_save_CXXFLAGS="${CXXFLAGS}": ${$2=${$3}}: ${$2FLAGS=${$3FLAGS}}: ${$2PICFLAGS=${$3PICFLAGS}}CXX="${$2} ${$2STD}"CXXFLAGS="${$2FLAGS} ${$2PICFLAGS}"AC_LANG_PUSH([C++])dnlAX_CXX_COMPILE_STDCXX([$1], [], [optional])AC_LANG_POP([C++])dnl Seems the macro does not always get this rightCXX="${r_save_CXX}"CXXFLAGS="${r_save_CXXFLAGS}"if test "${HAVE_CXX$1}" = "1"; thendnl for aesthetics avoid leading spaceif test "${$2STD}"x = "x"; then$2STD="${switch}"else$2STD="${$2STD} ${switch}"fielse$2=""$2STD=""$2FLAGS=""$2PICFLAGS=""fiAC_SUBST($2)AC_SUBST($2STD)AC_SUBST($2FLAGS)AC_SUBST($2PICFLAGS)if test -z "${SHLIB_$2LD}"; thenSHLIB_$2LD="\$($2) \$($2STD)"fiAC_SUBST(SHLIB_$2LD): ${SHLIB_$2LDFLAGS=${SHLIB_$3LDFLAGS}}AC_SUBST(SHLIB_$2LDFLAGS)AC_ARG_VAR([$2], [C++$1 compiler command])AC_ARG_VAR([$2STD],[special flag for compiling and for linking C++$1 code, e.g. -std=c++$1])AC_ARG_VAR([$2FLAGS], [C++$1 compiler flags])AC_ARG_VAR([$2PICFLAGS],[special flags for compiling C++$1 code to be turned into ashared object])AC_ARG_VAR([SHLIB_$2LD],[command for linking shared objects which contain objectfiles from the C++$1 compiler])AC_ARG_VAR([SHLIB_$2LDFLAGS], [special flags used by SHLIB_$2LD])])# R_STDCXX## R_LIBCURL## ----------------AC_DEFUN([R_LIBCURL],[dnl curl-config might not match the installed libcurl,dnl so we allow the user to set CURL_CPPFLAGS, CURL_LIBSdnl and check the version directly rather than by curl-config --checkforAC_PATH_PROG(CURL_CONFIG, curl-config)if test -n "${CURL_CONFIG}"; thenecho "checking libcurl version ..." \`${CURL_CONFIG} --version | sed -e 's,^[[^0-9]]*,,'`if test -z "${CURL_CPPFLAGS}"; thenCURL_CPPFLAGS=`${CURL_CONFIG} --cflags`fi## This should be correct for a static-only build, user will## need to override to specify static linking (see config.site)## SU: No, it's not, unfortunately, we have to use --static-libs## for static-only builds as those provide incomplete flags with --libsif test -z "${CURL_LIBS}"; thenif test x`${CURL_CONFIG} --built-shared` = xno; thenCURL_LIBS=`${CURL_CONFIG} --static-libs`elseCURL_LIBS=`${CURL_CONFIG} --libs`fififir_save_CPPFLAGS="${CPPFLAGS}"CPPFLAGS="${CURL_CPPFLAGS} ${CPPFLAGS}"r_save_LIBS="${LIBS}"LIBS="${CURL_LIBS} ${LIBS}"AC_CHECK_HEADERS(curl/curl.h, [have_libcurl=yes], [have_libcurl=no])if test "x${have_libcurl}" = "xyes"; thenAC_CACHE_CHECK([if libcurl is >= 7.28.0], [r_cv_have_curl728],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#include <curl/curl.h>int main(void){#ifdef LIBCURL_VERSION_MAJOR#if LIBCURL_VERSION_MAJOR > 7exit(0);#elif LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR >= 28exit(0);#elseexit(1);#endif#elseexit(1);#endif}]])], [r_cv_have_curl728=yes], [r_cv_have_curl728=no], [r_cv_have_curl728=no])])fiif test "x${r_cv_have_curl728}" = xno; thenhave_libcurl=nofiif test "x${have_libcurl}" = "xyes"; thenAC_CACHE_CHECK([if libcurl supports https], [r_cv_have_curl_https],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h> // for exit#include <string.h>#include <curl/curl.h>int main(void){curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);const char * const *p = data->protocols;int found = 0;for (; *p; p++)if(strcmp(*p, "https") == 0) {found = 1; break;}exit(found ? 0 : 1);}]])], [r_cv_have_curl_https=yes], [r_cv_have_curl_https=no], [r_cv_have_curl_https=no])])fiif test "x${r_cv_have_curl_https}" = xno; thenhave_libcurl=nofiif test "x${have_libcurl}" = xyes; thenAC_DEFINE(HAVE_LIBCURL, 1, [Define if your system has libcurl >= 7.28.0 with support for https.])CPPFLAGS="${r_save_CPPFLAGS}"LIBS="${r_save_LIBS}"AC_SUBST(CURL_CPPFLAGS)AC_SUBST(CURL_LIBS)elseAC_MSG_ERROR([libcurl >= 7.28.0 library and headers are required with support for https])fi])# R_LIBCURL## R_OPENMP_SIMDRED## ------------## Support for SIMD reduction on '+' (part of OpenMP 4.0) in C compiler.AC_DEFUN([R_OPENMP_SIMDRED],[AC_CACHE_CHECK([whether OpenMP SIMD reduction is supported],[r_cv_openmp_simdred],[AC_LANG_PUSH(C)r_save_CFLAGS="${CFLAGS}"CFLAGS="${CFLAGS} ${R_OPENMP_CFLAGS}"AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>double ssum(double *x, int n) {/* SIMD reduction is supported since OpenMP 4.0. The value of _OPENMP isunreliable in some compilers, so we do not test its value. */#if defined(_OPENMP)double s = 0;#pragma omp simd reduction(+:s)for(int i = 0; i < n; i++)s += x[i];return s;#elseexit(1);return 0; /* not reachable */#endif}int main(void) {/* use 'volatile's to reduce the risk of thecomputation being inlined and constant-folded */volatile double xv[8] = {1, 2, 3, 4, 5, 6, 7, 8};volatile int n = 8;double x[8], s;int i;for(i = 0; i < 8; i++) x[i] = xv[i];s = ssum(x, n);if (s == 36) exit(0);exit(2);}]])],[r_cv_openmp_simdred=yes],[r_cv_openmp_simdred=no],[r_cv_openmp_simdred=no])CFLAGS="${r_save_CFLAGS}"])if test "x${r_cv_openmp_simdred}" = xyes; thenAC_DEFINE(HAVE_OPENMP_SIMDRED, 1,[Define if your OpenMP 4 implementation fully supports SIMD reduction])fi])# R_OPENMP_SIMDRED## R_FUNC_CTANH## ------------## Old versions of GLIBC have a bug due to which e.g. ctanh(0+365i) is NaN.## The problem exists also in RHEL6.AC_DEFUN([R_FUNC_CTANH],[AC_CACHE_CHECK([for working ctanh], [r_cv_func_ctanh_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <complex.h>#include <stdlib.h>#include "confdefs.h"int main () {#ifdef HAVE_CTANHvolatile double complex z1 = 0;volatile double complex z2 = 365;z1 = ctanh(z1);z2 = ctanh(z2);if (creal(z1) != 0 || cimag(z1) != 0 || creal(z2) != 1 || cimag(z2) != 0)exit(1);elseexit(0);#elseexit(1);#endif}]])],[r_cv_func_ctanh_works=yes],[r_cv_func_ctanh_works=no],[r_cv_func_ctanh_works=no])])if test "x${r_cv_func_ctanh_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_CTANH, 1,[Define if ctanh() exists and is working correctly.])fi])# R_FUNC_CTANH## R_MNT_WARN(MSG)## --------------------------------------------------------## Prints a warning if in maintainer mode.AC_DEFUN([R_MNT_WARN],[if test "x${use_maintainer_mode}" = xyes; thenAC_MSG_WARN([$1])fi])# R_MNT_WARN### A modified version of AC_SEARCH_LIBSAC_DEFUN([R_SEARCH_OPTS],[AS_VAR_PUSHDEF([r_Search], [r_cv_search_$1])dnlAC_CACHE_CHECK([for option providing $1], [r_Search],[r_opts_save_CFLAGS=$CFLAGSAC_LANG_CONFTEST([AC_LANG_CALL([], [$1])])for r_opt in '' $2; doif test -z "$r_opt"; thenr_res="none required"elser_res=$r_optCFLAGS="$r_opt $r_opts_save_CFLAGS"fiAC_LINK_IFELSE([], [AS_VAR_SET([r_Search], [$r_res])])AS_VAR_SET_IF([r_Search], [break])doneAS_VAR_SET_IF([r_Search], , [AS_VAR_SET([r_Search], [no])])rm conftest.$ac_extCFLAGS=$r_save_CFLAGS])AS_VAR_COPY([r_res], [r_Search])AS_VAR_POPDEF([r_Search])dnl])## R_PTHREAD## ---------## POSIX threads.AC_DEFUN([R_PTHREAD],[case "${host_os}" inmingw*|windows*|winnt|msys);;*)r_save_CFLAGS=${CFLAGS}CFLAGS="${CFLAGS} ${OPENMP_CFLAGS}"## Other things one might want to try for ancient systems## -Kthread (Sequent) -pthreads (Solaris/gcc, but -pthread works)R_SEARCH_OPTS([pthread_kill], [${PTHREAD_OPT} -pthread])CFLAGS=${r_save_CFLAGS}case "${r_cv_search_pthread_kill}" in"none required")## expected on macOS and Solaris, and other platforms with OpenMP in usehave_pthread=1;;no);;*)have_pthread=1PTHREAD_OPT=${r_cv_search_pthread_kill}R_SH_VAR_ADD(MAIN_LDFLAGS, [${PTHREAD_OPT}])R_SH_VAR_ADD(DYLIB_LDFLAGS, [${PTHREAD_OPT}]);;esac;;esacAC_MSG_CHECKING([whether POSIX threads are supported])if test -n "${have_pthread}"; thenAC_DEFINE(HAVE_PTHREAD, 1, [Define if have support for POSIX threads.])AC_MSG_RESULT([yes])elseAC_MSG_RESULT([no])fi])# R_PTHREAD## R_CSTACK_DIRECTION## -----------------AC_DEFUN([R_CSTACK_DIRECTION],[AC_MSG_CHECKING([for C stack direction])AC_CACHE_VAL([r_cv_cstack_direction],[cat > conftest.c <<EOF/* based on gnulib, alloca.c */#define attribute_no_sanitizer_instrumentation#ifdef __has_attribute# undef attribute_no_sanitizer_instrumentation# define attribute_no_sanitizer_instrumentation \__attribute__((disable_sanitizer_instrumentation))#endifint attribute_no_sanitizer_instrumentationfind_stack_direction(int *addr, int depth) {int dir, dummy = 0;if (! addr)addr = &dummy;*addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;dir = depth ? find_stack_direction (addr, depth - 1) : 0;return dir + dummy;}int main(int ac, char **av) {/* find_stack_direction: -1 is downwards, 1 is upwards, 0 is unknown *//* test: 1 is downwards, -1 is upwards, 0 is unknown */return -find_stack_direction (0, 20);}EOFdnl Allow this to be overruled in config.siteif test "x${R_C_STACK_DIRECTION}" != "x"; thenr_cv_cstack_direction=${R_C_STACK_DIRECTION}elseif ${CC} ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} ${MAIN_LDFLAGS} -o conftest${ac_exeext} \conftest.c 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD;then## redirect error messages to config.logoutput=`./conftest${ac_exeext} 2>&AS_MESSAGE_LOG_FD`_cstack_direction_result=${?}if test "${_cstack_direction_result}" = 1; thenr_cv_cstack_direction=downelif test "${_cstack_direction_result}" = 255; thenr_cv_cstack_direction=upfififi])rm -Rf conftest conftest.* coreif test -n "${r_cv_cstack_direction}"; thenAC_MSG_RESULT(${r_cv_cstack_direction})elseAC_MSG_RESULT([don't know (assume down)])r_cv_cstack_direction=downfi])# R_CSTACK_DIRECTIONAC_DEFUN([R_C17],[AC_CACHE_CHECK([whether ${CC} is a C17 compiler], [r_cv_C17],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef __STDC_VERSION__# if __STDC_VERSION__ > 201710L# error "Compiler claims to be later than C17"# elif __STDC_VERSION__ < 199901L# error "Compiler does not claim C99 compliance"# endif#else# error "Compiler does not advertise ISO C conformance"#endif// C89 example from autoconf 2.71.static char *e (p, i)char **p;int i;{return p[i];}// From rmumpstypedef enum { true=1, false=0 } bool;// simplified from survivalstatic void addup();void agsurv3(int *sn){addup(4, 0.0, 0.0);}static void addup(int itime, double haz, double var){}int main(void) {return 0;}]])],[r_cv_C17=yes],[r_cv_C17=no],[r_cv_C17=no])])])# R_C17AC_DEFUN([R_C23],[AC_CACHE_CHECK([whether ${CC} is a C23 compiler], [r_cv_C23],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef __STDC_VERSION__# if __STDC_VERSION__ < 202000L# error "Compiler does not claim C23 conformance"# endif#else# error "Compiler does not advertise ISO C conformance"#endifint main(void) {return 0;}]])],[r_cv_C23=yes],[r_cv_C23=no],[r_cv_C23=no])])])# R_C23AC_DEFUN([R_C90],[AC_CACHE_CHECK([whether ${CC} is a C90 compiler], [r_cv_C90],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L# error "Compiler claims to be later than C90"#endif/* C90 example from autoconf 2.71 */static char *e (p, i)char **p;int i;{return p[i];}int main(void) {return 0;}]])],[r_cv_C90=yes],[r_cv_C90=no],[r_cv_C90=no])])])# R_C90AC_DEFUN([R_C99],[AC_CACHE_CHECK([whether ${CC} is a C99 compiler], [r_cv_C99],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef __STDC_VERSION__# if __STDC_VERSION__ != 199901L# error "Compiler does not claim C99 compliance"# endif#else# error "Compiler does not advertise ISO C conformance"#endif/* C90 example from autoconf 2.71. */static char *e (p, i)char **p;int i;{return p[i];}int main(void) {return 0;}]])],[r_cv_C99=yes],[r_cv_C99=no],[r_cv_C99=no])])])# R_C90### Local variables: ***### mode: outline-minor ***### outline-regexp: "### [*]+" ***### End: ***