Add more AX_ macros
This commit is contained in:
parent
07a53aedc5
commit
a7868b49c1
1
etc/m4/.gitignore
vendored
Normal file
1
etc/m4/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
autoconf-archive/
|
||||||
19
etc/m4/Makefile
Normal file
19
etc/m4/Makefile
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
FILES = \
|
||||||
|
ax_blas.m4 \
|
||||||
|
ax_cxx_compile_stdcxx.m4 \
|
||||||
|
ax_cxx_static_cast.m4 \
|
||||||
|
ax_lapack.m4 \
|
||||||
|
ax_mpi.m4 \
|
||||||
|
ax_cxx_typename.m4 \
|
||||||
|
ax_cxx_templates.m4 \
|
||||||
|
ax_openmp.m4 \
|
||||||
|
ax_prog_cxx_mpi.m4 \
|
||||||
|
ax_prog_emacs.m4 \
|
||||||
|
ax_elisp.m4 \
|
||||||
|
|
||||||
|
|
||||||
|
update: autoconf-archive
|
||||||
|
for f in $(FILES); do cp -v $</m4/$$f $$f; done
|
||||||
|
|
||||||
|
autoconf-archive:
|
||||||
|
git clone git://git.sv.gnu.org/autoconf-archive.git
|
||||||
@ -1,54 +1,42 @@
|
|||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# http://www.gnu.org/software/autoconf-archive/ax_mpi.html
|
# https://www.gnu.org/software/autoconf-archive/ax_blas.html
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
#
|
#
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
#
|
#
|
||||||
# AX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
# AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
#
|
#
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
#
|
#
|
||||||
# This macro tries to find out how to compile programs that use MPI
|
# This macro looks for a library that implements the BLAS linear-algebra
|
||||||
# (Message Passing Interface), a standard API for parallel process
|
# interface (see http://www.netlib.org/blas/). On success, it sets the
|
||||||
# communication (see http://www-unix.mcs.anl.gov/mpi/)
|
# BLAS_LIBS output variable to hold the requisite library linkages.
|
||||||
#
|
#
|
||||||
# On success, it sets the MPICC, MPICXX, MPIF77, or MPIFC output variable
|
# To link with BLAS, you should link with:
|
||||||
# to the name of the MPI compiler, depending upon the current language.
|
|
||||||
# (This may just be $CC/$CXX/$F77/$FC, but is more often something like
|
|
||||||
# mpicc/mpiCC/mpif77/mpif90.) It also sets MPILIBS to any libraries that
|
|
||||||
# are needed for linking MPI (e.g. -lmpi or -lfmpi, if a special
|
|
||||||
# MPICC/MPICXX/MPIF77/MPIFC was not found).
|
|
||||||
#
|
#
|
||||||
# If you want to compile everything with MPI, you should use something
|
# $BLAS_LIBS $LIBS $FLIBS
|
||||||
# like this for C:
|
|
||||||
#
|
#
|
||||||
# if test -z "$CC" && test -n "$MPICC"; then
|
# in that order. FLIBS is the output variable of the
|
||||||
# CC="$MPICC"
|
# AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is
|
||||||
# fi
|
# sometimes necessary in order to link with F77 libraries. Users will also
|
||||||
# AC_PROG_CC
|
# need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same
|
||||||
# AX_MPI
|
# reason.
|
||||||
# CC="$MPICC"
|
|
||||||
# LIBS="$MPILIBS $LIBS"
|
|
||||||
#
|
#
|
||||||
# and similar for C++ (change all instances of CC to CXX), Fortran 77
|
# Many libraries are searched for, from ATLAS to CXML to ESSL. The user
|
||||||
# (with F77 instead of CC) or Fortran (with FC instead of CC).
|
# may also use --with-blas=<lib> in order to use some specific BLAS
|
||||||
|
# library <lib>. In order to link successfully, however, be aware that you
|
||||||
|
# will probably need to use the same Fortran compiler (which can be set
|
||||||
|
# via the F77 env. var.) as was used to compile the BLAS library.
|
||||||
#
|
#
|
||||||
# NOTE: The above assumes that you will use $CC (or whatever) for linking
|
# ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is
|
||||||
# as well as for compiling. (This is the default for automake and most
|
# found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is
|
||||||
# Makefiles.)
|
# not found. If ACTION-IF-FOUND is not specified, the default action will
|
||||||
#
|
# define HAVE_BLAS.
|
||||||
# The user can force a particular library/compiler by setting the
|
|
||||||
# MPICC/MPICXX/MPIF77/MPIFC and/or MPILIBS environment variables.
|
|
||||||
#
|
|
||||||
# ACTION-IF-FOUND is a list of shell commands to run if an MPI library is
|
|
||||||
# found, and ACTION-IF-NOT-FOUND is a list of commands to run if it is not
|
|
||||||
# found. If ACTION-IF-FOUND is not specified, the default action will
|
|
||||||
# define HAVE_MPI.
|
|
||||||
#
|
#
|
||||||
# LICENSE
|
# LICENSE
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
# Copyright (c) 2008 Julian C. Cummings <cummings@cacr.caltech.edu>
|
# Copyright (c) 2019 Geoffrey M. Oxberry <goxberry@gmail.com>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify it
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by the
|
# under the terms of the GNU General Public License as published by the
|
||||||
@ -61,7 +49,7 @@
|
|||||||
# Public License for more details.
|
# Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along
|
# You should have received a copy of the GNU General Public License along
|
||||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
# gives unlimited permission to copy, distribute and modify the configure
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
@ -76,117 +64,178 @@
|
|||||||
# modified version of the Autoconf Macro, you may extend this special
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
# exception to the GPL to apply to your modified version as well.
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
#serial 7
|
#serial 17
|
||||||
|
|
||||||
AU_ALIAS([ACX_MPI], [AX_MPI])
|
AU_ALIAS([ACX_BLAS], [AX_BLAS])
|
||||||
AC_DEFUN([AX_MPI], [
|
AC_DEFUN([AX_BLAS], [
|
||||||
AC_PREREQ([2.50]) dnl for AC_LANG_CASE
|
AC_PREREQ([2.55])
|
||||||
|
AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
ax_blas_ok=no
|
||||||
|
|
||||||
AC_LANG_CASE([C], [
|
AC_ARG_WITH(blas,
|
||||||
AC_REQUIRE([AC_PROG_CC])
|
[AS_HELP_STRING([--with-blas=<lib>], [use BLAS library <lib>])])
|
||||||
AC_ARG_VAR(MPICC,[MPI C compiler command])
|
case $with_blas in
|
||||||
AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC)
|
yes | "") ;;
|
||||||
ax_mpi_save_CC="$CC"
|
no) ax_blas_ok=disable ;;
|
||||||
CC="$MPICC"
|
-* | */* | *.a | *.so | *.so.* | *.dylib | *.dylib.* | *.o)
|
||||||
AC_SUBST(MPICC)
|
BLAS_LIBS="$with_blas"
|
||||||
],
|
;;
|
||||||
[C++], [
|
*) BLAS_LIBS="-l$with_blas" ;;
|
||||||
AC_REQUIRE([AC_PROG_CXX])
|
esac
|
||||||
AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
|
|
||||||
AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX)
|
|
||||||
ax_mpi_save_CXX="$CXX"
|
|
||||||
CXX="$MPICXX"
|
|
||||||
AC_SUBST(MPICXX)
|
|
||||||
],
|
|
||||||
[Fortran 77], [
|
|
||||||
AC_REQUIRE([AC_PROG_F77])
|
|
||||||
AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command])
|
|
||||||
AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf_r mpxlf mpf77 cmpifc, $F77)
|
|
||||||
ax_mpi_save_F77="$F77"
|
|
||||||
F77="$MPIF77"
|
|
||||||
AC_SUBST(MPIF77)
|
|
||||||
],
|
|
||||||
[Fortran], [
|
|
||||||
AC_REQUIRE([AC_PROG_FC])
|
|
||||||
AC_ARG_VAR(MPIFC,[MPI Fortran compiler command])
|
|
||||||
AC_CHECK_PROGS(MPIFC, mpif90 mpxlf95_r mpxlf90_r mpxlf95 mpxlf90 mpf90 cmpif90c, $FC)
|
|
||||||
ax_mpi_save_FC="$FC"
|
|
||||||
FC="$MPIFC"
|
|
||||||
AC_SUBST(MPIFC)
|
|
||||||
])
|
|
||||||
|
|
||||||
if test x = x"$MPILIBS"; then
|
# Get fortran linker names of BLAS functions to check for.
|
||||||
AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
|
AC_F77_FUNC(sgemm)
|
||||||
[C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])],
|
AC_F77_FUNC(dgemm)
|
||||||
[Fortran 77], [AC_MSG_CHECKING([for MPI_Init])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=""
|
ax_blas_save_LIBS="$LIBS"
|
||||||
AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])],
|
LIBS="$LIBS $FLIBS"
|
||||||
[Fortran], [AC_MSG_CHECKING([for MPI_Init])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" "
|
# First, check BLAS_LIBS environment variable
|
||||||
AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])])
|
if test $ax_blas_ok = no; then
|
||||||
|
if test "x$BLAS_LIBS" != x; then
|
||||||
|
save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS"
|
||||||
|
AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes], [BLAS_LIBS=""])
|
||||||
|
AC_MSG_RESULT($ax_blas_ok)
|
||||||
|
LIBS="$save_LIBS"
|
||||||
fi
|
fi
|
||||||
AC_LANG_CASE([Fortran 77], [
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"])
|
|
||||||
fi
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"])
|
|
||||||
fi
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(mpif77, MPI_Init, [MPILIBS="-lmpif77"])
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[Fortran], [
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"])
|
|
||||||
fi
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"])
|
|
||||||
fi
|
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl We have to use AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) and not AC_CHECK_HEADER because the
|
# BLAS linked to by default? (happens on some supercomputers)
|
||||||
dnl latter uses $CPP, not $CC (which may be mpicc).
|
if test $ax_blas_ok = no; then
|
||||||
AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then
|
save_LIBS="$LIBS"; LIBS="$LIBS"
|
||||||
AC_MSG_CHECKING([for mpi.h])
|
AC_MSG_CHECKING([if $sgemm is being linked in already])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]], [[]])],[AC_MSG_RESULT(yes)],[MPILIBS=""
|
AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes])
|
||||||
AC_MSG_RESULT(no)])
|
AC_MSG_RESULT($ax_blas_ok)
|
||||||
fi],
|
LIBS="$save_LIBS"
|
||||||
[C++], [if test x != x"$MPILIBS"; then
|
fi
|
||||||
AC_MSG_CHECKING([for mpi.h])
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]], [[]])],[AC_MSG_RESULT(yes)],[MPILIBS=""
|
|
||||||
AC_MSG_RESULT(no)])
|
|
||||||
fi],
|
|
||||||
[Fortran 77], [if test x != x"$MPILIBS"; then
|
|
||||||
AC_MSG_CHECKING([for mpif.h])
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
|
||||||
AC_MSG_RESULT(no)])
|
|
||||||
fi],
|
|
||||||
[Fortran], [if test x != x"$MPILIBS"; then
|
|
||||||
AC_MSG_CHECKING([for mpif.h])
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
|
||||||
AC_MSG_RESULT(no)])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
AC_LANG_CASE([C], [CC="$ax_mpi_save_CC"],
|
# BLAS in OpenBLAS library? (http://xianyi.github.com/OpenBLAS/)
|
||||||
[C++], [CXX="$ax_mpi_save_CXX"],
|
if test $ax_blas_ok = no; then
|
||||||
[Fortran 77], [F77="$ax_mpi_save_F77"],
|
AC_CHECK_LIB(openblas, $sgemm, [ax_blas_ok=yes
|
||||||
[Fortran], [FC="$ax_mpi_save_FC"])
|
BLAS_LIBS="-lopenblas"])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_SUBST(MPILIBS)
|
# BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(atlas, ATL_xerbla,
|
||||||
|
[AC_CHECK_LIB(f77blas, $sgemm,
|
||||||
|
[AC_CHECK_LIB(cblas, cblas_dgemm,
|
||||||
|
[ax_blas_ok=yes
|
||||||
|
BLAS_LIBS="-lcblas -lf77blas -latlas"],
|
||||||
|
[], [-lf77blas -latlas])],
|
||||||
|
[], [-latlas])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(blas, $sgemm,
|
||||||
|
[AC_CHECK_LIB(dgemm, $dgemm,
|
||||||
|
[AC_CHECK_LIB(sgemm, $sgemm,
|
||||||
|
[ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"],
|
||||||
|
[], [-lblas])],
|
||||||
|
[], [-lblas])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in Intel MKL library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
# MKL for gfortran
|
||||||
|
if test x"$ac_cv_fc_compiler_gnu" = xyes; then
|
||||||
|
# 64 bit
|
||||||
|
if test $host_cpu = x86_64; then
|
||||||
|
AC_CHECK_LIB(mkl_gf_lp64, $sgemm,
|
||||||
|
[ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread"],,
|
||||||
|
[-lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread])
|
||||||
|
# 32 bit
|
||||||
|
elif test $host_cpu = i686; then
|
||||||
|
AC_CHECK_LIB(mkl_gf, $sgemm,
|
||||||
|
[ax_blas_ok=yes;BLAS_LIBS="-lmkl_gf -lmkl_sequential -lmkl_core -lpthread"],,
|
||||||
|
[-lmkl_gf -lmkl_sequential -lmkl_core -lpthread])
|
||||||
|
fi
|
||||||
|
# MKL for other compilers (Intel, PGI, ...?)
|
||||||
|
else
|
||||||
|
# 64-bit
|
||||||
|
if test $host_cpu = x86_64; then
|
||||||
|
AC_CHECK_LIB(mkl_intel_lp64, $sgemm,
|
||||||
|
[ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread"],,
|
||||||
|
[-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread])
|
||||||
|
# 32-bit
|
||||||
|
elif test $host_cpu = i686; then
|
||||||
|
AC_CHECK_LIB(mkl_intel, $sgemm,
|
||||||
|
[ax_blas_ok=yes;BLAS_LIBS="-lmkl_intel -lmkl_sequential -lmkl_core -lpthread"],,
|
||||||
|
[-lmkl_intel -lmkl_sequential -lmkl_core -lpthread])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Old versions of MKL
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in Apple vecLib library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS"
|
||||||
|
AC_MSG_CHECKING([for $sgemm in -framework vecLib])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_CALL([], [$sgemm])], [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"])
|
||||||
|
AC_MSG_RESULT($ax_blas_ok)
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in Alpha CXML library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in Alpha DXML library? (now called CXML, see above)
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in Sun Performance library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
if test "x$GCC" != xyes; then # only works with Sun CC
|
||||||
|
AC_CHECK_LIB(sunmath, acosp,
|
||||||
|
[AC_CHECK_LIB(sunperf, $sgemm,
|
||||||
|
[BLAS_LIBS="-xlic_lib=sunperf -lsunmath"
|
||||||
|
ax_blas_ok=yes],[],[-lsunmath])])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in SCSL library? (SGI/Cray Scientific Library)
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in SGIMATH library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(complib.sgimath, $sgemm,
|
||||||
|
[ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BLAS in IBM ESSL library? (requires generic BLAS lib, too)
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(blas, $sgemm,
|
||||||
|
[AC_CHECK_LIB(essl, $sgemm,
|
||||||
|
[ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"],
|
||||||
|
[], [-lblas $FLIBS])])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generic BLAS library?
|
||||||
|
if test $ax_blas_ok = no; then
|
||||||
|
AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(BLAS_LIBS)
|
||||||
|
|
||||||
|
LIBS="$ax_blas_save_LIBS"
|
||||||
|
|
||||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
if test x = x"$MPILIBS"; then
|
if test x"$ax_blas_ok" = xyes; then
|
||||||
$2
|
ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1])
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1])
|
ax_blas_ok=no
|
||||||
:
|
$2
|
||||||
fi
|
fi
|
||||||
])dnl AX_MPI
|
])dnl AX_BLAS
|
||||||
|
|||||||
@ -10,13 +10,13 @@
|
|||||||
#
|
#
|
||||||
# Check for baseline language coverage in the compiler for the specified
|
# Check for baseline language coverage in the compiler for the specified
|
||||||
# version of the C++ standard. If necessary, add switches to CXX and
|
# version of the C++ standard. If necessary, add switches to CXX and
|
||||||
# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard)
|
# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
|
||||||
# or '14' (for the C++14 standard).
|
# the respective C++ standard version.
|
||||||
#
|
#
|
||||||
# The second argument, if specified, indicates whether you insist on an
|
# The second argument, if specified, indicates whether you insist on an
|
||||||
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
||||||
# -std=c++11). If neither is specified, you get whatever works, with
|
# -std=c++11). If neither is specified, you get whatever works, with
|
||||||
# preference for an extended mode.
|
# preference for no added switch, and then for an extended mode.
|
||||||
#
|
#
|
||||||
# The third argument, if specified 'mandatory' or if left unspecified,
|
# The third argument, if specified 'mandatory' or if left unspecified,
|
||||||
# indicates that baseline support for the specified C++ standard is
|
# indicates that baseline support for the specified C++ standard is
|
||||||
@ -33,14 +33,17 @@
|
|||||||
# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
|
# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
|
||||||
# Copyright (c) 2015 Paul Norman <penorman@mac.com>
|
# Copyright (c) 2015 Paul Norman <penorman@mac.com>
|
||||||
# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
|
# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
|
||||||
# Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com>
|
# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
|
||||||
|
# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
|
||||||
|
# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
|
||||||
|
# Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
|
||||||
#
|
#
|
||||||
# Copying and distribution of this file, with or without modification, are
|
# Copying and distribution of this file, with or without modification, are
|
||||||
# permitted in any medium without royalty provided the copyright notice
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
# and this notice are preserved. This file is offered as-is, without any
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
# warranty.
|
# warranty.
|
||||||
|
|
||||||
#serial 8
|
#serial 14
|
||||||
|
|
||||||
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
|
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
|
||||||
dnl (serial version number 13).
|
dnl (serial version number 13).
|
||||||
@ -49,6 +52,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
|
|||||||
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
|
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
|
||||||
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
|
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
|
||||||
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
|
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
|
||||||
|
[$1], [20], [ax_cxx_compile_alternatives="20"],
|
||||||
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
|
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
|
||||||
m4_if([$2], [], [],
|
m4_if([$2], [], [],
|
||||||
[$2], [ext], [],
|
[$2], [ext], [],
|
||||||
@ -60,6 +64,8 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
|
|||||||
[m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
|
[m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
|
||||||
AC_LANG_PUSH([C++])dnl
|
AC_LANG_PUSH([C++])dnl
|
||||||
ac_success=no
|
ac_success=no
|
||||||
|
|
||||||
|
m4_if([$2], [], [dnl
|
||||||
AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
|
AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
|
||||||
ax_cv_cxx_compile_cxx$1,
|
ax_cv_cxx_compile_cxx$1,
|
||||||
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
|
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
|
||||||
@ -67,7 +73,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
|
|||||||
[ax_cv_cxx_compile_cxx$1=no])])
|
[ax_cv_cxx_compile_cxx$1=no])])
|
||||||
if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
|
if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
|
||||||
ac_success=yes
|
ac_success=yes
|
||||||
fi
|
fi])
|
||||||
|
|
||||||
m4_if([$2], [noext], [], [dnl
|
m4_if([$2], [noext], [], [dnl
|
||||||
if test x$ac_success = xno; then
|
if test x$ac_success = xno; then
|
||||||
@ -147,7 +153,6 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
|
|||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl Test body for checking C++14 support
|
dnl Test body for checking C++14 support
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
||||||
@ -155,12 +160,24 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
|
|||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Test body for checking C++17 support
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl Test body for checking C++20 support
|
||||||
|
|
||||||
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
|
||||||
|
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
dnl Tests for new features in C++11
|
dnl Tests for new features in C++11
|
||||||
|
|
||||||
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
|
||||||
@ -197,11 +214,13 @@ namespace cxx11
|
|||||||
|
|
||||||
struct Base
|
struct Base
|
||||||
{
|
{
|
||||||
|
virtual ~Base() {}
|
||||||
virtual void f() {}
|
virtual void f() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Derived : public Base
|
struct Derived : public Base
|
||||||
{
|
{
|
||||||
|
virtual ~Derived() override {}
|
||||||
virtual void f() override {}
|
virtual void f() override {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -585,20 +604,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
|
|||||||
|
|
||||||
#error "This is not a C++ compiler"
|
#error "This is not a C++ compiler"
|
||||||
|
|
||||||
#elif __cplusplus <= 201402L
|
#elif __cplusplus < 201703L
|
||||||
|
|
||||||
#error "This is not a C++17 compiler"
|
#error "This is not a C++17 compiler"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#if defined(__clang__)
|
|
||||||
#define REALLY_CLANG
|
|
||||||
#else
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
#define REALLY_GCC
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
@ -606,16 +617,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
|
|||||||
namespace cxx17
|
namespace cxx17
|
||||||
{
|
{
|
||||||
|
|
||||||
#if !defined(REALLY_CLANG)
|
|
||||||
namespace test_constexpr_lambdas
|
namespace test_constexpr_lambdas
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO: test it with clang++ from git
|
|
||||||
|
|
||||||
constexpr int foo = [](){return 42;}();
|
constexpr int foo = [](){return 42;}();
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // !defined(REALLY_CLANG)
|
|
||||||
|
|
||||||
namespace test::nested_namespace::definitions
|
namespace test::nested_namespace::definitions
|
||||||
{
|
{
|
||||||
@ -850,12 +857,9 @@ namespace cxx17
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(REALLY_CLANG)
|
|
||||||
namespace test_template_argument_deduction_for_class_templates
|
namespace test_template_argument_deduction_for_class_templates
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO: test it with clang++ from git
|
|
||||||
|
|
||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
struct pair
|
struct pair
|
||||||
{
|
{
|
||||||
@ -874,7 +878,6 @@ namespace cxx17
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // !defined(REALLY_CLANG)
|
|
||||||
|
|
||||||
namespace test_non_type_auto_template_parameters
|
namespace test_non_type_auto_template_parameters
|
||||||
{
|
{
|
||||||
@ -888,12 +891,9 @@ namespace cxx17
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(REALLY_CLANG)
|
|
||||||
namespace test_structured_bindings
|
namespace test_structured_bindings
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO: test it with clang++ from git
|
|
||||||
|
|
||||||
int arr[2] = { 1, 2 };
|
int arr[2] = { 1, 2 };
|
||||||
std::pair<int, int> pr = { 1, 2 };
|
std::pair<int, int> pr = { 1, 2 };
|
||||||
|
|
||||||
@ -925,14 +925,10 @@ namespace cxx17
|
|||||||
const auto [ x3, y3 ] = f3();
|
const auto [ x3, y3 ] = f3();
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // !defined(REALLY_CLANG)
|
|
||||||
|
|
||||||
#if !defined(REALLY_CLANG)
|
|
||||||
namespace test_exception_spec_type_system
|
namespace test_exception_spec_type_system
|
||||||
{
|
{
|
||||||
|
|
||||||
// TODO: test it with clang++ from git
|
|
||||||
|
|
||||||
struct Good {};
|
struct Good {};
|
||||||
struct Bad {};
|
struct Bad {};
|
||||||
|
|
||||||
@ -950,7 +946,6 @@ namespace cxx17
|
|||||||
static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
|
static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // !defined(REALLY_CLANG)
|
|
||||||
|
|
||||||
namespace test_inline_variables
|
namespace test_inline_variables
|
||||||
{
|
{
|
||||||
@ -975,7 +970,36 @@ namespace cxx17
|
|||||||
|
|
||||||
} // namespace cxx17
|
} // namespace cxx17
|
||||||
|
|
||||||
#endif // __cplusplus <= 201402L
|
#endif // __cplusplus < 201703L
|
||||||
|
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Tests for new features in C++20
|
||||||
|
|
||||||
|
m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
|
||||||
|
#error "This is not a C++ compiler"
|
||||||
|
|
||||||
|
#elif __cplusplus < 202002L
|
||||||
|
|
||||||
|
#error "This is not a C++20 compiler"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <version>
|
||||||
|
|
||||||
|
namespace cxx20
|
||||||
|
{
|
||||||
|
|
||||||
|
// As C++20 supports feature test macros in the standard, there is no
|
||||||
|
// immediate need to actually test for feature availability on the
|
||||||
|
// Autoconf side.
|
||||||
|
|
||||||
|
} // namespace cxx20
|
||||||
|
|
||||||
|
#endif // __cplusplus < 202002L
|
||||||
|
|
||||||
|
]])
|
||||||
|
|||||||
42
etc/m4/ax_cxx_static_cast.m4
Normal file
42
etc/m4/ax_cxx_static_cast.m4
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_cxx_static_cast.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_CXX_STATIC_CAST
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# If the compiler supports static_cast<>, define HAVE_STATIC_CAST.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Todd Veldhuizen
|
||||||
|
# Copyright (c) 2008 Luc Maisonobe <luc@spaceroots.org>
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
|
# warranty.
|
||||||
|
|
||||||
|
#serial 8
|
||||||
|
|
||||||
|
AU_ALIAS([AC_CXX_STATIC_CAST], [AX_CXX_STATIC_CAST])
|
||||||
|
AC_DEFUN([AX_CXX_STATIC_CAST],
|
||||||
|
[AC_CACHE_CHECK(whether the compiler supports static_cast<>,
|
||||||
|
ax_cv_cxx_static_cast,
|
||||||
|
[AC_LANG_PUSH([C++])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <typeinfo>
|
||||||
|
class Base { public : Base () {} virtual void f () = 0; };
|
||||||
|
class Derived : public Base { public : Derived () {} virtual void f () {} };
|
||||||
|
int g (Derived&) { return 0; }]], [[
|
||||||
|
Derived d; Base& b = d; Derived& s = static_cast<Derived&> (b); return g (s);]])],
|
||||||
|
[ax_cv_cxx_static_cast=yes], [ax_cv_cxx_static_cast=no])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
])
|
||||||
|
if test "$ax_cv_cxx_static_cast" = yes; then
|
||||||
|
AC_DEFINE(HAVE_STATIC_CAST,,
|
||||||
|
[define if the compiler supports static_cast<>])
|
||||||
|
fi
|
||||||
|
])
|
||||||
43
etc/m4/ax_cxx_templates.m4
Normal file
43
etc/m4/ax_cxx_templates.m4
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_cxx_templates.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_CXX_TEMPLATES
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# If the compiler supports basic templates, define HAVE_TEMPLATES.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Todd Veldhuizen
|
||||||
|
# Copyright (c) 2008 Luc Maisonobe <luc@spaceroots.org>
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
|
# warranty.
|
||||||
|
|
||||||
|
#serial 8
|
||||||
|
|
||||||
|
AU_ALIAS([AC_CXX_TEMPLATES], [AX_CXX_TEMPLATES])
|
||||||
|
AC_DEFUN([AX_CXX_TEMPLATES],
|
||||||
|
[dnl
|
||||||
|
AC_CACHE_CHECK([whether the compiler supports basic templates],
|
||||||
|
[ax_cv_cxx_templates],
|
||||||
|
[AC_LANG_PUSH([C++])
|
||||||
|
AC_COMPILE_IFELSE([dnl
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
template<class T> class A {public:A(){};};
|
||||||
|
template<class T> void f(const A<T>& ){};
|
||||||
|
],
|
||||||
|
[A<double> d; A<int> i; f(d); f(i); return 0;])],
|
||||||
|
[ax_cv_cxx_templates=yes],
|
||||||
|
[ax_cv_cxx_templates=no])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
])
|
||||||
|
AS_IF([test "X$ax_cv_cxx_templates" = "Xyes"],
|
||||||
|
[AC_DEFINE(HAVE_TEMPLATES,,[define if the compiler supports basic templates])])
|
||||||
|
])
|
||||||
38
etc/m4/ax_cxx_typename.m4
Normal file
38
etc/m4/ax_cxx_typename.m4
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_cxx_typename.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_CXX_TYPENAME
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# If the compiler recognizes the typename keyword, define HAVE_TYPENAME.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Todd Veldhuizen
|
||||||
|
# Copyright (c) 2008 Luc Maisonobe <luc@spaceroots.org>
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice
|
||||||
|
# and this notice are preserved. This file is offered as-is, without any
|
||||||
|
# warranty.
|
||||||
|
|
||||||
|
#serial 8
|
||||||
|
|
||||||
|
AU_ALIAS([AC_CXX_TYPENAME], [AX_CXX_TYPENAME])
|
||||||
|
AC_DEFUN([AX_CXX_TYPENAME],
|
||||||
|
[AC_CACHE_CHECK(whether the compiler recognizes typename,
|
||||||
|
ax_cv_cxx_typename,
|
||||||
|
[AC_LANG_PUSH([C++])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[template<typename T>class X {public:X(){}};]],
|
||||||
|
[[X<float> z; return 0;]])],
|
||||||
|
[ax_cv_cxx_typename=yes], [ax_cv_cxx_typename=no])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
])
|
||||||
|
if test "$ax_cv_cxx_typename" = yes; then
|
||||||
|
AC_DEFINE(HAVE_TYPENAME,,[define if the compiler recognizes typename])
|
||||||
|
fi
|
||||||
|
])
|
||||||
170
etc/m4/ax_elisp.m4
Normal file
170
etc/m4/ax_elisp.m4
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_elisp.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_ELISP_CONFIG_FILE(FILENAME)
|
||||||
|
# AX_ELISP_CHECK(SYMBOL,DESCRIPTION,BODY,SUCCESS-EXPR)
|
||||||
|
# AX_ELISP_CHECK_FEATURE(SYMBOL)
|
||||||
|
# AX_ELISP_CHECK_FBOUNDP(SYMBOL,[FEATURE [...]])
|
||||||
|
# AX_ELISP_CHECK_BOUNDP(SYMBOL,[FEATURE [...]])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This is a simple library to check the Emacs reality by way of Emacs Lisp
|
||||||
|
# forms evaluated under $EMACS --batch -Q. This means you MUST have the
|
||||||
|
# shell variable EMACS set to a valid Emacs executable prior to the first
|
||||||
|
# call to any of the AX_ELISP_CHECK et al macros. Those work by saving
|
||||||
|
# their results to the file defined by calling AX_ELISP_CONFIG_FILE so you
|
||||||
|
# MUST call that prior, too. For example:
|
||||||
|
#
|
||||||
|
# dnl Arrange to save config answers in $top_builddir/lisp/config.el.
|
||||||
|
# AX_ELISP_CONFIG_FILE([lisp/config.el])
|
||||||
|
#
|
||||||
|
# dnl Set shell variable EMACS and AC_SUBST it, too.
|
||||||
|
# dnl (NB: This is a separate Autoconf Archive macro.)
|
||||||
|
# AX_PROG_EMACS
|
||||||
|
#
|
||||||
|
# In the following detailed descriptions, SYMBOL stands for an Emacs Lisp
|
||||||
|
# symbol, which may contain hyphens, e.g., 'define-error' or 'org-src'.
|
||||||
|
# Likewise, FEATURE is an Emacs Lisp symbol (naming a feature). BODY and
|
||||||
|
# SUCCESS-EXPR are Emacs Lisp forms, zero or more for BODY and exactly one
|
||||||
|
# for SUCCESS-EXPR. In these forms you must take care to avoid apostrophe
|
||||||
|
# (U+27). Instead of 'foo, write (quote foo).
|
||||||
|
#
|
||||||
|
# * AX_ELISP_CONFIG_FILE(FILENAME)
|
||||||
|
#
|
||||||
|
# This arranges for future AX_ELISP_CHECK (et al) calls to save their
|
||||||
|
# results in FILENAME. May be called multiple times. FILENAME should be
|
||||||
|
# relative to the top build dir.
|
||||||
|
#
|
||||||
|
# * AX_ELISP_CHECK(SYMBOL,DESCRIPTION,BODY,SUCCESS-EXPR)
|
||||||
|
#
|
||||||
|
# This is the general macro that the other AX_ELISP_CHECK* macros use. It
|
||||||
|
# constructs a short Emacs Lisp file comprising BODY and evaluates it via
|
||||||
|
# $EMACS --batch -Q. The exit value of this script depends on the result
|
||||||
|
# of evaluating SUCCESS-EXPR: non-nil is success and nil is failure. On
|
||||||
|
# success, append SYMBOL on a line of its own to the config file. This
|
||||||
|
# macro uses AC_CACHE_CHECK and passes DESCRIPTION to it.
|
||||||
|
#
|
||||||
|
# * AX_ELISP_CHECK_FEATURE(FEATURE)
|
||||||
|
#
|
||||||
|
# This checks if (require (quote FEATURE)) is successful. If so, add
|
||||||
|
# featurep-FEATURE to the config file (NB the "featurep-" prefix).
|
||||||
|
#
|
||||||
|
# * AX_ELISP_CHECK_FBOUNDP(SYMBOL,[FEATURE [...]])
|
||||||
|
#
|
||||||
|
# This checks if (fboundp (quote SYMBOL)) is successful. If so, append
|
||||||
|
# SYMBOL to the config file. Optional 2nd arg is a space-separated list of
|
||||||
|
# features to require prior to the fboundp check.
|
||||||
|
#
|
||||||
|
# * AX_ELISP_CHECK_BOUNDP(SYMBOL,[FEATURE [...]])
|
||||||
|
#
|
||||||
|
# This checks if (boundp (quote SYMBOL)) is successful. If so, append
|
||||||
|
# SYMBOL to the config file. Optional 2nd arg is a space-separated list of
|
||||||
|
# features to require prior to the boundp check.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016-2017 Thien-Thi Nguyen
|
||||||
|
#
|
||||||
|
# This program 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 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 2
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP_CONFIG_FILE],[dnl
|
||||||
|
dnl 1 -- relative filename (from 'top_srcdir')
|
||||||
|
m4_define([AX_ELISP__CONFIG_FILENAME],[$1])dnl
|
||||||
|
])dnl
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP__PREP],[dnl
|
||||||
|
AS_IF([AS_VAR_TEST_SET([EMACS])],,dnl
|
||||||
|
[AC_MSG_ERROR([No value for EMACS])])
|
||||||
|
dnl FIXME: Check at autoconf-time that AX_ELISP__CONFIG_FILENAME is set.
|
||||||
|
dnl (If not, or if the value is unsuitable, throw fatal error.)
|
||||||
|
rm -f AX_ELISP__CONFIG_FILENAME
|
||||||
|
touch AX_ELISP__CONFIG_FILENAME
|
||||||
|
])dnl
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP_CHECK],[dnl
|
||||||
|
dnl 1 -- Emacs Lisp symbol to add to config file if "success"
|
||||||
|
dnl 2 -- description
|
||||||
|
dnl 3 -- Emacs Lisp body (zero or more forms)
|
||||||
|
dnl 4 -- Emacs Lisp expression for "success"
|
||||||
|
AC_REQUIRE([AX_ELISP__PREP])dnl
|
||||||
|
AS_VAR_PUSHDEF([CV],[elisp_cv_$1])dnl
|
||||||
|
AC_CACHE_CHECK([$2],[CV],[dnl
|
||||||
|
cat >conftest.el <<AX_ELISP__EOF
|
||||||
|
$3
|
||||||
|
(kill-emacs (if $4 0 1))
|
||||||
|
AX_ELISP__EOF
|
||||||
|
AS_IF([$EMACS --batch -Q -l conftest.el 1>&5 2>&5],[CV=yes],[CV=no])])
|
||||||
|
AS_IF([test yes = $[]CV],[echo "$1" >> AX_ELISP__CONFIG_FILENAME])
|
||||||
|
AS_VAR_POPDEF([CV])dnl
|
||||||
|
])dnl
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP_CHECK_FEATURE],[dnl
|
||||||
|
dnl 1 -- Emacs Lisp symbol (a feature name)
|
||||||
|
AC_REQUIRE([AX_ELISP__PREP])dnl
|
||||||
|
AX_ELISP_CHECK([featurep-$1],[if $EMACS supports feature '$1'],[dnl
|
||||||
|
(require (quote $1))
|
||||||
|
],[dnl
|
||||||
|
(featurep (quote $1))
|
||||||
|
])])
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP_CHECK_FBOUNDP],[dnl
|
||||||
|
dnl 1 -- Emacs Lisp symbol
|
||||||
|
dnl 2 -- (optional) space-separated list of features to 'require'
|
||||||
|
AX_ELISP_CHECK([$1],[if '$1' is defined],[dnl
|
||||||
|
m4_foreach([FEATURE],m4_split(m4_normalize($2)),[dnl
|
||||||
|
(require 'FEATURE)
|
||||||
|
])],[(fboundp '$1)])])dnl
|
||||||
|
|
||||||
|
|
||||||
|
AC_DEFUN([AX_ELISP_CHECK_BOUNDP],[dnl
|
||||||
|
dnl 1 -- Emacs Lisp symbol
|
||||||
|
dnl 2 -- (optional) space-separated list of features to 'require'
|
||||||
|
AX_ELISP_CHECK([$1],[if '$1' is defined],[dnl
|
||||||
|
m4_foreach([FEATURE],m4_split(m4_normalize($2)),[dnl
|
||||||
|
(require 'FEATURE)
|
||||||
|
])],[(boundp '$1)])])dnl
|
||||||
|
|
||||||
|
|
||||||
|
dnl TODO:
|
||||||
|
dnl - Add error checking (see FIXME in code).
|
||||||
|
dnl - Validate m4 mumblings -- is this the right crazy?!
|
||||||
|
dnl - Add customization of $EMACS invocation.
|
||||||
|
dnl
|
||||||
|
dnl Local variables:
|
||||||
|
dnl mode: autoconf
|
||||||
|
dnl End:
|
||||||
|
dnl ax_elisp.m4 ends here
|
||||||
134
etc/m4/ax_lapack.m4
Normal file
134
etc/m4/ax_lapack.m4
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_lapack.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro looks for a library that implements the LAPACK linear-algebra
|
||||||
|
# interface (see http://www.netlib.org/lapack/). On success, it sets the
|
||||||
|
# LAPACK_LIBS output variable to hold the requisite library linkages.
|
||||||
|
#
|
||||||
|
# To link with LAPACK, you should link with:
|
||||||
|
#
|
||||||
|
# $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS
|
||||||
|
#
|
||||||
|
# in that order. BLAS_LIBS is the output variable of the AX_BLAS macro,
|
||||||
|
# called automatically. FLIBS is the output variable of the
|
||||||
|
# AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is
|
||||||
|
# sometimes necessary in order to link with F77 libraries. Users will also
|
||||||
|
# need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same
|
||||||
|
# reason.
|
||||||
|
#
|
||||||
|
# The user may also use --with-lapack=<lib> in order to use some specific
|
||||||
|
# LAPACK library <lib>. In order to link successfully, however, be aware
|
||||||
|
# that you will probably need to use the same Fortran compiler (which can
|
||||||
|
# be set via the F77 env. var.) as was used to compile the LAPACK and BLAS
|
||||||
|
# libraries.
|
||||||
|
#
|
||||||
|
# ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library
|
||||||
|
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||||
|
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||||
|
# will define HAVE_LAPACK.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2009 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
|
# Copyright (c) 2019 Geoffrey M. Oxberry <goxberry@gmail.com>
|
||||||
|
#
|
||||||
|
# This program 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 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 10
|
||||||
|
|
||||||
|
AU_ALIAS([ACX_LAPACK], [AX_LAPACK])
|
||||||
|
AC_DEFUN([AX_LAPACK], [
|
||||||
|
AC_REQUIRE([AX_BLAS])
|
||||||
|
ax_lapack_ok=no
|
||||||
|
|
||||||
|
AC_ARG_WITH(lapack,
|
||||||
|
[AS_HELP_STRING([--with-lapack=<lib>], [use LAPACK library <lib>])])
|
||||||
|
case $with_lapack in
|
||||||
|
yes | "") ;;
|
||||||
|
no) ax_lapack_ok=disable ;;
|
||||||
|
-* | */* | *.a | *.so | *.so.* | *.dylib | *.dylib.* | *.o)
|
||||||
|
LAPACK_LIBS="$with_lapack"
|
||||||
|
;;
|
||||||
|
*) LAPACK_LIBS="-l$with_lapack" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Get fortran linker name of LAPACK function to check for.
|
||||||
|
AC_F77_FUNC(cheev)
|
||||||
|
|
||||||
|
# We cannot use LAPACK if BLAS is not found
|
||||||
|
if test "x$ax_blas_ok" != xyes; then
|
||||||
|
ax_lapack_ok=noblas
|
||||||
|
LAPACK_LIBS=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# First, check LAPACK_LIBS environment variable
|
||||||
|
if test "x$LAPACK_LIBS" != x; then
|
||||||
|
save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS"
|
||||||
|
AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS])
|
||||||
|
AC_LINK_IFELSE([AC_LANG_CALL([], [$cheev])], [ax_lapack_ok=yes], [LAPACK_LIBS=""])
|
||||||
|
AC_MSG_RESULT($ax_lapack_ok)
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
if test $ax_lapack_ok = no; then
|
||||||
|
LAPACK_LIBS=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# LAPACK linked to by default? (is sometimes included in BLAS lib)
|
||||||
|
if test $ax_lapack_ok = no; then
|
||||||
|
save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS"
|
||||||
|
AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes])
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generic LAPACK library?
|
||||||
|
for lapack in lapack lapack_rs6k; do
|
||||||
|
if test $ax_lapack_ok = no; then
|
||||||
|
save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS"
|
||||||
|
AC_CHECK_LIB($lapack, $cheev,
|
||||||
|
[ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS])
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
AC_SUBST(LAPACK_LIBS)
|
||||||
|
|
||||||
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
|
if test x"$ax_lapack_ok" = xyes; then
|
||||||
|
ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1])
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ax_lapack_ok=no
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
])dnl AX_LAPACK
|
||||||
@ -1,5 +1,5 @@
|
|||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# http://www.gnu.org/software/autoconf-archive/ax_mpi.html
|
# https://www.gnu.org/software/autoconf-archive/ax_mpi.html
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
#
|
#
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
@ -19,26 +19,13 @@
|
|||||||
# are needed for linking MPI (e.g. -lmpi or -lfmpi, if a special
|
# are needed for linking MPI (e.g. -lmpi or -lfmpi, if a special
|
||||||
# MPICC/MPICXX/MPIF77/MPIFC was not found).
|
# MPICC/MPICXX/MPIF77/MPIFC was not found).
|
||||||
#
|
#
|
||||||
# If you want to compile everything with MPI, you should use something
|
# Note that this macro should be used only if you just have a few source
|
||||||
# like this for C:
|
# files that need to be compiled using MPI. In particular, you should
|
||||||
#
|
# neither overwrite CC/CXX/F77/FC with the values of
|
||||||
# if test -z "$CC" && test -n "$MPICC"; then
|
# MPICC/MPICXX/MPIF77/MPIFC, nor assume that you can use the same flags
|
||||||
# CC="$MPICC"
|
# etc. as the standard compilers. If you want to compile a whole program
|
||||||
# fi
|
# using the MPI compiler commands, use one of the macros
|
||||||
# AC_PROG_CC
|
# AX_PROG_{CC,CXX,FC}_MPI.
|
||||||
# AX_MPI
|
|
||||||
# CC="$MPICC"
|
|
||||||
# LIBS="$MPILIBS $LIBS"
|
|
||||||
#
|
|
||||||
# and similar for C++ (change all instances of CC to CXX), Fortran 77
|
|
||||||
# (with F77 instead of CC) or Fortran (with FC instead of CC).
|
|
||||||
#
|
|
||||||
# NOTE: The above assumes that you will use $CC (or whatever) for linking
|
|
||||||
# as well as for compiling. (This is the default for automake and most
|
|
||||||
# Makefiles.)
|
|
||||||
#
|
|
||||||
# The user can force a particular library/compiler by setting the
|
|
||||||
# MPICC/MPICXX/MPIF77/MPIFC and/or MPILIBS environment variables.
|
|
||||||
#
|
#
|
||||||
# ACTION-IF-FOUND is a list of shell commands to run if an MPI library is
|
# ACTION-IF-FOUND is a list of shell commands to run if an MPI library is
|
||||||
# found, and ACTION-IF-NOT-FOUND is a list of commands to run if it is not
|
# found, and ACTION-IF-NOT-FOUND is a list of commands to run if it is not
|
||||||
@ -61,7 +48,7 @@
|
|||||||
# Public License for more details.
|
# Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along
|
# You should have received a copy of the GNU General Public License along
|
||||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
# gives unlimited permission to copy, distribute and modify the configure
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
@ -76,11 +63,11 @@
|
|||||||
# modified version of the Autoconf Macro, you may extend this special
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
# exception to the GPL to apply to your modified version as well.
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
#serial 7
|
#serial 9
|
||||||
|
|
||||||
AU_ALIAS([ACX_MPI], [AX_MPI])
|
AU_ALIAS([ACX_MPI], [AX_MPI])
|
||||||
AC_DEFUN([AX_MPI], [
|
AC_DEFUN([AX_MPI], [
|
||||||
AC_PREREQ([2.50]) dnl for AC_LANG_CASE
|
AC_PREREQ(2.50) dnl for AC_LANG_CASE
|
||||||
|
|
||||||
AC_LANG_CASE([C], [
|
AC_LANG_CASE([C], [
|
||||||
AC_REQUIRE([AC_PROG_CC])
|
AC_REQUIRE([AC_PROG_CC])
|
||||||
@ -132,9 +119,6 @@ AC_LANG_CASE([Fortran 77], [
|
|||||||
if test x = x"$MPILIBS"; then
|
if test x = x"$MPILIBS"; then
|
||||||
AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"])
|
AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"])
|
||||||
fi
|
fi
|
||||||
if test x = x"$MPILIBS"; then
|
|
||||||
AC_CHECK_LIB(mpif77, MPI_Init, [MPILIBS="-lmpif77"])
|
|
||||||
fi
|
|
||||||
],
|
],
|
||||||
[Fortran], [
|
[Fortran], [
|
||||||
if test x = x"$MPILIBS"; then
|
if test x = x"$MPILIBS"; then
|
||||||
@ -151,16 +135,16 @@ if test x = x"$MPILIBS"; then
|
|||||||
AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
|
AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl We have to use AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[],[]) and not AC_CHECK_HEADER because the
|
dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the
|
||||||
dnl latter uses $CPP, not $CC (which may be mpicc).
|
dnl latter uses $CPP, not $CC (which may be mpicc).
|
||||||
AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then
|
AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then
|
||||||
AC_MSG_CHECKING([for mpi.h])
|
AC_MSG_CHECKING([for mpi.h])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]], [[]])],[AC_MSG_RESULT(yes)],[MPILIBS=""
|
AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
||||||
AC_MSG_RESULT(no)])
|
AC_MSG_RESULT(no)])
|
||||||
fi],
|
fi],
|
||||||
[C++], [if test x != x"$MPILIBS"; then
|
[C++], [if test x != x"$MPILIBS"; then
|
||||||
AC_MSG_CHECKING([for mpi.h])
|
AC_MSG_CHECKING([for mpi.h])
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <mpi.h>]], [[]])],[AC_MSG_RESULT(yes)],[MPILIBS=""
|
AC_TRY_COMPILE([#include <mpi.h>],[],[AC_MSG_RESULT(yes)], [MPILIBS=""
|
||||||
AC_MSG_RESULT(no)])
|
AC_MSG_RESULT(no)])
|
||||||
fi],
|
fi],
|
||||||
[Fortran 77], [if test x != x"$MPILIBS"; then
|
[Fortran 77], [if test x != x"$MPILIBS"; then
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# http://www.gnu.org/software/autoconf-archive/ax_openmp.html
|
# https://www.gnu.org/software/autoconf-archive/ax_openmp.html
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
#
|
#
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
@ -39,6 +39,7 @@
|
|||||||
#
|
#
|
||||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
# Copyright (c) 2015 John W. Peterson <jwpeterson@gmail.com>
|
# Copyright (c) 2015 John W. Peterson <jwpeterson@gmail.com>
|
||||||
|
# Copyright (c) 2016 Nick R. Papior <nickpapior@gmail.com>
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify it
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by the
|
# under the terms of the GNU General Public License as published by the
|
||||||
@ -51,7 +52,7 @@
|
|||||||
# Public License for more details.
|
# Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License along
|
# You should have received a copy of the GNU General Public License along
|
||||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
# gives unlimited permission to copy, distribute and modify the configure
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
@ -66,16 +67,19 @@
|
|||||||
# modified version of the Autoconf Macro, you may extend this special
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
# exception to the GPL to apply to your modified version as well.
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
#serial 11
|
#serial 13
|
||||||
|
|
||||||
AC_DEFUN([AX_OPENMP], [
|
AC_DEFUN([AX_OPENMP], [
|
||||||
AC_PREREQ([2.69]) dnl for _AC_LANG_PREFIX
|
AC_PREREQ([2.69]) dnl for _AC_LANG_PREFIX
|
||||||
|
|
||||||
AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
|
AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
|
||||||
ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
|
ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown
|
||||||
# Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI),
|
# Flags to try: -fopenmp (gcc), -mp (SGI & PGI),
|
||||||
# -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none
|
# -qopenmp (icc>=15), -openmp (icc),
|
||||||
ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none"
|
# -xopenmp (Sun), -omp (Tru64),
|
||||||
|
# -qsmp=omp (AIX),
|
||||||
|
# none
|
||||||
|
ax_openmp_flags="-fopenmp -openmp -qopenmp -mp -xopenmp -omp -qsmp=omp none"
|
||||||
if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
|
if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then
|
||||||
ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
|
ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags"
|
||||||
fi
|
fi
|
||||||
|
|||||||
178
etc/m4/ax_prog_cxx_mpi.m4
Normal file
178
etc/m4/ax_prog_cxx_mpi.m4
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_prog_cxx_mpi.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_PROG_CXX_MPI([MPI-WANTED-TEST[, ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro tries to find out how to compile C++ programs that use MPI
|
||||||
|
# (Message Passing Interface), a standard API for parallel process
|
||||||
|
# communication (see http://www-unix.mcs.anl.gov/mpi/). The macro has to
|
||||||
|
# be used instead of the standard macro AC_PROG_CXX and will replace the
|
||||||
|
# standard variable CXX with the found compiler.
|
||||||
|
#
|
||||||
|
# MPI-WANTED-TEST is used to test whether MPI is actually wanted by the
|
||||||
|
# user. If MPI-WANTED_TEST is omitted or if it succeeds, the macro will
|
||||||
|
# try to find out how to use MPI, if it fails, the macro will call
|
||||||
|
# AC_PROG_CC to find a standard C compiler instead.
|
||||||
|
#
|
||||||
|
# When MPI is found, ACTION-IF-FOUND will be executed, if MPI is not found
|
||||||
|
# (or MPI-WANTED-TEST fails) ACTION-IF-NOT-FOUND is executed. If
|
||||||
|
# ACTION-IF-FOUND is not set, the macro will define HAVE_MPI.
|
||||||
|
#
|
||||||
|
# The following example demonstrates usage of the macro:
|
||||||
|
#
|
||||||
|
# # If --with-mpi=auto is used, try to find MPI, but use standard C compiler if it is not found.
|
||||||
|
# # If --with-mpi=yes is used, try to find MPI and fail if it isn't found.
|
||||||
|
# # If --with-mpi=no is used, use a standard C compiler instead.
|
||||||
|
# AC_ARG_WITH(mpi, [AS_HELP_STRING([--with-mpi],
|
||||||
|
# [compile with MPI (parallelization) support. If none is found,
|
||||||
|
# MPI is not used. Default: auto])
|
||||||
|
# ],,[with_mpi=auto])
|
||||||
|
#
|
||||||
|
# AX_PROG_CXX_MPI([test x"$with_mpi" != xno],[use_mpi=yes],[
|
||||||
|
# use_mpi=no
|
||||||
|
# if test x"$with_mpi" = xyes; then
|
||||||
|
# AC_MSG_FAILURE([MPI compiler requested, but couldn't use MPI.])
|
||||||
|
# else
|
||||||
|
# AC_MSG_WARN([No MPI compiler found, won't use MPI.])
|
||||||
|
# fi
|
||||||
|
# ])
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2010,2011 Olaf Lenz <olenz@icp.uni-stuttgart.de>
|
||||||
|
#
|
||||||
|
# This program 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 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 3
|
||||||
|
|
||||||
|
AC_DEFUN([AX_PROG_CXX_MPI], [
|
||||||
|
AC_PREREQ(2.50)
|
||||||
|
|
||||||
|
# Check for compiler
|
||||||
|
# Needs to be split off into an extra macro to ensure right expansion
|
||||||
|
# order.
|
||||||
|
AC_REQUIRE([_AX_PROG_CXX_MPI],[_AX_PROG_CXX_MPI([$1])])
|
||||||
|
|
||||||
|
AS_IF([test x"$_ax_prog_cxx_mpi_mpi_wanted" = xno],
|
||||||
|
[ _ax_prog_cxx_mpi_mpi_found=no ],
|
||||||
|
[
|
||||||
|
AC_LANG_PUSH([C++])
|
||||||
|
|
||||||
|
# test whether MPI_Init() is available
|
||||||
|
# We do not use AC_SEARCH_LIBS here, as it caches its outcome and
|
||||||
|
# thus disallows corresponding calls in the other AX_PROG_*_MPI
|
||||||
|
# macros.
|
||||||
|
for lib in NONE mpi mpich; do
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
if test x"$lib" = xNONE; then
|
||||||
|
AC_MSG_CHECKING([for function MPI_Init])
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING([for function MPI_Init in -l$lib])
|
||||||
|
LIBS="-l$lib $LIBS"
|
||||||
|
fi
|
||||||
|
AC_LINK_IFELSE([
|
||||||
|
AC_LANG_PROGRAM([
|
||||||
|
extern "C" { void MPI_Init(); }
|
||||||
|
],[MPI_Init();])],
|
||||||
|
[ _ax_prog_cxx_mpi_mpi_found=yes ],
|
||||||
|
[ _ax_prog_cxx_mpi_mpi_found=no ])
|
||||||
|
AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_found)
|
||||||
|
if test "x$_ax_prog_cxx_mpi_mpi_found" = "xyes"; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check for header
|
||||||
|
AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [
|
||||||
|
AC_MSG_CHECKING([for mpi.h])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <mpi.h>])],
|
||||||
|
[ AC_MSG_RESULT(yes)],
|
||||||
|
[ AC_MSG_RESULT(no)
|
||||||
|
_ax_prog_cxx_mpi_mpi_found=no
|
||||||
|
])
|
||||||
|
])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
])
|
||||||
|
|
||||||
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
|
AS_IF([test x"$_ax_prog_cxx_mpi_mpi_found" = xyes], [
|
||||||
|
ifelse([$2],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$2])
|
||||||
|
:
|
||||||
|
],[
|
||||||
|
$3
|
||||||
|
:
|
||||||
|
])
|
||||||
|
|
||||||
|
])dnl AX_PROG_CXX_MPI
|
||||||
|
|
||||||
|
dnl _AX_PROG_CXX_MPI is an internal macro required by AX_PROG_CXX_MPI.
|
||||||
|
dnl To ensure the right expansion order, the main function AX_PROG_CXX_MPI
|
||||||
|
dnl has to be split into two parts.
|
||||||
|
dnl
|
||||||
|
dnl Known MPI C++ compilers:
|
||||||
|
dnl mpic++
|
||||||
|
dnl mpicxx
|
||||||
|
dnl mpiCC
|
||||||
|
dnl sxmpic++ NEC SX
|
||||||
|
dnl hcp
|
||||||
|
dnl mpxlC_r
|
||||||
|
dnl mpxlC
|
||||||
|
dnl mpixlcxx_r
|
||||||
|
dnl mpixlcxx
|
||||||
|
dnl mpg++
|
||||||
|
dnl mpc++
|
||||||
|
dnl mpCC
|
||||||
|
dnl cmpic++
|
||||||
|
dnl mpiFCC Fujitsu
|
||||||
|
dnl CC
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([_AX_PROG_CXX_MPI], [
|
||||||
|
AC_ARG_VAR(MPICXX,[MPI C++ compiler command])
|
||||||
|
ifelse([$1],,[_ax_prog_cxx_mpi_mpi_wanted=yes],[
|
||||||
|
AC_MSG_CHECKING([whether to compile using MPI])
|
||||||
|
if $1; then
|
||||||
|
_ax_prog_cxx_mpi_mpi_wanted=yes
|
||||||
|
else
|
||||||
|
_ax_prog_cxx_mpi_mpi_wanted=no
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($_ax_prog_cxx_mpi_mpi_wanted)
|
||||||
|
])
|
||||||
|
if test x"$_ax_prog_cxx_mpi_mpi_wanted" = xyes; then
|
||||||
|
if test -z "$CXX" && test -n "$MPICXX"; then
|
||||||
|
CXX="$MPICXX"
|
||||||
|
else
|
||||||
|
AC_CHECK_TOOLS([CXX], [mpic++ mpicxx mpiCC sxmpic++ hcp mpxlC_r mpxlC mpixlcxx_r mpixlcxx mpg++ mpc++ mpCC cmpic++ mpiFCC CCicpc pgCC pathCC sxc++ xlC_r xlC bgxlC_r bgxlC openCC sunCC crayCC g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_PROG_CXX
|
||||||
|
])dnl _AX_PROG_CXX_MPI
|
||||||
68
etc/m4/ax_prog_emacs.m4
Normal file
68
etc/m4/ax_prog_emacs.m4
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# ===========================================================================
|
||||||
|
# https://www.gnu.org/software/autoconf-archive/ax_prog_emacs.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_PROG_EMACS
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro allows the end user to specify a particular Emacs executable
|
||||||
|
# via a configure script command-line arg. For example:
|
||||||
|
#
|
||||||
|
# ./configure EMACS=$HOME/build/GNU/emacs/src/emacs
|
||||||
|
#
|
||||||
|
# It also arranges to mention env var EMACS in the './configure --help'
|
||||||
|
# output. See info node "(autoconf) Generic Programs" for details.
|
||||||
|
#
|
||||||
|
# More precisely...
|
||||||
|
#
|
||||||
|
# If env var EMACS is set, try to use its value directly, but avoid
|
||||||
|
# getting fooled by value 't' (set by older Emacsen for subprocesses). If
|
||||||
|
# no joy from the environment, search for "emacs" via AC_CHECK_PROG. If
|
||||||
|
# still no joy, display "Emacs not found; required!" and make configure
|
||||||
|
# exit failurefully. Otherwise, set shell var EMACS and AC_SUBST it, too.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016-2017 Thien-Thi Nguyen
|
||||||
|
#
|
||||||
|
# This program 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 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 2
|
||||||
|
|
||||||
|
AC_DEFUN([AX_PROG_EMACS],[dnl
|
||||||
|
AC_ARG_VAR([EMACS],[Use this Emacs to byte-compile the Emacs Lisp files.])
|
||||||
|
dnl Allow env override but do not get fooled by 'EMACS=t'.
|
||||||
|
test t = "$EMACS" && unset EMACS
|
||||||
|
dnl The next line does nothing if var 'EMACS' is already set.
|
||||||
|
AC_CHECK_PROG([EMACS], [emacs], [emacs])
|
||||||
|
AS_IF([test "x$EMACS" = x],[AC_MSG_ERROR([Emacs not found; required!])])
|
||||||
|
])dnl
|
||||||
|
|
||||||
|
dnl ax_prog_emacs.m4 ends here
|
||||||
Loading…
Reference in New Issue
Block a user