# @HEADER # ######################################################################## # # Zoltan Toolkit for Load-balancing, Partitioning, Ordering and Coloring # Copyright 2012 Sandia Corporation # # Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, # the U.S. Government retains certain rights in this software. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the name of the Corporation nor the names of the # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Questions? Contact Karen Devine kddevin@sandia.gov # Erik Boman egboman@sandia.gov # ######################################################################## # # @HEADER # ------------------------------------------------------------------------ # Process this file with autoconf to produce a configure script. # ------------------------------------------------------------------------ # ------------------------------------------------------------------------ # Initialization # ------------------------------------------------------------------------ # This must be the first line in configure.ac. # Optional 3rd argument is email address for bugs. AC_INIT(Zoltan, 3.6, lriesen@sandia.gov) echo "----------------------------------------" echo "Running Zoltan Configure Script" echo "----------------------------------------" # This is to protect against accidentally specifying the wrong # directory with --srcdir. Any file in that directory will do, # preferably one that is unlikely to be removed or renamed. AC_CONFIG_SRCDIR([src/include/zoltan.h]) # Specify directory for auxillary build tools (e.g., install-sh, # config.sub, config.guess) and M4 files. AC_CONFIG_AUX_DIR(config) # # We don't want people to configure in the source directory. Some # things may break. # if test -e configure.ac ; then echo "You are trying to run configure in the source directory. This is not allowed. Please run configure from a separate build directory." exit fi # Configure should create src/Zoltan_config.h from src/Zoltan_config.h.in AM_CONFIG_HEADER(src/include/Zoltan_config.h:src/include/Zoltan_config.h.in) # Allow users to specify their own "install" command. If none is specified, # the default is install-sh found in the config subdirectory. AC_ARG_WITH(install, [AC_HELP_STRING([--with-install=INSTALL_PROGRAM], [Use the installation program INSTALL_PROGRAM rather the default that is provided. For example --with-install="/path/install -p"])], [ INSTALL=$withval INSTALL_PROGRAM=$withval INSTALL_SCRIPT=$withval INSTALL_DATA="$withval -m 644" ],) # AM_MAINTAINER_MODE turns off maintainer-only makefile targets by # default, and changes configure to understand a # --enable-maintainer-mode option. --enable-maintainer-mode turns the # maintainer-only targets back on. The maintainer-only makefile # targets permit end users to clean automatically-generated files such # as configure, which means they have to have autoconf and automake # installed to repair the damage. AM_MAINTAINER_MODE makes it a bit # harder for users to shoot themselves in the foot. AM_MAINTAINER_MODE # Define $build, $host, $target, etc AC_CANONICAL_TARGET # Note in header file and Makefile conditional what the host OS is AM_CONDITIONAL(HOST_CYGWIN, false) AM_CONDITIONAL(HOST_LINUX, false) AM_CONDITIONAL(HOST_SOLARIS, false) case $host_os in cygwin) AM_CONDITIONAL(HOST_CYGWIN, true) AC_DEFINE(HOST_CYGWIN,1,[software host will be cygwin]) ;; linux*) AM_CONDITIONAL(HOST_LINUX, true) AC_DEFINE(HOST_LINUX,1,[software host will be linux]) ;; solaris*) AM_CONDITIONAL(HOST_SOLARIS, true) AC_DEFINE(HOST_SOLARIS,1,[software host will be solaris]) ;; esac # Use automake # - Required version of automake. AM_INIT_AUTOMAKE(1.9.6 no-define tar-ustar) # Specify required version of autoconf. AC_PREREQ(2.59) #TAC_ARG_ENABLE_OPTION(fortran, [enable Fortran support], FORTRAN_SUPPORT, no) #This option is not currently available TAC_ARG_ENABLE_OPTION(f90interface, [enable Fortran 90 interface (automatically enables Fortran support)], F90INTERFACE, no) AM_CONDITIONAL(BUILD_ZOLTAN_F90_INTERFACE, [test "X$ac_cv_use_f90interface" != "Xno"]) #AM_CONDITIONAL(USE_FORTRAN, [test "X$ac_cv_use_fortran" != "Xno"]) if test "X$ac_cv_use_f90interface" = "Xyes"; then ac_cv_use_fortran=yes else ac_cv_use_fortran=no fi if test "X$ac_cv_use_fortran" = "Xyes"; then ac_cv_use_fortran90=yes # AX_F90_MODULE_FLAG # if test "X$ax_cv_f90_modflag" = "Xunknown" ; then # AC_MSG_ERROR([unable to find f90 modules extension]) # else # FCFLAGS="$ax_cv_f90_modflag../ $ax_cv_f90_modflag. ${FCFLAGS}" # fi else ac_cv_use_fortran90=no fi TAC_ARG_ENABLE_FEATURE_SUB(zoltan, cppdriver, [Enable Zoltan's C++ driver], ZOLTAN_CPPDRIVER, yes) AM_CONDITIONAL(HAVE_ZOLTAN_CPPDRIVER, [test "X$ac_cv_use_zoltan_cppdriver" != "Xno"]) #This can be removed after we retire the old build system #AC_DEFINE([TRILINOS_CONFIG_H],,[Define when using the autotools to build Zoltan]) # ------------------------------------------------------------------------ # Check to see if MPI enabled and if any special configuration done # ------------------------------------------------------------------------ # We may want to handle this differently because Zoltan requires MPI #TAC_ARG_CONFIG_MPI ZAC_ARG_CONFIG_MPI # #np# - can eliminate compiler checks below if your package does not use the # language corresponding to the check. Please note that if you use # F77_FUNC to determine Fortran name mangling, you should not remove # the Fortran compiler check or the check for Fortran flags. Doing # so will prevent the detection of the proper name mangling in some # cases. AC_ARG_ENABLE(mpi-recv-limit, AS_HELP_STRING([--enable-mpi-recv-limit],[Set to the limit on the number of simultaneous MPI posted receives, if any; default is --enable-mpi-recv-limit=10]), [ AC_MSG_NOTICE(Building Zoltan to observe a limit of $enable_mpi_recv_limit simultaneously posted MPI receives) AC_SUBST(MPI_RECV_LIMIT_FLAG, "-DMPI_RECV_LIMIT=$enable_mpi_recv_limit") ] ) # ------------------------------------------------------------------------ # Checks for programs # ------------------------------------------------------------------------ AM_PROG_CC_C_O(cc gcc) #Conditional only? #if test "X$ac_cv_use_zoltan_cppdriver" = "Xyes"; then AC_PROG_CXX(CC g++ c++ cxx) #fi if test "X$ac_cv_use_fortran90" = "Xyes"; then AC_PROG_FC(FC gfortran f90 xlf90 f95) fi if test "X$ac_cv_use_fortran" = "Xyes"; then AC_PROG_FC(FC gfortran f90 xlf90 f95) fi AC_PROG_RANLIB # Check if --with-flags present, prepend any specs to FLAGS TAC_ARG_WITH_FLAGS(ccflags, CCFLAGS) #if test "X$ac_cv_use_zoltan_cppdriver" = "Xyes"; then TAC_ARG_WITH_FLAGS(cxxflags, CXXFLAGS) CXXFLAGS="-DMPICH_IGNORE_CXX_SEEK ${CXXFLAGS}" #fi TAC_ARG_WITH_FLAGS(cflags, CFLAGS) TAC_ARG_WITH_FLAGS(fcflags, FCFLAGS) #TAC_ARG_WITH_FLAGS(fflags, FFLAGS) TAC_ARG_WITH_LIBS TAC_ARG_WITH_FLAGS(ldflags, LDFLAGS) # ------------------------------------------------------------------------ # Alternate archiver # ------------------------------------------------------------------------ TAC_ARG_WITH_AR # ------------------------------------------------------------------------ # MPI link check # ------------------------------------------------------------------------ TAC_ARG_CHECK_MPI # ------------------------------------------------------------------------ # Checks for Makefile.export related systems # ------------------------------------------------------------------------ # Add this later TAC_ARG_ENABLE_EXPORT_MAKEFILES(yes) # ------------------------------------------------------------------------ # Checks for special package flags # ------------------------------------------------------------------------ ZAC_ARG_WITH_ID() TAC_ARG_ENABLE_OPTION(gzip, [enable zlib support for driver], GZIP, no) if test "X$ac_cv_use_gzip" != "Xno"; then LIBS="-lz ${LIBS}" fi AM_CONDITIONAL(BUILD_GZIP, [test "X$ac_cv_use_gzip" != "Xno"]) TAC_ARG_WITH_PACKAGE(parmetis, [Enable Parmetis support.], PARMETIS, no) AM_CONDITIONAL(BUILD_PARMETIS, [test "X$ac_cv_use_parmetis" != "Xno"]) TAC_ARG_WITH_3PL_SUB(parmetis, libdir, [Specify where the Parmetis library is located. Ex. /path/to/library]) if test "X$tac_with_parmetis_libdir" != "Xno"; then LIBS="-L${tac_with_parmetis_libdir} -lparmetis -lmetis ${LIBS}" fi TAC_ARG_WITH_3PL_SUB(parmetis, incdir, [Specify where the Parmetis header files are located. Ex. /path/to/headers]) # It was necessary to move the parmetis include directories before the scotch # include directories. #if test "X$tac_with_parmetis_incdir" != "Xno"; then # CPPFLAGS="-I${tac_with_parmetis_incdir} ${CPPFLAGS}" #fi TAC_ARG_WITH_PACKAGE(scotch, [Enable Scotch support.], SCOTCH, no) AM_CONDITIONAL(BUILD_SCOTCH, [test "X$ac_cv_use_scotch" != "Xno"]) TAC_ARG_WITH_3PL_SUB(scotch, libdir, [Specify where the Scotch library is located. Ex. /path/to/library]) if test "X$tac_with_scotch_libdir" != "Xno"; then LIBS="-L${tac_with_scotch_libdir} -lptscotch -lptscotcherr -lptscotcherrexit -lscotch -lscotcherr -lscotcherrexit ${LIBS}" fi TAC_ARG_WITH_3PL_SUB(scotch, incdir, [Specify where the Scotch header files are located. Ex. /path/to/headers]) if test "X$tac_with_scotch_incdir" != "Xno"; then CPPFLAGS="-I${tac_with_scotch_incdir} ${CPPFLAGS}" fi # The parmetis include directories need to be before the Scotch include # directories. if test "X$tac_with_parmetis_incdir" != "Xno"; then CPPFLAGS="-I${tac_with_parmetis_incdir} ${CPPFLAGS}" fi TAC_ARG_WITH_PACKAGE(patoh, [Enable Patoh support.], PATOH, no) TAC_ARG_WITH_3PL_SUB(patoh, libdir, [Specify where the Patoh library is located. Ex. /path/to/library]) if test "X$tac_with_patoh_libdir" != "Xno"; then LIBS="-L${tac_with_patoh_libdir} -lpatoh ${LIBS}" fi TAC_ARG_WITH_3PL_SUB(patoh, incdir, [Specify where the Patoh header files are located. Ex. /path/to/headers]) if test "X$tac_with_patoh_incdir" != "Xno"; then CPPFLAGS="-I${tac_with_patoh_incdir} ${CPPFLAGS}" fi #TAC_ARG_WITH_PACKAGE(drum, [Enable Drum support. Library name as well as library and include paths must be specified using LDFLAGS and CPPFLAGS.], DRUM, no) #TAC_ARG_WITH_3PL_SUB(drum, libdir, [Specify where the Drum library is located. Ex. /path/to/library]) #if test "X$tac_with_drum_libdir" != "Xno"; then # LIBS="-L${tac_with_drum_libdir} ${LIBS}" #fi #TAC_ARG_WITH_3PL_SUB(drum, incdir, [Specify where the Drum header files are located. Ex. /path/to/headers]) #if test "X$tac_with_drum_incdir" != "Xno"; then # CPPFLAGS="-I${tac_with_drum_incdir} ${CPPFLAGS}" #fi TAC_ARG_WITH_PACKAGE(nemesis_exodus, [Enable Nemesis/Exodus support for the Zdrive test executable. Library and include paths must be specified using LDFLAGS and CFLAGS.], NEMESIS_EXODUS, no) #I am not sure if we can do this. We may not be able to get things in the right #order. JW. if test "X$ac_cv_use_nemesis_exodus" != "Xno"; then LIBS="-lnemIc -lexoIIv2c -lnetcdf ${LIBS}" fi LIBS="${LIBS} -lm" #TAC_ARG_WITH_PACKAGE(parkway, [Enable Parkway support.], PARKWAY, no) #TAC_ARG_WITH_3PL_SUB(parkway, libdir, [Specify where the Parkway library is located. Ex. /path/to/library]) #if test "X$tac_with_parkway_libdir" != "Xno"; then # LIBS="-L${tac_with_parkway_libdir} -lparkway -lpmpich++ -lstdc++ ${LIBS}" #fi #TAC_ARG_WITH_3PL_SUB(parkway, incdir, [Specify where the Parkway header files are located. Ex. /path/to/headers]) #if test "X$tac_with_parkway_incdir" != "Xno"; then # CPPFLAGS="-I${tac_with_parkway_incdir} ${CPPFLAGS}" #fi # ------------------------------------------------------------------------ # Checks if tests and examples should be built # ------------------------------------------------------------------------ TAC_ARG_ENABLE_FEATURE(tests, [Make tests for all Trilinos packages buildable with 'make tests'], TESTS, yes) TAC_ARG_ENABLE_FEATURE_SUB_CHECK( zoltan, tests, [Make Zoltan tests buildable with 'make tests'], ZOLTAN_TESTS) AM_CONDITIONAL(BUILD_TESTS, test "X$ac_cv_use_zoltan_tests" != "Xno") TAC_ARG_ENABLE_FEATURE(examples, [Make examples for all Trilinos packages buildable with 'make examples'], EXAMPLES, yes) TAC_ARG_ENABLE_FEATURE_SUB_CHECK( zoltan, examples, [Make Zoltan examples buildable with 'make examples'], ZOLTAN_EXAMPLES) AM_CONDITIONAL(BUILD_EXAMPLES, test "X$ac_cv_use_zoltan_examples" != "Xno") #We now build tests and examples through separate make targets, rather than #during "make". We still need to conditionally include the test and example #in SUBDIRS, even though SUB_TEST and SUB_EXAMPLE will never be #defined, so that the tests and examples are included in the distribution #tarball. AM_CONDITIONAL(SUB_TEST, test "X$ac_cv_use_sub_test" = "Xyes") AM_CONDITIONAL(SUB_EXAMPLE, test "X$ac_cv_use_sub_example" = "Xyes") #TAC_ARG_ENABLE_FEATURE(libcheck, [Check for some third-party libraries. (Cannot be disabled unless tests and examples are also disabled.)], LIBCHECK, yes) # ------------------------------------------------------------------------ # Specify other directories # ------------------------------------------------------------------------ # enable use of --with-libdirs="-Llibdir1 -Llibdir2 ..." to prepend to LDFLAGS TAC_ARG_WITH_LIBDIRS # enable use of --with-incdirs="-Iincdir1 -Iincdir2 ..." to prepend to CPPFLAGS TAC_ARG_WITH_INCDIRS # ------------------------------------------------------------------------ # Checks for libraries # ------------------------------------------------------------------------ ax_cv_f90_modulecase="lower" FC_VENDOR="none" # Define F77_FUNC that will be used to link with Fortran subroutines. if test "X$ac_cv_use_fortran" != "Xno"; then AC_FC_WRAPPERS AC_FC_SRCEXT(f) AC_FC_SRCEXT(f90) # Determine compile-line flag for F90 modules (e.g., -M). AX_F90_MODULE_FLAG if test "X$ax_cv_f90_modflag" = "Xunknown" ; then AC_MSG_ERROR([unable to find f90 modules extension]) else FCFLAGS="$ax_cv_f90_modflag../ $ax_cv_f90_modflag. ${FCFLAGS}" fi # Determine case (upper or lower) of F90 module files. AX_F90_MODULE_CASE echo "KDDKDD " $ax_cv_f90_modulecase WK_FC_GET_VENDOR() echo "KDDKDD " $FC_VENDOR if test "$FC_VENDOR" = "PGI"; then FCFLAGS="-DPGI ${FCFLAGS}" CFLAGS="-DPGI ${CFLAGS}" fi if test "$FC_VENDOR" = "Lahey"; then FCFLAGS="-DFUJITSU ${FCFLAGS}" CFLAGS="-DFUJITSU ${CFLAGS}" fi fi AM_CONDITIONAL(F90_MODULE_LOWERCASE, [test "X$ax_cv_f90_modulecase" != "Xupper"]) AM_CONDITIONAL(NAG_F90_COMPILER, [test "X$FC_VENDOR" == "XNAG"]) # If tests, examples and libcheck are disabled, we don't have to check # for these libraries. #if test "X$ac_cv_use_new_package_examples" != "Xno" || test "X$ac_cv_use_libcheck" != "Xno"; then #if test "X$ac_cv_use_zoltan_tests" != "Xno" || test "X$ac_cv_use_zoltan_examples" != "Xno" || test "X$ac_cv_use_libcheck" != "Xno"; then # checks for libraries now dnl Replace `main' with a function in -lm: #AC_SEARCH_LIBS(pow,[m],,AC_MSG_ERROR(Cannot find math library)) #AC_SEARCH_LIBS(sqrt,[m],,AC_MSG_ERROR(Cannot find math library)) #fi # end of the list of libraries that don't need to be checked for if # tests and examples are disabled. # ------------------------------------------------------------------------ # Checks for linker characteristics # ------------------------------------------------------------------------ # Determine libraries needed for linking with Fortran #AC_FC_LIBRARY_LDFLAGS if test "X$ac_cv_use_fortran" = "Xyes"; then AC_FC_LIBRARY_LDFLAGS fi # ------------------------------------------------------------------------ # Zoltan may be built via autotools, cmake, or our native makefile # ------------------------------------------------------------------------ CPPFLAGS="-DAUTOTOOLS_BUILD ${CPPFLAGS}" # ------------------------------------------------------------------------ # Perform substitutions in output files # ------------------------------------------------------------------------ AC_SUBST(ac_aux_dir) # ------------------------------------------------------------------------ # Output files # ------------------------------------------------------------------------ # AC_CONFIG_FILES([ Makefile src/Makefile src/driver/Makefile src/fdriver/Makefile Makefile.export.zoltan example/Makefile example/C/Makefile example/CPP/Makefile siMPI/Makefile siMPI/pyMPI/Makefile siMPI/pyMPI/siMPI/Makefile ]) # test/Large_Data/Makefile # example/lib/Makefile # example/C/Makefile # example/C/sparse_matrix/Makefile # example/CPP/Makefile # Utilities/Makefile AC_OUTPUT() echo "---------------------------------------------" echo "Finished Running Zoltan Configure Script" echo "---------------------------------------------"