Add more AX_ macros

This commit is contained in:
Alejandro Gallo 2022-03-11 12:16:29 +01:00
parent 07a53aedc5
commit a7868b49c1
13 changed files with 967 additions and 213 deletions

1
etc/m4/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
autoconf-archive/

19
etc/m4/Makefile Normal file
View 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

View File

@ -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

View File

@ -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
]])

View 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
])

View 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
View 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
View 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
View 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

View File

@ -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

View File

@ -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
View 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
View 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