Rev 29376 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
### R.m4 -- extra macros for configuring R -*- Autoconf -*-###### Copyright (C) 1998-2004 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, you can obtain it via the World Wide Web at### `http://www.gnu.org/copyleft/gpl.html', or by writing to the Free### Software Foundation, 59 Temple Place -- Suite 330, Boston, MA### 02111-3307, USA.### * General support macros## R_ARG_USE## ---------AC_DEFUN([R_ARG_USE],[if test "${withval}" = no; thenuse_$1=noelseuse_$1=yesfi])# R_ARG_USE## 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### * 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";;esaccase "${host_os}" inhpux*)## On some versions of HP-UX (seen on both 10.20 and 11.0) we end up## a broken install (seen in /opt/imake/bin) which has the default## permissions wrong (PR#2091). Let's just always use install-sh on## HP-UX.INSTALL="\$\(top_srcdir\)/tools/install-sh -c";;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_PERL## -----------AC_DEFUN([R_PROG_PERL],[AC_PATH_PROGS(PERL, [${PERL} perl])if test -n "${PERL}"; then_R_PROG_PERL_VERSIONelse## <NOTE>## Need a full path for '@PERL@' substitutions when starting Perl## scripts with a line of the form '#! FOO'.AC_PATH_PROGS(FALSE, false)PERL="${FALSE}"## </NOTE>fiif test "${r_cv_prog_perl_v5}" = yes; thenNO_PERL5=falseelsewarn_perl5="you cannot build the object documentation system"AC_MSG_WARN([${warn_perl5}])NO_PERL5=truefiAC_SUBST(NO_PERL5)])# R_PROG_PERL## _R_PROG_PERL_VERSION## --------------------## Building the R documentation system (Rdconv and friends) requires## Perl version 5.004 or better.## Set shell variable r_cv_prog_perl_v5 to 'yes' if a recent enough## Perl is found, and to 'no' otherwise.AC_DEFUN([_R_PROG_PERL_VERSION],[AC_CACHE_CHECK([whether perl version is at least 5.004],[r_cv_prog_perl_v5],[if ${PERL} -e 'require 5.004 or exit 1'; thenr_cv_prog_perl_v5=yeselser_cv_prog_perl_v5=nofi])])# _R_PROG_PERL_VERSION## R_PROG_TEXMF## ------------AC_DEFUN([R_PROG_TEXMF],[AC_REQUIRE([R_PROG_PERL])AC_PATH_PROGS(DVIPS, [${DVIPS} dvips], false)AC_PATH_PROGS(TEX, [${TEX} tex], false)AC_PATH_PROGS(LATEX, [${LATEX} latex], false)if test -z "${ac_cv_path_TEX}" ; thenwarn_dvi="you cannot build DVI versions of the R manuals"elif test -z "${ac_cv_path_LATEX}"; thenwarn_dvi="you cannot build DVI versions of all the help pages"fiif test -n "${warn_dvi}"; thenAC_MSG_WARN([${warn_dvi}])fiAC_PATH_PROGS(MAKEINDEX, [${MAKEINDEX} makeindex], false)AC_PATH_PROGS(PDFTEX, [${PDFTEX} pdftex], false)AC_PATH_PROGS(PDFLATEX, [${PDFLATEX} pdflatex], false)if test -z "${ac_cv_path_PDFTEX}" ; thenwarn_pdf="you cannot build PDF versions of the R manuals"elif test -z "${ac_cv_path_PDFLATEX}" ; thenwarn_pdf="you cannot build PDF versions of all the help pages"fiif test -n "${warn_pdf}"; thenAC_MSG_WARN([${warn_pdf}])fiAC_PATH_PROGS(MAKEINFO_CMD, [${MAKEINFO} makeinfo])## This test admittedly looks a bit strange ... see R_PROG_PERL.if test "${PERL}" = "${FALSE}"; thenAC_PATH_PROGS(INSTALL_INFO, [${INSTALL_INFO} install-info], false)elseINSTALL_INFO="\$(PERL) \$(top_srcdir)/tools/install-info.pl"AC_SUBST(INSTALL_INFO)fi: ${R_RD4DVI="ae"}AC_SUBST(R_RD4DVI): ${R_RD4PDF="ae,hyper"}AC_SUBST(R_RD4PDF)])# R_PROG_TEXMF## R_PROG_MAKEINFO## ---------------AC_DEFUN([R_PROG_MAKEINFO],## This used to be part of R_PROG_TEXMF, where it really belongs.## Unfortunately, AC_PROG_LIBTOOL unconditionally overwrites MAKEINFO## by makeinfo or missing. To allow users to pass a MAKEINFO setting to## configure, we thus have to run R_PROG_TEXMF before AC_PROG_LIBTOOL,## save the result to something not overwritten (hence MAKEINFO_CMD),## and finally set MAKEINFO according to our needs.[AC_REQUIRE([R_PROG_TEXMF])AC_REQUIRE([AC_PROG_LIBTOOL])if test -n "${MAKEINFO_CMD}"; then_R_PROG_MAKEINFO_VERSIONfiif test "${r_cv_prog_makeinfo_v4}" != yes; thenwarn_info="you cannot build info versions of the R manuals"AC_MSG_WARN([${warn_info}])MAKEINFO=falseelseMAKEINFO="${MAKEINFO_CMD}"fi])# R_PROG_MAKEINFO## _R_PROG_MAKEINFO_VERSION## ------------------------## Building the R Texinfo manuals requires Makeinfo v4 or better.## Set shell variable r_cv_prog_makeinfo_v4 to 'yes' if a recent## enough Makeinfo is found, and to 'no' otherwise.AC_DEFUN([_R_PROG_MAKEINFO_VERSION],[AC_CACHE_CHECK([whether makeinfo version is at least 4],[r_cv_prog_makeinfo_v4],[makeinfo_version=`${MAKEINFO_CMD} --version | \grep "^makeinfo" | sed 's/[[^)]]*) \(.\).*/\1/'`if test -z "${makeinfo_version}"; thenr_cv_prog_makeinfo_v4=noelif test ${makeinfo_version} -lt 4; thenr_cv_prog_makeinfo_v4=noelser_cv_prog_makeinfo_v4=yesfi])])# _R_PROG_MAKEINFO_VERSION## R_PROG_BROWSER## --------------AC_DEFUN([R_PROG_BROWSER],[if test -z "${R_BROWSER}"; thenAC_PATH_PROGS(R_BROWSER, [netscape mozilla galeon kfmclient opera gnome-moz-remote open])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} acroread acroread4 xpdf gv gnome-gv ggv kghostview open gpdf])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_M## -----------## Check whether we can figure out C Make dependencies.AC_DEFUN([R_PROG_CC_M],[AC_MSG_CHECKING([whether we can compute C Make dependencies])AC_CACHE_VAL([r_cv_prog_cc_m],[echo "#include <math.h>" > conftest.c## No real point in using AC_LANG_* and ${ac_ext}, as we need to create## hard-wired suffix rules.## Another obvious candidate to try is '${MAKEDEPEND-makedepend} -f-'.## However, this does not work out of the box when srcdir and builddir## are different, as it creates dependencies of the form## ${srcdir}/foo.o: /path/to/bar.h## Could be made to work, of course ...## Note also that it does not create a 'conftest.o: conftest.c' line.## For gcc 3.2 or better, we want to use '-MM' in case this works.cc_minus_MM=falseif test "${GCC}" = yes; thengcc_version=`${CC} -v 2>&1 | grep "^.*g.. version" | \sed -e 's/^.*g.. version *//'`case "${gcc_version}" in1.*|2.*|3.[[01]]*) ;;*) cc_minus_MM="${CC} -MM" ;;esacfifor prog in "${cc_minus_MM}" "${CC} -M" "${CPP} -M" "cpp -M"; doif ${prog} conftest.c 2>/dev/null | \grep 'conftest.o: conftest.c' >/dev/null; thenr_cv_prog_cc_m="${prog}"breakfidone])if 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.c## No real point in using AC_LANG_* and ${ac_ext}, as we need to create## hard-wired suffix rules.ac_try='${CC} ${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).## 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_MAKEFRAG],[r_cc_rules_frag=Makefrag.ccAC_REQUIRE([R_PROG_CC_M])AC_REQUIRE([R_PROG_CC_C_O_LO])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) $< | \\sed -e 's/^\([[^:]]*\)\.o\([[ ]]\)*:/\1.o \1.lo\2:/' > \$[@]EOFelsecat << \EOF >> ${r_cc_rules_frag}.c.d:@echo > $[@]EOFfiif test "${r_cv_prog_cc_c_o_lo}" = yes; thencat << \EOF >> ${r_cc_rules_frag}.c.lo:$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS_LO) -c $< -o $[@]EOFelsecat << \EOF >> ${r_cc_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_rules_frag)])# R_PROG_CC_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_PROG_CC_FLAG_D__NO_MATH_INLINES## ---------------------------## In current glibc, inline version [x86] of exp is broken.## We fix this by adding '-D__NO_MATH_INLINES' to R_XTRA_CFLAGS rather## than AC_DEFINE(__NO_MATH_INLINES) as the former also takes care of## compiling C code for add-on packages.AC_DEFUN([R_PROG_CC_FLAG_D__NO_MATH_INLINES],[AC_EGREP_CPP([yes],[#include <math.h>#if defined(__GLIBC__)yes#endif],[R_SH_VAR_ADD(R_XTRA_CFLAGS, [-D__NO_MATH_INLINES])])])# R_PROG_CC_FLAG_D__NO_MATH_INLINES## R_C_OPTIEEE## -----------## Check whether the C compiler needs '-OPT:IEEE_NaN_inf=ON' to## correctly deal with IEEE NaN/Inf.## This flag is needed for the native SGI C compiler.## If needed, add the flag to R_XTRA_CFLAGS.AC_DEFUN([R_C_OPTIEEE],[AC_CACHE_CHECK([whether C compiler needs -OPT:IEEE_NaN_inf=ON],[r_cv_c_optieee],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>#include <ieeefp.h>int main () {double x = 0;fpsetmask(0); x = x / x; exit (x != x);}]])],[r_cv_c_optieee=yes],[r_cv_c_optieee=no],[r_cv_c_optieee=no])])if test "${r_cv_c_optieee}" = yes; thenR_SH_VAR_ADD(R_XTRA_CFLAGS, [-OPT:IEEE_NaN_inf=ON])fi])# R_C_OPTIEEE### * C++ compiler and its characteristics.## R_PROG_CXX_M## ------------## Check whether the C++ compiler accepts '-M' for generating## dependencies.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.cc## No real point in using AC_LANG_* and ${ac_ext}, as we need to create## hard-wired suffix rules. We could be a bit more careful as we## actually only test suffix '.cc'.if test -n "`${CXX} -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_C_O_LO## -----------------## Check whether the C++ compiler supports '-c -o FILE.lo'.AC_DEFUN([R_PROG_CXX_C_O_LO],[cxx_o_lo_rules_frag=Makefrag.cxxAC_CACHE_CHECK([whether ${CXX} supports -c -o FILE.lo],[r_cv_prog_cxx_c_o_lo],[test -d TMP || mkdir TMPecho "int some_variable = 0;" > conftest.cc## No real point in using AC_LANG_* and ${ac_ext}, as we need to create## hard-wired suffix rules. We could be a bit more careful as we## actually only test suffix '.cc'.ac_try='${CXX} ${CXXFLAGS} -c conftest.cc -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_cxx_c_o_lo=yeselser_cv_prog_cxx_c_o_lo=nofirm -rf conftest* TMP])])# R_PROG_CXX_C_O_LO## 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).AC_DEFUN([R_PROG_CXX_MAKEFRAG],[r_cxx_rules_frag=Makefrag.cxxAC_REQUIRE([R_PROG_CXX_M])AC_REQUIRE([R_PROG_CXX_C_O_LO])cat << \EOF > ${r_cxx_rules_frag}.cc.o:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $[@].cpp.o:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $[@].C.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) $< | \sed -e 's/^\([[^:]]*\)\.o\([[ ]]\)*:/\1.o \1.lo\2:/' > $[@].cpp.d:@echo "making $[@] from $<"@$(CXX) -M $(ALL_CPPFLAGS) $< | \sed -e 's/^\([[^:]]*\)\.o\([[ ]]\)*:/\1.o \1.lo\2:/' > $[@].C.d:@echo "making $[@] from $<"@$(CXX) -M $(ALL_CPPFLAGS) $< | \sed -e 's/^\([[^:]]*\)\.o\([[ ]]\)*:/\1.o \1.lo\2:/' > $[@]EOFelsecat << \EOF >> ${r_cxx_rules_frag}.cc.d:@echo > $[@].cpp.d:@echo > $[@].C.d:@echo > $[@]EOFfiif test "${r_cv_prog_cxx_c_o_lo}" = yes; thencat << \EOF >> ${r_cxx_rules_frag}.cc.lo:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o $[@].cpp.lo:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o $[@].C.lo:$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o $[@]EOFelsecat << \EOF >> ${r_cxx_rules_frag}.cc.lo:@test -d .libs || mkdir .libs$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o .libs/$[*].omv .libs/$[*].o $[*].lo.cpp.lo:@test -d .libs || mkdir .libs$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o .libs/$[*].omv .libs/$[*].o $[*].lo.C.lo:@test -d .libs || mkdir .libs$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS_LO) -c $< -o .libs/$[*].omv .libs/$[*].o $[*].loEOFfiAC_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 77 compiler/converter and its characteristics.## R_PROG_F77_OR_F2C## -----------------## Find a Fortran 77 compiler, or f2c.#### If we have not been forced to use a particular Fortran compiler, try## to find one using one of the several common names. The list is based## on what the current autoconf CVS contains. This says,#### <Quote>## Compilers are ordered by## 1. F77, F90, F95## 2. Good/tested native compilers, bad/untested native compilers## 3. Wrappers around f2c go last.#### 'fort77' and fc' are wrappers around 'f2c', 'fort77' being better.## It is believed that under HP-UX 'fort77' is the name of the native## compiler. On some Cray systems, fort77 is a native compiler.## frt is the Fujitsu F77 compiler.## pgf77 and pgf90 are the Portland Group F77 and F90 compilers.## xlf/xlf90/xlf95 are IBM (AIX) F77/F90/F95 compilers.## lf95 is the Lahey-Fujitsu compiler.## fl32 is the Microsoft Fortran "PowerStation" compiler.## af77 is the Apogee F77 compiler for Intergraph hardware running CLIX.## epcf90 is the "Edinburgh Portable Compiler" F90.## fort is the Compaq Fortran 90 (now 95) compiler for Tru64 and## Linux/Alpha.## </Quote>#### In fact, on HP-UX fort77 is the POSIX-compatible native compiler and## f77 is not: hence we need look for fort77 first!AC_DEFUN([R_PROG_F77_OR_F2C],[AC_BEFORE([$0], [AC_PROG_LIBTOOL])if test -n "${F77}" && test -n "${F2C}"; thenwarn_F77_and_F2C="both 'F77' and 'F2C' given.Using the given Fortran 77 compiler ..."AC_MSG_WARN([${warn_F77_and_F2C}])F2C=fiif test -n "${F77}"; thenAC_MSG_RESULT([defining F77 to be ${F77}])elif test -z "${F2C}"; thenF77=case "${host_os}" inhpux*)AC_CHECK_PROGS(F77, [g77 fort77 f77 xlf frt pgf77 fl32 af77 f90 \xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 fc]);;*)AC_CHECK_PROGS(F77, [g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 \xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 fc]);;esacif test -z "${F77}"; thenAC_CHECK_PROG(F2C, f2c, f2c, [])fielseAC_MSG_RESULT([defining F2C to be ${F2C}])fiif test -n "${F77}"; then## If the above 'found' a Fortran 77 compiler, we run AC_PROG_F77 as## this does additional testing (GNU, '-g', ...).AC_PROG_F77elif test -z "${F2C}"; thenAC_MSG_ERROR([Neither an F77 compiler nor f2c found])fi## record if we are using g77, so we can use -ffloat-storeAM_CONDITIONAL(USING_G77, [test "x${ac_cv_f77_compiler_gnu}" = xyes])])# R_PROG_F77_OR_F2C## R_PROG_F77_FLIBS## ----------------## Run AC_F77_LIBRARY_LDFLAGS, and fix some known problems with FLIBS.AC_DEFUN([R_PROG_F77_FLIBS],[AC_BEFORE([$0], [AC_F77_LIBRARY_LDFLAGS])## Currently (Autoconf 2.50 or better, it seems) FLIBS also contains all## elements of LIBS when AC_F77_LIBRARY_LDFLAGS is run. This is because## _AC_PROG_F77_V_OUTPUT() uses 'eval $ac_link' for obtaining verbose## linker output, and AC_LANG(Fortran 77) sets up ac_link to contain## LIBS. Most likely a bug, and a nuisance in any case ...## But we cannot simply eliminate the elements in FLIBS duplicated from## LIBS (e.g. '-lm' should be preserved). Hence, we try to call## AC_F77_LIBRARY_LDFLAGS() with LIBS temporarily set to empty.r_save_LIBS="${LIBS}"LIBS=AC_F77_LIBRARY_LDFLAGSLIBS="${r_save_LIBS}"## Currently g77 on Darwin links against '-lcrt1.o' (and for GCC 3.1 or## better also against '-lcrtbegin.o'), which (unlike '-lcrt0.o') are## not stripped by AC_F77_LIBRARY_LDFLAGS. This in particular causes## R_PROG_F77_CC_COMPAT to fail. Hence, we make sure all -lcrt*.o are## removed.#### Native f90 on HPUX 11 comes up with '-l:libF90.a' causing trouble## when using gcc for linking. The '-l:' construction is similar to## plain '-l' except that search order (archive/shared) given by '-a'## is not important. We escape such flags via '-Wl,' in case of gcc.## Note that the current Autoconf CVS uses _AC_LINKER_OPTION for a## similar purpose when computing FLIBS: this uses '-Xlinker' escapes## for gcc and does nothing otherwise. Note also that we cannot simply## unconditionally escape with '${wl}' from libtool as on HPUX we need## SHLIB_LD=ld for native C compilers (problem with non-PIC 'crt0.o',## see 'Individual platform overrides' in section 'DLL stuff' in file## 'configure.ac'.#### Using the Intel Fortran compiler (ifc) one typically gets incorrect## flags, as the output from _AC_PROG_F77_V_OUTPUT() contains double## quoted options, e.g. "-mGLOB_options_string=......", see also e.g.## http://www.octave.org/octave-lists/archive/octave-maintainers.2002/msg00038.html.## One possible solution is to change AC_F77_LIBRARY_LDFLAGS() to remove## double quotes for ifc, as it already does for the Cray cft90. As we## prefer not to overload Autoconf code, we try to fix things here ...flibs=if test "${GCC}" = yes; thenlinker_option="-Wl,"elselinker_option=fifor arg in ${FLIBS}; docase "${arg}" in-lcrt*.o);;-[[a-zA-Z]]/*\" | -[[a-zA-Z]]*\\) # ifc;;-l:*)flibs="${flibs} ${linker_option}${arg}";;*)flibs="${flibs} ${arg}";;esacdoneFLIBS="${flibs}"])# R_PROG_F77_FLIBS## R_PROG_F77_APPEND_UNDERSCORE## ----------------------------## See if the Fortran 77 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 77## compiler. Autoconf 2.50 or better has macros F77_FUNC(name, NAME)## and F77_FUNC_(name, NAME) for this. However, the F77_* macros in## the R API have one argument only and therefore cannot deal with## Fortran 77 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.AC_DEFUN([R_PROG_F77_APPEND_UNDERSCORE],[AC_REQUIRE([AC_F77_WRAPPERS])## DANGER! We really needs the results of _AC_F77_NAME_MANGLING as## stored in the cache var ac_cv_f77_mangling which is not documented## and hence may change ...case "${ac_cv_f77_mangling}" in"upper "*)AC_MSG_WARN([Fortran compiler uses uppercase external names])AC_MSG_ERROR([cannot use Fortran]);;esacAC_MSG_CHECKING([whether ${F77} appends underscores to external names])AC_CACHE_VAL([r_cv_prog_f77_append_underscore],[case "${ac_cv_f77_mangling}" in*", underscore, "*)r_cv_prog_f77_append_underscore=yes;;*", no underscore, "*)r_cv_prog_f77_append_underscore=no;;esac])if test -n "${r_cv_prog_f77_append_underscore}"; thenAC_MSG_RESULT([${r_cv_prog_f77_append_underscore}])elseAC_MSG_RESULT([unknown])AC_MSG_ERROR([cannot use Fortran])fiif test "${r_cv_prog_f77_append_underscore}" = yes; thenAC_DEFINE(HAVE_F77_UNDERSCORE, 1,[Define if your Fortran compiler appends an underscore toexternal names.])fi])# R_PROG_F77_APPEND_UNDERSCORE## R_PROG_F77_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.AC_DEFUN([R_PROG_F77_CAN_RUN],[AC_REQUIRE([AC_CHECK_LIBM])AC_MSG_CHECKING([whether mixed C/Fortran code can be run])AC_CACHE_VAL([r_cv_prog_f77_can_run],[cat > conftestf.f <<EOFsubroutine cftest(a, b, x, y)integer a(3), b(2)double precision x(3), y(3)endEOF${F77} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD## Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.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} ${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 HPUX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${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>thenoutput=`./conftest${ac_exeext} 2>&1`if test ${?} = 0; thenr_cv_prog_f77_can_run=yesfififi])rm -rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_f77_can_run}"; thenAC_MSG_RESULT([yes])elseAC_MSG_WARN([cannot run mixed C/Fortan code])AC_MSG_ERROR([Maybe check LDFLAGS for paths to Fortran libraries?])fi])# R_PROG_F77_CAN_RUN## R_PROG_F77_CC_COMPAT## --------------------## Check whether the Fortran 77 and C compilers agree on int and double.AC_DEFUN([R_PROG_F77_CC_COMPAT],[AC_REQUIRE([AC_CHECK_LIBM])AC_MSG_CHECKING([whether ${F77} and ${CC} agree on int and double])AC_CACHE_VAL([r_cv_prog_f77_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${F77} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD## Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.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} ${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 HPUX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${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>thenoutput=`./conftest${ac_exeext} 2>&1`if test ${?} = 0; thenr_cv_prog_f77_cc_compat=yesfififi])rm -rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_f77_cc_compat}"; thenAC_MSG_RESULT([yes])elseAC_MSG_WARN([${F77} and ${CC} disagree on int and double])AC_MSG_ERROR([Maybe change CFLAGS or FFLAGS?])fi])# R_PROG_F77_CC_COMPAT## R_PROG_F77_CC_COMPAT_COMPLEX## ----------------------------## Check whether the Fortran 77 and C compilers agree on double complex.AC_DEFUN([R_PROG_F77_CC_COMPAT_COMPLEX],[AC_REQUIRE([AC_CHECK_LIBM])AC_MSG_CHECKING([whether ${F77} and ${CC} agree on double complex])AC_CACHE_VAL([r_cv_prog_f77_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${F77} ${FFLAGS} -c conftestf.f 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD## Yes we need to double quote this ...[cat > conftest.c <<EOF#include <math.h>#include "confdefs.h"#ifdef HAVE_F77_UNDERSCORE# define F77_SYMBOL(x) x ## _#else# define F77_SYMBOL(x) x#endiftypedef struct {double r;double i;} 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} ${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 HPUX with native cc we have to## use ld for SHLIB_LD) ...if ${CC} ${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>thenoutput=`./conftest${ac_exeext} 2>&1`if test ${?} = 0; thenr_cv_prog_f77_cc_compat_complex=yesfififi])rm -rf conftest conftest.* conftestf.* coreif test -n "${r_cv_prog_f77_cc_compat_complex}"; thenAC_MSG_RESULT([yes])AC_DEFINE(HAVE_DOUBLE_COMPLEX, 1,[Define if C's Rcomplex and Fortran's COMPLEX*16 can beinterchanged, and can do arithmetic on the latter.])elsewarn_f77_cc_double_complex="${F77} and ${CC} disagree on double complex"AC_MSG_WARN([${warn_f77_cc_double_complex}])fiAC_SUBST(HAVE_DOUBLE_COMPLEX)])# R_PROG_F77_CC_COMPAT_COMPLEX## R_PROG_F77_C_O_LO## -----------------## Check whether the Fortran compiler supports '-c -o FILE.lo'.AC_DEFUN([R_PROG_F77_C_O_LO],[AC_CACHE_CHECK([whether ${F77} supports -c -o FILE.lo],[r_cv_prog_f77_c_o_lo],[test -d TMP || mkdir TMPcat > conftest.f <<EOFprogram conftestendEOFac_try='${F77} ${FFLAGS} -c conftest.f -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_f77_c_o_lo=yeselser_cv_prog_f77_c_o_lo=nofirm -rf conftest* TMP])])# R_PROG_F77_C_O_LO## R_PROG_F77_MAKEFRAG## -------------------## Generate a Make fragment with suffix rules for Fortran 77 source## files when using a Fortran 77 compiler.## Used for both building R (Makeconf) and add-ons (etc/Makeconf).AC_DEFUN([R_PROG_F77_MAKEFRAG],[AC_REQUIRE([R_PROG_F77_C_O_LO])r_f77_rules_frag=Makefrag.f77cat << \EOF > ${r_f77_rules_frag}.f.c:.f.o:$(F77) $(ALL_FFLAGS) -c $< -o $[@]EOFif test "${r_cv_prog_f77_c_o_lo}" = yes; thencat << \EOF >> ${r_f77_rules_frag}.f.lo:$(F77) $(ALL_FFLAGS_LO) -c $< -o $[@]EOFelsecat << \EOF >> ${r_f77_rules_frag}.f.lo:@test -d .libs || mkdir .libs$(F77) $(ALL_FFLAGS_LO) -c $< -o .libs/$[*].omv .libs/$[*].o $[*].loEOFfiAC_SUBST_FILE(r_f77_rules_frag)])# R_PROG_F77_MAKEFRAG## R_PROG_F77_FLAG(FLAG, [ACTION-IF-TRUE])## ---------------------------------------## Check whether the Fortran 77 compiler handles command line option## FLAG, and set shell variable r_cv_prog_f77_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_F77_FLAG],[ac_safe=AS_TR_SH($1)AC_MSG_CHECKING([whether ${F77} accepts $1])AC_CACHE_VAL([r_cv_prog_f77_flag_${ac_safe}],[AC_LANG_PUSH(Fortran 77)r_save_FFLAGS="${FFLAGS}"FFLAGS="${FFLAGS} $1"AC_LINK_IFELSE([AC_LANG_PROGRAM()],[eval "r_cv_prog_f77_flag_${ac_safe}=yes"],[eval "r_cv_prog_f77_flag_${ac_safe}=no"])FFLAGS="${r_save_FFLAGS}"AC_LANG_POP(Fortran 77)])if eval "test \"`echo '$r_cv_prog_f77_flag_'$ac_safe`\" = yes"; thenAC_MSG_RESULT([yes])[$2]elseAC_MSG_RESULT([no])fi])# R_PROG_F77_FLAG## R_PROG_F2C_FLIBS## ----------------AC_DEFUN([R_PROG_F2C_FLIBS],[AC_REQUIRE([AC_PROG_RANLIB])AC_REQUIRE([AC_CHECK_LIBM])AC_CACHE_VAL([r_cv_f2c_flibs],[## <FIXME>## Why do we need this? What about AC_F77_DUMMY_MAIN?## This seems to be necessary on some Linux system. -- you bet! -pdAC_LANG_PUSH(C)cat > conftest.${ac_ext} << EOFint MAIN_ () { exit(0); }int MAIN__ () { exit(0); }EOFif AC_TRY_EVAL(ac_compile); then${AR} ${ARFLAGS} libconftest.a conftest.${ac_objext} 1>&AS_MESSAGE_LOG_FD${RANLIB} libconftest.a 1>&AS_MESSAGE_LOG_FDfiAC_LANG_POP(C)## </FIXME>AC_CHECK_LIB(f2c, f_open,[flibs=-lf2c],[flibs=],[-L. -lconftest ${LIBM}])rm -f libconftest*if test -z "${flibs}"; thenAC_CHECK_LIB(F77, d_sin, [flibs=-lF77], [flibs=], [${LIBM}])if test -n "${flibs}"; thenAC_CHECK_LIB(I77, f_rew, [flibs="${flibs} -lI77"], [flibs=], [-lF77])fifir_cv_f2c_flibs="${flibs}"])FLIBS="${r_cv_f2c_flibs}"if test -z "${FLIBS}"; thenwarn_f2c_flibs="I found f2c but not libf2c, or libF77 and libI77"AC_MSG_WARN([${warn_f2c_flibs}])elseFLIBS="${FLIBS} ${LIBM}"fi])# R_PROG_F2C_FLIBS## R_PROG_F2C_MAKEFRAG## -------------------## Generate a Make fragment with suffix rules for Fortran 77 source## files when using f2c, the Fortran-to-C converter.## Used for both building R (Makeconf) and add-ons (etc/Makeconf).AC_DEFUN([R_PROG_F2C_MAKEFRAG],[AC_REQUIRE([R_PROG_CC_C_O_LO])r_f77_rules_frag=Makefrag.f77cat << \EOF > ${r_f77_rules_frag}.f.o:$(F2C) $(F2CFLAGS) < $< > $[*].c$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c $[*].c -o $[@]@rm -f $[*].c.f.lo:$(F2C) $(F2CFLAGS) < $< > $[*].cEOFif test "${r_cv_prog_cc_c_o_lo}" = yes; thencat << \EOF >> ${r_f77_rules_frag}$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS_LO) -c $[*].c -o $[@]EOFelsecat << \EOF >> ${r_f77_rules_frag}@test -d .libs || mkdir .libs$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS_LO) -c $[*].c -o .libs/$[*].omv .libs/$[*].o $[*].loEOFficat << \EOF >> ${r_f77_rules_frag}@rm -f $[*].cEOFAC_SUBST_FILE(r_f77_rules_frag)])# R_PROG_F2C_MAKEFRAG### * Library functions## R_FUNC___SETFPUCW## -----------------AC_DEFUN([R_FUNC___SETFPUCW],[AC_CHECK_FUNC(__setfpucw,[AC_CACHE_CHECK([whether __setfpucw is needed],[r_cv_func___setfpucw_needed],[AC_RUN_IFELSE([AC_LANG_SOURCE([[int main () {#include <fpu_control.h>#if defined(_FPU_DEFAULT) && defined(_FPU_IEEE)exit(_FPU_DEFAULT != _FPU_IEEE);#endifexit(0);}]])],[r_cv_func___setfpucw_needed=no],[r_cv_func___setfpucw_needed=yes],[r_cv_func___setfpucw_needed=no])])if test "x${r_cv_func___setfpucw_needed}" = xyes; thenAC_DEFINE(NEED___SETFPUCW, 1,[Define if your system needs __setfpucw() to controlFPU rounding.This was used to control floating point precision,rounding and floating point exceptions on older Linuxsystems.As of GLIBC 2.1 this function is not used anymore.])fi])])# R_FUNC___SETFPUCW## 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_FINITE## -------------AC_DEFUN([R_FUNC_FINITE],[AC_CACHE_CHECK([for working finite], [r_cv_func_finite_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>#include "confdefs.h"int main () {#ifdef HAVE_FINITEexit(finite(1./0.) | finite(0./0.) | finite(-1./0.));#elseexit(1);#endif}]])],[r_cv_func_finite_works=yes],[r_cv_func_finite_works=no],[r_cv_func_finite_works=no])])if test "x${r_cv_func_finite_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_FINITE, 1,[Define if finite() is correct for -Inf/NaN/Inf.])fi])# R_FUNC_FINITE## R_FUNC_LOG## ----------AC_DEFUN([R_FUNC_LOG],[AC_CACHE_CHECK([for working log], [r_cv_func_log_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <math.h>#include "confdefs.h"int main () {#ifdef HAVE_ISNANexit(!(log(0.) == -1. / 0. && isnan(log(-1.))));#elseexit(log(0.) != -1. / 0);#endif}]])],[r_cv_func_log_works=yes],[r_cv_func_log_works=no],[r_cv_func_log_works=no])])if test "x${r_cv_func_log_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_LOG, 1,[Define if log() is correct for 0/-1.])fi])# R_FUNC_LOG## 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)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 "confdefs.h"int main () {#ifdef HAVE_LOG1Pint k;double d;double x;/* log(1+x) = x - (1/2)x^2 + (1/3)x^3 - (1/4)x^4 ... *//* = x for x sufficiently small */x = pow(2.0, -53.0);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() */if(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_STRPTIME## ---------------AC_DEFUN([R_FUNC_STRPTIME],[AC_CACHE_CHECK([for working strptime], [r_cv_func_strptime_works],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdlib.h>#if defined(HAVE_GLIBC2) && !defined(__USE_XOPEN)#define __USE_XOPEN#endif#include <time.h>int main () {#ifdef HAVE_STRPTIMEstruct tm tm;char *p, *q, *p2;p = strptime("1960-01-01", "%Y-%m-%d", &tm); /* works on MacOS X */p2 =strptime("1899-01-01", "%Y-%m-%d", &tm); /* but this one does not */q = strptime("2003-02-40", "%Y-%m-%d", &tm);exit(p == 0 || p2 == 0 || q);#elseexit(1);#endif}]])],[r_cv_func_strptime_works=yes],[r_cv_func_strptime_works=no],[r_cv_func_strptime_works=no])])if test "x${r_cv_func_strptime_works}" = xyes; thenAC_DEFINE(HAVE_WORKING_STRPTIME, 1,[Define if strptime() exists, validates and does not fail pre-1970.])fi])# R_FUNC_STRPTIME### * 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])])if 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## 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])## size_t works on Windows but is unsigned and int is correctcase "${host_os}" incygwin*|mingw*|windows*|winnt)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(SOCKLEN_T, ${r_cv_type_socklen},[Type for socket lengths: socklen_t, sock_t, int?])])# R_TYPE_SOCKLEN### * System services## R_X11## -----AC_DEFUN([R_X11],[AC_PATH_XTRA # standard X11 search macroif test -z "${no_x}"; then## We force the use of -lX11 (perhaps this is not necessary?).X_LIBS="${X_LIBS} -lX11"use_X11="yes"AC_DEFINE(HAVE_X11, 1,[Define if you have the X11 headers and libraries, and wantthe X11 GUI to be built.])elseuse_X11="no"fi])# R_X11## R_GNOME## -------AC_DEFUN([R_GNOME],[if test ${want_gnome} = yes; thenGNOME_INIT_HOOK([], [cont])if test "${GNOMEUI_LIBS}"; thenAM_PATH_LIBGLADE([use_gnome="yes"GNOME_IF_FILES="gnome-interface.glade"],[warn_libglade_version="GNOME support requires libglade version >= 0.3"AC_MSG_WARN([${warn_libglade_version}])],[gnome])fifiif test "${use_gnome}" != yes; thenuse_gnome="no"GNOME_IF_FILES=elseAC_DEFINE(HAVE_GNOME, 1,[Define if you have the GNOME headers and libraries,and want the GNOME GUI to be built.])fiAC_SUBST(HAVE_GNOME)AC_SUBST(GNOME_IF_FILES)])# R_GNOME## R_AQUA## ------AC_DEFUN([R_AQUA],[use_aqua=noif test "${want_aqua}" = yes; thencase "${host_os}" indarwin*)use_aqua=yes;;esacfiif test "${use_aqua}" = yes; thenAC_DEFINE(HAVE_AQUA, 1,[Define if you have the Aqua headers and libraries,and want the Aqua GUI to be built.])fi])# R_AQUA## R_IEEE_754## ----------AC_DEFUN([R_IEEE_754],[AC_CHECK_FUNCS([finite 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_finite}" = yes \|| test "${ac_cv_have_decl_isfinite}" = yes) \&& (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.])fi])# R_IEEE_754## R_BSD_NETWORKING## ----------------AC_DEFUN([R_BSD_NETWORKING],[AC_CACHE_CHECK([for BSD networking],[r_cv_bsd_networking],[if test "${ac_cv_header_netdb_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=yeselser_cv_bsd_networking=nofi])if test "${r_cv_bsd_networking}" = yes; thenAC_DEFINE(HAVE_BSD_NETWORKING, 1,[Define if you have BSD networking headers and libraries.])AC_DEFINE(HAVE_SOCKETS, 1,[Define if you have support for sockets.])AC_DEFINE(HAVE_INTERNET, 1,[Define if you have support for ftp/http access.])AC_DEFINE(SUPPORT_LIBXML, 1,[Define if you provide support for the libxml ftp/httpfunctions.])fi])# R_BSD_NETWORKING## R_BITMAPS## ---------## 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_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.])fifiAC_SUBST(BITMAP_LIBS)])# R_BITMAPS## _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.0.5],[r_cv_header_png_h],AC_EGREP_CPP([yes],[#include <png.h>#if (PNG_LIBPNG_VER >= 10005)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.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 /opt/lib /sw/lib /usr/local/lib /usr/lib /lib /usr/lib64 ; 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 /opt/lib /sw/lib /usr/local/lib /usr/lib /lib /usr/lib64 ; 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 ...if 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>#if (TCL_MAJOR_VERSION >= 8)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>#if (TK_MAJOR_VERSION >= 8)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}## 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])donefiif 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=noif test -n "${TK_CONFIG}"; then. ${TK_CONFIG}## 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}"fiif test "${found_tk_h}" = no; then_R_HEADER_TKif test "{r_cv_header_tk_h}" = yes; thenfound_tk_h=yeselsehave_tcltk=nofifififiif test "${have_tcltk}" = yes; thenif test -n "${TK_XINCLUDES}"; 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([AC_PATH_XTRA])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_LIBS}"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## (http://www.gnu.org/software/ac-archive/htmldoc/acx_blas.m4),## with the following changes:## * We also handle HPUX .sl command line specifications.## * We explictly deal with the case of f2c. Most likely pointless.## * We only care about the Fortran 77 interface to Atlas, hence do not## test for -lcblas.## * We do not use BLAS libs that caused problems in the past: Alpha## CXML and DXML, and SGI SCSL and SGIMATH (marked with COMMENT tags).## * 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.## Based on acx_blas.m4 version 1.2 (2001-12-13)AC_DEFUN([R_BLAS_LIBS],[AC_REQUIRE([R_PROG_F77_FLIBS])AC_REQUIRE([R_PROG_F77_APPEND_UNDERSCORE])AC_REQUIRE([R_PROG_F2C_FLIBS])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_f77_append_underscore}" = yes \|| test -n "${F2C}"; thendgemm=dgemm_sgemm=sgemm_xerbla=xerbla_elsedgemm=dgemmsgemm=sgemmxerbla=xerblafiacx_blas_save_LIBS="${LIBS}"LIBS="${FLIBS} ${LIBS}"## First, check BLAS_LIBS environment variableif test "${acx_blas_ok}" = no; thenif test "x${BLAS_LIBS}" != x; thenr_save_LIBS="${LIBS}"; LIBS="${BLAS_LIBS} ${LIBS}"AC_MSG_CHECKING([for ${sgemm} in ${BLAS_LIBS}])AC_TRY_LINK([void ${xerbla}(char *srname, int *info){}], ${sgemm}(),[acx_blas_ok=yes], [BLAS_LIBS=""])AC_MSG_RESULT([${acx_blas_ok}])LIBS="${r_save_LIBS}"fifi## BLAS linked to by default? (happens on some supercomputers)if test "${acx_blas_ok}" = no; thenAC_CHECK_FUNC(${sgemm}, [acx_blas_ok=yes])fi## BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)if test "${acx_blas_ok}" = no; thenAC_CHECK_LIB(atlas, ATL_xerbla,[AC_CHECK_LIB(f77blas, ${sgemm},[acx_blas_ok=yesBLAS_LIBS="-lf77blas -latlas"],[], [-latlas])])fi## BLAS in PhiPACK libraries? (requires generic BLAS lib, too)if test "${acx_blas_ok}" = no; thenAC_CHECK_LIB(blas, ${sgemm},[AC_CHECK_LIB(dgemm, $dgemm,[AC_CHECK_LIB(sgemm, ${sgemm},[acx_blas_ok=yesBLAS_LIBS="-lsgemm -ldgemm -lblas"],[], [-lblas])],[], [-lblas])])fi## <COMMENT>## ## BLAS in Alpha CXML library?## if test "${acx_blas_ok}" = no; then## AC_CHECK_LIB(cxml, ${sgemm},## [acx_blas_ok=yes; BLAS_LIBS="-lcxml"])## fi## </COMMENT>## <COMMENT>## # BLAS in Alpha DXML library? (now called CXML, see above)## if test "${acx_blas_ok}" = no; then## AC_CHECK_LIB(dxml, ${sgemm},## [acx_blas_ok=yes; BLAS_LIBS="-ldxml"])## fi## </COMMENT>## BLAS in Sun Performance library?## Some versions require -xlic_lib=sunperf: -lsunperf will not work## 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_CHECKING([for ${sgemm} in -lsunperf])r_save_LIBS="${LIBS}"LIBS="-xlic_lib=sunperf -lsunmath ${LIBS}"AC_TRY_LINK_FUNC([${sgemm}], [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}])fifi## <COMMENT>## ## BLAS in SCSL library? (SGI/Cray Scientific Library)## if test "${acx_blas_ok}" = no; then## AC_CHECK_LIB(scs, ${sgemm},## [acx_blas_ok=yes; BLAS_LIBS="-lscs"])## fi## </COMMENT>## <COMMENT>## ## BLAS in SGIMATH library?## if test "${acx_blas_ok}" = no; then## AC_CHECK_LIB(complib.sgimath, ${sgemm},## [acx_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"])## fi## </COMMENT>## BLAS in IBM ESSL library? (requires generic BLAS lib, too)if test "${acx_blas_ok}" = no; thenAC_CHECK_LIB(blas, ${sgemm},[AC_CHECK_LIB(essl, ${sgemm},[acx_blas_ok=yesBLAS_LIBS="-lessl -lblas"],[], [-lblas ${FLIBS}])])fi## Generic BLAS library?if test "${acx_blas_ok}" = no; thenAC_CHECK_LIB(blas, ${sgemm},[acx_blas_ok=yes; BLAS_LIBS="-lblas"])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## (http://www.gnu.org/software/ac-archive/htmldoc/acx_lapack.m4),## with the following changes:## * We also handle HPUX .sl command line specifications.## * We explictly deal with the case of f2c. Most likely pointless.## * We test for a LAPACK_LIBS environment variable after checking## whether LAPACK is already linked (see below).## * We do not test for the generic lapack_rs6k library (why not?).## * 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).AC_DEFUN([R_LAPACK_LIBS],[AC_REQUIRE([R_PROG_F77_FLIBS])AC_REQUIRE([R_PROG_F77_APPEND_UNDERSCORE])AC_REQUIRE([R_PROG_F2C_FLIBS])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_f77_append_underscore}" = yes \|| test -n "${F2C}"; thenzgeev=zgeev_elsezgeev=zgeevfi# We cannot use LAPACK if BLAS is not foundif test "x${acx_blas_ok}" != xyes; thenacx_lapack_ok=noblasfiacx_lapack_save_LIBS="${LIBS}"LIBS="${BLAS_LIBS} ${FLIBS} ${LIBS}"## LAPACK linked to by default? (Could be in the BLAS libs.)if test "${acx_lapack_ok}" = no; thenAC_CHECK_FUNC(${zgeev}, [acx_lapack_ok=yes])fi## Next, check LAPACK_LIBS environment variableif test "${acx_lapack_ok}" = no; thenif test "x${LAPACK_LIBS}" != x; thenr_save_LIBS="${LIBS}"; LIBS="${LAPACK_LIBS} ${LIBS}"AC_MSG_CHECKING([for ${zgeev} in ${LAPACK_LIBS}])AC_TRY_LINK_FUNC(${zgeev}, [acx_lapack_ok=yes], [LAPACK_LIBS=""])AC_MSG_RESULT([${acx_lapack_ok}])LIBS="${r_save_LIBS}"fifi## LAPACK in Sun Performance library?## No longer test here as will be picked up by the default test.## Generic LAPACK library?if test "${acx_lapack_ok}" = no; thenAC_CHECK_LIB(lapack, ${zgeev},[acx_lapack_ok=yes; LAPACK_LIBS="-llapack"])fiLIBS="${acx_lapack_save_LIBS}"if test "${acx_lapack_ok}" = yes; thenAC_DEFINE(HAVE_LAPACK, 1,[Define if external LAPACK is available.])fiAC_SUBST(LAPACK_LIBS)])# R_LAPACK_LIBS## 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>])fiAC_CACHE_CHECK([for XDR support],[r_cv_xdr],[if test "${ac_cv_header_rpc_types_h}" = yes \&& test "${ac_cv_header_rpc_xdr_h}" = yes \&& test "${ac_cv_search_xdr_string}" != no ; thenr_cv_xdr=yeselser_cv_xdr=nofi])AM_CONDITIONAL(BUILD_XDR, [test "x${r_cv_xdr}" = xno])])# R_XDR## R_ZLIB## ------## Try finding zlib library and headers.## We check that both are installed, and that the header >= 1.2.1## and that gzeof is in the library (which suggests the library## is also recent enough).AC_DEFUN([R_ZLIB],[if test "x${use_zlib}" = xyes; thenAC_CHECK_LIB(z, gzeof, [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}fielsehave_zlib="no"fiAC_MSG_CHECKING([whether zlib support needs to be compiled])if test "${have_zlib}" = yes; thenAC_MSG_RESULT([no])LIBS="-lz ${LIBS}"elseAC_MSG_RESULT([yes])_R_ZLIB_MMAPfiAM_CONDITIONAL(BUILD_ZLIB, [test "x${have_zlib}" = xno])AM_CONDITIONAL(USE_MMAP_ZLIB,[test "x${have_zlib}" = xno && test "x${r_cv_zlib_mmap}" = xyes])])# 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.1],[r_cv_header_zlib_h],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <string.h>#include <zlib.h>int main() {#ifdef ZLIB_VERSIONexit(strcmp(ZLIB_VERSION, "1.2.1") < 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_ZLIB_MMAP## ------------AC_DEFUN([_R_ZLIB_MMAP],[AC_CACHE_CHECK([mmap support for zlib],[r_cv_zlib_mmap],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h>#include <sys/mman.h>#include <sys/stat.h>caddr_t hello() {exit(mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0));}]])],[r_cv_zlib_mmap=no],[r_cv_zlib_mmap=yes],[r_cv_zlib_mmap=yes])])])# _R_ZLIB_MMAP## R_PCRE## ------## Try finding pcre library and headers.## RedHat puts the headers in /usr/include/pcre.AC_DEFUN([R_PCRE],[if test "x${use_pcre}" = 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=nofifielsehave_pcre=nofiif test "x${have_pcre}" = xyes; thenAC_CACHE_CHECK([if PCRE version >= 4.0], [r_have_pcre4],[AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_PCRE_PCRE_H#include <pcre/pcre.h>#else#ifdef HAVE_PCRE_H#include <pcre.h>#endif#endifint main() {#ifdef PCRE_MAJORexit(PCRE_MAJOR<4);#elseexit(1);#endif}]])], [r_have_pcre4=yes], [r_have_pcre4=no], [r_have_pcre4=no])])fiif test "x${r_have_pcre4}" = xyes; thenLIBS="-lpcre ${LIBS}"fiAC_MSG_CHECKING([whether PCRE support needs to be compiled])if test "x${r_have_pcre4}" = xyes; thenAC_MSG_RESULT([no])elseAC_MSG_RESULT([yes])fiAM_CONDITIONAL(BUILD_PCRE, [test "x${r_have_pcre4}" != xyes])])# R_PCRE## 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],[if test "x${use_bzlib}" = xyes; thenAC_CHECK_LIB(bz2, BZ2_bzlibVersion, [have_bzlib=yes], [have_bzlib=no])if test "${have_bzlib}" = yes; thenAC_CHECK_HEADER(bzlib.h, [have_bzlib=yes], [have_bzlib=no])fielsehave_bzlib=nofiAC_MSG_CHECKING([whether bzip2 support needs to be compiled])if test "x${have_bzlib}" = xyes; thenAC_MSG_RESULT([no])LIBS="-lbz2 ${LIBS}"elseAC_MSG_RESULT([yes])fiAM_CONDITIONAL(BUILD_BZLIB, [test "x${have_bzlib}" = xno])])# R_BZLIB## 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 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_SOURCES *=' \${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}])# R_RECOMMENDED_PACKAGES### Local variables: ***### mode: outline-minor ***### outline-regexp: "### [*]+" ***### End: ***