📄 configure.ac
字号:
# Process this file with autoconf to produce a configure script.AC_INIT(meep, 0.10, meep@ab-initio.mit.edu)AC_CONFIG_SRCDIR(src/step.cpp)# Shared-library version number; indicates api compatibility, and is# not the same as the "public" version number. (Don't worry about this# except for public releases.)SHARED_VERSION_INFO="1:0:0"AM_INIT_AUTOMAKE(1.6)AM_CONFIG_HEADER(config.h)AM_MAINTAINER_MODEAC_SUBST(SHARED_VERSION_INFO)AM_ENABLE_SHARED(no) dnl shared libs cause too many headaches to be defaultMEEP_SUFFIX=""##############################################################################AC_ARG_WITH(doc, [AC_HELP_STRING([--with-doc], [include old documentation in dist])], with_doc=$withval,with_doc=no)AM_CONDITIONAL(WITH_DOC, test "x$with_doc" = xyes)############################################################################### Check for mpiCC immediately after getting C++ compiler...AC_PROG_CXX# Check for MPI libraryAC_ARG_WITH(mpi, [AC_HELP_STRING([--with-mpi],[enable MPI parallelization])], with_mpi=$withval, with_mpi=no)if test "x$with_mpi" = "xyes"; then AC_LANG_PUSH([C++]) ACX_MPI([],[AC_MSG_ERROR([could not find mpi library for --with-mpi])]) CXX=$MPICXX AC_LANG_POP([C++]) MEEP_SUFFIX="${MEEP_SUFFIX}_mpi"fi############################################################################### More checksAC_PROG_LIBTOOLAC_CHECK_PROG(LATEX2HTML, latex2html, latex2html)if test -z "$LATEX2HTML"; then AC_MSG_WARN([Cannot find latex2html in your path!]) # FIXME: use standard 'missing' script from automake LATEX2HTML='echo not running latex2html...'fiAC_SUBST(LATEX2HTML)AC_CHECK_LIB(m, sin)AC_CHECK_LIB(fftw3, fftw_plan_dft_1d, [], [AC_CHECK_LIB(dfftw, fftw_create_plan, [], [AC_CHECK_LIB(fftw, fftw_create_plan, [], [AC_MSG_WARN([Missing FFTW library...slow DFT will be used for monitor-point Fourier transform])])])])############################################################################ Harminv library# First, try pkg-config, if it is installed. Note that, annoyingly,# pkg-config doesn't look in /usr/local by default, so we have to# add this to the path for that common case. It also doesn't give# us a way to print its default path, grr, so we have to assume that this# is /usr/lib/pkgconfig.PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/usr/local/lib/pkgconfigexport PKG_CONFIG_PATHPKG_CHECK_MODULES(HARMINV, harminv >= 1.1, [CFLAGS="$CFLAGS $HARMINV_CFLAGS"; LIBS="$HARMINV_LIBS $LIBS"; have_harminv=yes], [have_harminv=no])# As a fallback, check manually for BLAS/LAPACK and harminv libraries:if test $have_harminv = no; then AC_F77_WRAPPERS ACX_BLAS ACX_LAPACK([], [AC_MSG_WARN([BLAS/LAPACK needed for harminv])]) save_CC=$CC CC=$CXX # harminv test must use $CXX since harminv may be a C++ lib # just use lapack/blas in default libs since we always need them AC_CHECK_LIB(harminv, harminv_get_freq_error, [have_harminv=yes; LIBS="-lharminv $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS"], [AC_MSG_WARN([harminv support is disabled])], [$LAPACK_LIBS $BLAS_LIBS $FLIBS]) CC=$save_CCfiif test $have_harminv = yes; then AC_DEFINE([HAVE_HARMINV],[1],[Define if you have libharminv])fi############################################################################### GNU Scientific LibraryAC_CHECK_FUNC(cblas_cgemm, [], [AC_CHECK_LIB(gslcblas, cblas_cgemm)])AC_CHECK_LIB(gsl, gsl_sf_bessel_Jn, [], [AC_MSG_WARN([Missing GNU GSL library...Bessel-function field initialization will not be supported.])])############################################################################### Check for HDF5 libraryAC_ARG_WITH(hdf5, [AC_HELP_STRING([--without-hdf5],[do not allow HDF5 output])], ok=$withval, ok=yes)if test "$ok" = "yes"; then AC_CHECK_LIB(z,deflate, [],[AC_MSG_WARN([zlib is required for HDF5!])]) save_CC=$CC if test "x$with_mpi" = "xyes"; then CC=$MPICXX fi save_LIBS_0="$LIBS" # save, to check later if we found any library AC_CHECK_LIB(hdf5, H5Pcreate, [ AC_CHECK_HEADERS(hdf5.h, [LIBS="-lhdf5 $LIBS" AC_DEFINE(HAVE_HDF5,1,[Define if we have & link HDF5])])]) if test x"$save_LIBS_0" = x"$LIBS"; then AC_MSG_WARN([Couldn't find the HDF5 library!! Switching to --without-hdf5.]) fi CC=$save_CC if test "x$with_mpi" = "xyes"; then AC_CHECK_FUNCS(H5Pset_mpi H5Pset_fapl_mpio) fifi############################################################################### Figure out the number of processors so we can quickly build the docs and# run the tests... (FIXME: use more standard autoconf macros)RUNCODE=""if test "x$with_mpi" = "xyes"; then cat > test_num_processors.c <<MYEOF#include <unistd.h>#include <stdio.h>#include <stdlib.h>int main() { long nprocs; nprocs = sysconf(_SC_NPROCESSORS_ONLN); if (nprocs < 1) nprocs = 1; printf ("%ld\n",nprocs); exit (EXIT_SUCCESS);}MYEOF $CC -o test_num_processors test_num_processors.c NUMPROCS=`./test_num_processors` rm -f test_num_processors test_num_processors.c echo Looks like we have got "$NUMPROCS" processors RUNCODE="mpirun -np $NUMPROCS"fiAC_SUBST(RUNCODE)############################################################################### Compiler flagsAC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug,compile for debugging])], enable_debug=$enableval, enable_debug=no)if test "$enable_debug" = "yes"; then CFLAGS="-g" CXXFLAGS="-g" FFLAGS="-g" AC_DEFINE(DEBUG,1,[define to enable debugging code])else # Pick "good" compiler flags(?) AX_CXX_MAXOPTfi# Add lots of compiler warnings in maintainer mode if we are using gcc:# (The variable $GXX is set to "yes" by AC_PROG_CXX if we are using g++.)if test "$GXX" = "yes" && test "$USE_MAINTAINER_MODE" = yes; then CXXFLAGS="$CXXFLAGS -Wall -W"fi##############################################################################AC_CHECK_PROG(HC, ghc, ghc)if test x"$HC" = x && test "$USE_MAINTAINER_MODE" = yes; then AC_MSG_ERROR([the ghc Haskell compiler is required in maintainer mode])fi############################################################################### Libraries and flags (other than -lmeep) required to link Meep:MEEPLIBS="$LDFLAGS $LIBS"AC_SUBST(MEEPLIBS)############################################################################### subsequent libraries are only for libctl front endmeep_save_LIBS=$LIBSAC_ARG_WITH(libctl, [AC_HELP_STRING([--with-libctl=<dir>],[specify libctl directory])], with_libctl=$withval, with_libctl=yes)if test "x$with_libctl" = "xno"; then :elif test "x$with_libctl" != "xyes"; then LIBCTL_DIR="$with_libctl"fiAM_CONDITIONAL(WITH_LIBCTL, test "x$with_libctl" != xno)############################################################################### Check for Guile library and its behavior (for libctl front end):if test "x$with_libctl" != xno; thenAC_CHECK_PROG(HAVE_GUILE_CONFIG, guile-config, yes, no)if test "$HAVE_GUILE_CONFIG" = "yes"; then CPPFLAGS="$CPPFLAGS `guile-config compile`" LIBS="`guile-config link` $LIBS" AC_MSG_CHECKING([if linking to guile works]) AC_TRY_LINK_FUNC(gh_enter, AC_MSG_RESULT(yes), [ AC_MSG_RESULT(no) AC_MSG_ERROR(guile-config is broken) ])else AC_CHECK_LIB(readline, readline) AC_CHECK_LIB(dl, dlopen) AC_CHECK_LIB(guile, gh_eval_str)fi# Check how smob types work in this Guile version:AC_CHECK_FUNCS(scm_make_smob_type)AC_MSG_CHECKING([for SCM_SMOB_PREDICATE])AC_TRY_LINK([#include <guile/gh.h>#include <libguile/smob.h>], [int x; SCM_SMOB_PREDICATE(1,x);], ok=yes, ok=no)AC_MSG_RESULT($ok)if test $ok = yes; then AC_DEFINE(HAVE_SCM_SMOB_PREDICATE, 1, [define if we have SCM_SMOB_PREDICATE])fiAC_MSG_CHECKING([for SCM_SMOB_DATA])AC_TRY_LINK([#include <guile/gh.h>#include <libguile/smob.h>], [int x; SCM_SMOB_DATA(x);], ok=yes, ok=no)AC_MSG_RESULT($ok)if test $ok = yes; then AC_DEFINE(HAVE_SCM_SMOB_DATA, 1, [define if we have SCM_SMOB_DATA])fiAC_MSG_CHECKING([for SCM_NEWSMOB])AC_TRY_LINK([#include <guile/gh.h>#include <libguile/smob.h>], [int x; SCM_NEWSMOB(x,1,0);], ok=yes, ok=no)AC_MSG_RESULT($ok)if test $ok = yes; then AC_DEFINE(HAVE_SCM_NEWSMOB, 1, [define if we have SCM_NEWSMOB])fi# Check how to activate Guile readline support:ACTIVATE_READLINE=""AC_MSG_CHECKING(how to activate readline in Guile)ractivate="(use-modules (readline-activator)) (activate-readline)"if guile -c "$ractivate" > /dev/null 2>&1; then AC_MSG_RESULT(readline-activator) ACTIVATE_READLINE="$ractivate"else ractivate="(use-modules (ice-9 readline)) (activate-readline)" if guile -c "$ractivate" >& /dev/null; then AC_MSG_RESULT(ice-9 readline) ACTIVATE_READLINE="$ractivate" else AC_MSG_RESULT(cannot) ACTIVATE_READLINE="" fifiAC_SUBST(ACTIVATE_READLINE)fi # if with_libctl############################################################################### Check for libctl library and filesif test "x$with_libctl" != xno; thenAC_MSG_CHECKING([for libctl dir])if test x != x"$LIBCTL_DIR" -a ! -r "$LIBCTL_DIR/base/ctl.scm"; then LIBCTL_DIR=""fiif test x = x"$LIBCTL_DIR" -a -r /usr/local/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/local/share/libctl"fiif test x = x"$LIBCTL_DIR" -a -r /usr/share/libctl/base/ctl.scm; then LIBCTL_DIR="/usr/share/libctl"fiif test x = x"$LIBCTL_DIR"; then AC_MSG_ERROR([could not find libctl files; use --with-libctl=<dir>])fiAC_MSG_RESULT($LIBCTL_DIR)AC_SUBST(LIBCTL_DIR)AC_CHECK_PROGS(GEN_CTL_IO, gen-ctl-io, echo)if test x"$GEN_CTL_IO" = xecho; then AC_MSG_ERROR([could not find gen-ctl-io program; check your PATH])fi# check for -lctl:AC_CHECK_LIB(ctl, ctl_get_vector3, [], [AC_MSG_ERROR([Couldn't find the required libctl library.])])AC_CHECK_HEADER(ctl.h, [], [AC_MSG_ERROR([Couldn't find the libctl header.])])# Check libctl version >= LIBCTL_MAJOR.LIBCTL_MINOR.LIBCTL_BUGFIXLIBCTL_MAJOR=3; LIBCTL_MINOR=0; LIBCTL_BUGFIX=0AC_MSG_CHECKING([whether libctl version is at least ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX}])AC_EGREP_CPP(yes, [[#include <ctl.h>#if LIBCTL_MAJOR_VERSION > $LIBCTL_MAJOR || (LIBCTL_MAJOR_VERSION == $LIBCTL_MAJOR && (LIBCTL_MINOR_VERSION > $LIBCTL_MINOR || (LIBCTL_MINOR_VERSION == $LIBCTL_MINOR && LIBCTL_BUGFIX_VERSION >= $LIBCTL_BUGFIX))) yes#endif]], [AC_MSG_RESULT(ok)], [AC_MSG_ERROR([libctl version ${LIBCTL_MAJOR}.${LIBCTL_MINOR}.${LIBCTL_BUGFIX} or later is required])])# On IRIX, basename/dirname functions in libctl/main.c require -lgenAC_CHECK_LIB(gen, basename)fi # if with_libctl##############################################################################LIBCTL_LIBS=$LIBSAC_SUBST(LIBCTL_LIBS)LIBS=$meep_save_LIBS############################################################################### The following function is used only for debugging. Note that# we must test for it *after* setting the compiler flags (which# affect whether it is declared, as it is a GNU extension).# We need to #include <stdio.h> because that somehow affects whether# the function is declared with older gcc versions. We need# to use AC_TRY_COMPILE because the test in AC_HAVE_DECL seems# to be optimized out.AC_CHECK_FUNCS(feenableexcept) dnl GNU libc fp exception control functionAC_LANG_PUSH([C++])AC_MSG_CHECKING([whether feenableexcept declaration is usable])feenableexcept_decl_ok=yesAC_TRY_COMPILE([#include <stdio.h>#define _GNU_SOURCE 1#include <fenv.h>], [feenableexcept(0);],[AC_DEFINE([HAVE_DECL_FEENABLEEXCEPT],[1],[Define if fenv.h declares this.])],[feenableexcept_decl_ok=no])AC_MSG_RESULT($feenableexcept_decl_ok)AC_LANG_POP([C++])############################################################################### See if we need to catch SIGFPE to avoid crashing on underflow exceptions# etcetera, since some stupid operating systems (e.g. Alpha/Tru64) crash on # SIGFPE by default.AC_MSG_CHECKING([whether to catch and ignore SIGFPE signals])ignore_sigfpe=yesAC_RUN_IFELSE([AC_LANG_PROGRAM([], [volatile double x=1,y=0; return x/y;])], [ignore_sigfpe=no])AC_MSG_RESULT($ignore_sigfpe)if test $ignore_sigfpe = yes; then AC_DEFINE(IGNORE_SIGFPE, [1], [Define to catch and ignore SIGFPE signals])fi############################################################################### Miscellaneous function and header checksAC_HEADER_TIMEAC_CHECK_HEADERS([sys/time.h])AC_CHECK_FUNCS([BSDgettimeofday gettimeofday cblas_ddot cblas_daxpy])##############################################################################AC_SUBST(MEEP_SUFFIX)program_transform_name="s,_,-,g;$program_transform_name"##############################################################################AC_CONFIG_FILES([ Makefile meep.pc src/Makefile hsrc/Makefile doc/Makefile tests/Makefile examples/Makefile libctl/Makefile libctl/meep.scm])AC_OUTPUT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -