diff options
author | eschnett <eschnett@5c1b1641-b641-47ec-b3d9-0f93d4c445ee> | 2014-12-01 19:30:36 +0000 |
---|---|---|
committer | eschnett <eschnett@5c1b1641-b641-47ec-b3d9-0f93d4c445ee> | 2014-12-01 19:30:36 +0000 |
commit | c227bd2e1ff19706ee2c64659c7a557c146cb7b5 (patch) | |
tree | 5f2bb368b2ec6da689f174085a6cd28ca2d9df05 | |
parent | 80b68cf6e6598d823ceac251ac51e499dded1b3a (diff) |
Delay building LORENE
git-svn-id: http://svn.cactuscode.org/projects/ExternalLibraries/LORENE/trunk@62 5c1b1641-b641-47ec-b3d9-0f93d4c445ee
-rw-r--r-- | configuration.ccl | 7 | ||||
-rw-r--r-- | configure.sh | 243 | ||||
-rwxr-xr-x | src/build.sh | 138 | ||||
-rwxr-xr-x | src/detect.sh | 115 | ||||
-rw-r--r-- | src/make.code.deps | 12 |
5 files changed, 269 insertions, 246 deletions
diff --git a/configuration.ccl b/configuration.ccl index 241a44d..b9bd024 100644 --- a/configuration.ccl +++ b/configuration.ccl @@ -2,9 +2,10 @@ PROVIDES LORENE { - SCRIPT configure.sh + SCRIPT src/detect.sh LANG bash - OPTIONS LORENE_DIR LORENE_INSTALL_DIR LORENE_EXTRA_LIB_DIRS LORENE_EXTRA_LIBS + OPTIONS LORENE_DIR LORENE_EXTRA_LIB_DIRS LORENE_EXTRA_LIBS LORENE_INSTALL_DIR } -REQUIRES LAPACK BLAS GSL +REQUIRES BLAS LAPACK GSL +REQUIRES LORENE diff --git a/configure.sh b/configure.sh deleted file mode 100644 index 51ce117..0000000 --- a/configure.sh +++ /dev/null @@ -1,243 +0,0 @@ -#! /bin/bash - -################################################################################ -# Prepare -################################################################################ - -# Set up shell -if [ "$(echo ${VERBOSE} | tr '[:upper:]' '[:lower:]')" = 'yes' ]; then - set -x # Output commands -fi -set -e # Abort on errors - - - -################################################################################ -# Search -################################################################################ - -if [ -z "${LORENE_DIR}" ]; then - echo "BEGIN MESSAGE" - echo "LORENE selected, but LORENE_DIR not set." - echo "END MESSAGE" -else - echo "BEGIN MESSAGE" - echo "Using LORENE in ${LORENE_DIR}" - echo "END MESSAGE" -fi - - - -################################################################################ -# Build -################################################################################ - -if [ -z "${LORENE_DIR}" \ - -o "$(echo "${LORENE_DIR}" | tr '[a-z]' '[A-Z]')" = 'BUILD' ] -then - echo "BEGIN MESSAGE" - echo "Using bundled LORENE..." - echo "END MESSAGE" - - # check for required tools. Do this here so that we don't require them when - # using the system library - if [ x$TAR = x ] ; then - echo 'BEGIN ERROR' - echo 'Could not find tar command. Please make sure that (gnu) tar is present' - echo 'and that the TAR variable is set to its location.' - echo 'END ERROR' - exit 1 - fi - if [ x$PATCH = x ] ; then - echo 'BEGIN ERROR' - echo 'Could not find patch command. Please make sure that (gnu) tar is present' - echo 'and that the PATCH variable is set to its location.' - echo 'END ERROR' - exit 1 - fi - - # Set locations - THORN=LORENE - NAME=Lorene - SRCDIR="$(dirname $0)" - BUILD_DIR=${SCRATCH_BUILD}/build/${THORN} - if [ -z "${LORENE_INSTALL_DIR}" ]; then - INSTALL_DIR=${SCRATCH_BUILD}/external/${THORN} - else - echo "BEGIN MESSAGE" - echo "Installing LORENE into ${LORENE_INSTALL_DIR}" - echo "END MESSAGE" - INSTALL_DIR=${LORENE_INSTALL_DIR} - fi - DONE_FILE=${SCRATCH_BUILD}/done/${THORN} - LORENE_DIR=${INSTALL_DIR} - - if [ -e ${DONE_FILE} -a ${DONE_FILE} -nt ${SRCDIR}/dist/${NAME}.tar.gz \ - -a ${DONE_FILE} -nt ${SRCDIR}/configure.sh ] - then - echo "BEGIN MESSAGE" - echo "LORENE has already been built; doing nothing" - echo "END MESSAGE" - else - echo "BEGIN MESSAGE" - echo "Building LORENE" - echo "END MESSAGE" - - # Build in a subshell - ( - exec >&2 # Redirect stdout to stderr - if [ "$(echo ${VERBOSE} | tr '[:upper:]' '[:lower:]')" = 'yes' ]; then - set -x # Output commands - fi - set -e # Abort on errors - cd ${SCRATCH_BUILD} - - # Set up environment - unset LIBS - if echo '' ${ARFLAGS} | grep 64 > /dev/null 2>&1; then - export OBJECT_MODE=64 - fi - - ####################################################################### - # determine OPENMP_MODE from the OPENMP option - # if this option isn't set, then OPENMP_MODE will default to 'no' - OPENMP_MODE='no' - if test -n "${OPENMP}"; then - - OPENMP=`echo ${OPENMP} | tr '[:upper:]' '[:lower:]'` - - if test "${OPENMP}" != 'yes' -a "${OPENMP}" != 'no'; then - echo 'BEGIN ERROR' - echo "configure: error: Didn't recognize setting of OPENMP=\"$OPENMP\" (should be either \"yes\" or \"no\")" - echo 'END ERROR' - exit 1 - fi - OPENMP_MODE="${OPENMP}" - fi - - echo "LORENE: Preparing directory structure..." - mkdir build external done 2> /dev/null || true - rm -rf ${BUILD_DIR} ${INSTALL_DIR} - mkdir ${BUILD_DIR} ${INSTALL_DIR} - - echo "LORENE: Unpacking archive..." - pushd ${BUILD_DIR} - ${TAR?} xzf ${SRCDIR}/dist/${NAME}.tar.gz - ${PATCH?} -p0 < ${SRCDIR}/dist/des.patch - ${PATCH?} -p0 < ${SRCDIR}/dist/makesystem.patch - ${PATCH?} -p0 < ${SRCDIR}/dist/pgplot.patch - ${PATCH?} -p0 < ${SRCDIR}/dist/openmp.patch - ${PATCH?} -p0 < ${SRCDIR}/dist/check_fopen_error.patch - # Some (ancient but still used) versions of patch don't support the - # patch format used here but also don't report an error using the - # exit code. So we use this patch to test for this - ${PATCH?} -p0 < ${SRCDIR}/dist/patchtest.patch - if [ ! -e Lorene/.patch_tmp ]; then - echo 'BEGIN ERROR' - echo 'The version of patch is too old to understand this patch format.' - echo 'Please set the PATCH environment variable to a more recent ' - echo 'version of the patch command.' - echo 'END ERROR' - exit 1 - fi - rm -f Lorene/.patch_tmp - # Prevent overly long lines - for file in $(find ${NAME} -name '*.f'); do - # Remove CVS Header comments - perl -pi -e 's{\$Header.*\$}{\$Header\$}g' $file - # Replace tabs with eight blanks - perl -pi -e 's{\t}{ }' $file - # Remove in-line comments (in lines without quotes) - perl -pi -e 's{^([^'\''"]*?)!.*$}{$1}' $file - # Break long lines - perl -pi -e 's{^([ 0-9].{71})(.+)}{$1\n \$$2}' $file - done - - echo "LORENE: Configuring..." - cd ${NAME} - if echo ${F77} | grep -i xlf > /dev/null 2>&1; then - FIXEDF77FLAGS=-qfixed - fi - export HOME_LORENE=${BUILD_DIR}/${NAME} - cat > local_settings <<EOF -CXX = ${CXX} -CXXFLAGS = ${CXXFLAGS} ${CPPFLAGS} $(test x${OPENMP_MODE} = xyes && echo ${CXX_OPENMP_FLAGS} ${CPP_OPENMP_FLAGS}) \$(addprefix -I,${SYS_INC_DIRS}) ${LDFLAGS} -CXXFLAGS_G = ${CXXFLAGS} ${CPPFLAGS} $(test x${OPENMP_MODE} = xyes && echo ${CXX_OPENMP_FLAGS} ${CPP_OPENMP_FLAGS}) ${LDFLAGS} -F77 = ${F77} -F77FLAGS = ${F77FLAGS} ${FIXEDF77FLAGS} $(test x${OPENMP_MODE} = xyes && echo ${F77_OPENMP_FLAGS}) ${LDFLAGS} -F77FLAGS_G = ${F77FLAGS} ${FIXEDF77FLAGS} $(test x${OPENMP_MODE} = xyes && echo ${F77_OPENMP_FLAGS}) ${LDFLAGS} -INC = -I\$(HOME_LORENE)/C++/Include -I\$(HOME_LORENE)/C++/Include_extra \$(addprefix -I,${GSL_INC_DIRS}) -RANLIB = ${RANLIB} -# We don't need dependencies since we always build from scratch -#MAKEDEPEND = ${CXX_DEPEND} \$(INC) \$< ${CXX_DEPEND_OUT} && mv \$@ \$(df).d -MAKEDEPEND = : > \$(df).d -DEPDIR = .deps -FFT_DIR = FFT991 -LIB_CXX = ${LIBS} -LIB_LAPACK = ${LAPACK_LIBS} ${BLAS_LIBS} -LIB_PGPLOT = -LIB_GSL = ${GSL_LIBS} -DONTBUILDDEBUGLIB = yes -EOF - if [ -n "$XARGS" ]; then echo "XARGS = $XARGS" >> local_settings; fi - if [ -n "$FIND" ]; then echo "FIND = $FIND" >> local_settings; fi - - echo "LORENE: Building..." - # Note that this builds two versions of the library, a - # "regular" version and a "debug" version. Both are identical - # (since we specified identical build options above), and we - # ignore the "debug" version. - ${MAKE} cpp fortran export - - echo "LORENE: Installing..." - mv ${BUILD_DIR}/${NAME}/Lib ${INSTALL_DIR} - mkdir ${INSTALL_DIR}/C++ - mv ${BUILD_DIR}/${NAME}/C++/Include ${INSTALL_DIR}/C++ - mkdir ${INSTALL_DIR}/Export - mkdir ${INSTALL_DIR}/Export/C++ - mv ${BUILD_DIR}/${NAME}/Export/C++/Include ${INSTALL_DIR}/Export/C++ - popd - - echo "LORENE: Cleaning up..." - rm -rf ${BUILD_DIR} - - date > ${DONE_FILE} - echo "LORENE: Done." - ) - - if (( $? )); then - echo 'BEGIN ERROR' - echo 'Error while building LORENE. Aborting.' - echo 'END ERROR' - exit 1 - fi - fi - -fi - - - -################################################################################ -# Configure Cactus -################################################################################ - -# Set options -LORENE_INC_DIRS="${LORENE_DIR}/Export/C++/Include ${LORENE_DIR}/C++/Include" -LORENE_LIB_DIRS="${LORENE_DIR}/Lib ${LORENE_EXTRA_LIB_DIRS}" -LORENE_LIBS="lorene_export lorene lorenef77 ${LORENE_EXTRA_LIBS}" - -LORENE_INC_DIRS="$(${CCTK_HOME}/lib/sbin/strip-incdirs.sh ${LORENE_INC_DIRS})" -LORENE_LIB_DIRS="$(${CCTK_HOME}/lib/sbin/strip-libdirs.sh ${LORENE_LIB_DIRS})" - -# Pass options to Cactus -echo "BEGIN MAKE_DEFINITION" -echo "LORENE_DIR = ${LORENE_DIR}" -echo "LORENE_INC_DIRS = ${LORENE_INC_DIRS}" -echo "LORENE_LIB_DIRS = ${LORENE_LIB_DIRS}" -echo "LORENE_LIBS = ${LORENE_LIBS}" -# echo "HOME_LORENE = ${LORENE_DIR}" -echo "END MAKE_DEFINITION" - -echo 'INCLUDE_DIRECTORY $(LORENE_INC_DIRS)' -echo 'LIBRARY_DIRECTORY $(LORENE_LIB_DIRS)' -echo 'LIBRARY $(LORENE_LIBS)' diff --git a/src/build.sh b/src/build.sh new file mode 100755 index 0000000..70e5a4f --- /dev/null +++ b/src/build.sh @@ -0,0 +1,138 @@ +#! /bin/bash + +################################################################################ +# Prepare +################################################################################ + +# Set up shell +if [ "$(echo ${VERBOSE} | tr '[:upper:]' '[:lower:]')" = 'yes' ]; then + set -x # Output commands +fi +set -e # Abort on errors + + + +# Set locations +THORN=LORENE +NAME=Lorene +SRCDIR="$(dirname $0)" +BUILD_DIR=${SCRATCH_BUILD}/build/${THORN} +if [ -z "${LORENE_INSTALL_DIR}" ]; then + INSTALL_DIR=${SCRATCH_BUILD}/external/${THORN} +else + echo "BEGIN MESSAGE" + echo "Installing LORENE into ${LORENE_INSTALL_DIR}" + echo "END MESSAGE" + INSTALL_DIR=${LORENE_INSTALL_DIR} +fi +DONE_FILE=${SCRATCH_BUILD}/done/${THORN} +LORENE_DIR=${INSTALL_DIR} + +# Set up environment +unset LIBS +if echo '' ${ARFLAGS} | grep 64 > /dev/null 2>&1; then + export OBJECT_MODE=64 +fi + +echo "LORENE: Preparing directory structure..." +mkdir build external done 2> /dev/null || true +rm -rf ${BUILD_DIR} ${INSTALL_DIR} +mkdir ${BUILD_DIR} ${INSTALL_DIR} + +echo "LORENE: Unpacking archive..." +pushd ${BUILD_DIR} +${TAR?} xzf ${SRCDIR}/../dist/${NAME}.tar.gz +${PATCH?} -p0 < ${SRCDIR}/../dist/des.patch +${PATCH?} -p0 < ${SRCDIR}/../dist/makesystem.patch +${PATCH?} -p0 < ${SRCDIR}/../dist/pgplot.patch +${PATCH?} -p0 < ${SRCDIR}/../dist/openmp.patch +${PATCH?} -p0 < ${SRCDIR}/../dist/check_fopen_error.patch +# Some (ancient but still used) versions of patch don't support the +# patch format used here but also don't report an error using the exit +# code. So we use this patch to test for this +${PATCH?} -p0 < ${SRCDIR}/../dist/patchtest.patch +if [ ! -e Lorene/.patch_tmp ]; then + echo 'BEGIN ERROR' + echo 'The version of patch is too old to understand this patch format.' + echo 'Please set the PATCH environment variable to a more recent ' + echo 'version of the patch command.' + echo 'END ERROR' + exit 1 +fi +rm -f Lorene/.patch_tmp +# Prevent overly long lines +for file in $(find ${NAME} -name '*.f'); do + # Remove CVS Header comments + perl -pi -e 's{\$Header.*\$}{\$Header\$}g' $file + # Replace tabs with eight blanks + perl -pi -e 's{\t}{ }' $file + # Remove in-line comments (in lines without quotes) + perl -pi -e 's{^([^'\''"]*?)!.*$}{$1}' $file + # Break long lines + perl -pi -e 's{^([ 0-9].{71})(.+)}{$1\n \$$2}' $file +done + +echo "LORENE: Configuring..." +cd ${NAME} + +# determine OPENMP_MODE from the OPENMP option +OPENMP_MODE='no' +if test -n "${OPENMP}"; then + OPENMP=`echo ${OPENMP} | tr '[:upper:]' '[:lower:]'` + if test "${OPENMP}" != 'yes' -a "${OPENMP}" != 'no'; then + echo 'BEGIN ERROR' + echo "Didn't recognize setting of OPENMP=\"$OPENMP\" (should be either \"yes\" or \"no\")" + echo 'END ERROR' + exit 1 + fi + OPENMP_MODE="${OPENMP}" +fi + +if echo ${F77} | grep -i xlf > /dev/null 2>&1; then + FIXEDF77FLAGS=-qfixed +fi +export HOME_LORENE=${BUILD_DIR}/${NAME} +cat > local_settings <<EOF +CXX = ${CXX} +CXXFLAGS = ${CXXFLAGS} ${CPPFLAGS} $(test x${OPENMP_MODE} = xyes && echo ${CXX_OPENMP_FLAGS} ${CPP_OPENMP_FLAGS}) \$(addprefix -I,${SYS_INC_DIRS}) ${LDFLAGS} +CXXFLAGS_G = ${CXXFLAGS} ${CPPFLAGS} $(test x${OPENMP_MODE} = xyes && echo ${CXX_OPENMP_FLAGS} ${CPP_OPENMP_FLAGS}) ${LDFLAGS} +F77 = ${F77} +F77FLAGS = ${F77FLAGS} ${FIXEDF77FLAGS} $(test x${OPENMP_MODE} = xyes && echo ${F77_OPENMP_FLAGS}) ${LDFLAGS} +F77FLAGS_G = ${F77FLAGS} ${FIXEDF77FLAGS} $(test x${OPENMP_MODE} = xyes && echo ${F77_OPENMP_FLAGS}) ${LDFLAGS} +INC = -I\$(HOME_LORENE)/C++/Include -I\$(HOME_LORENE)/C++/Include_extra \$(addprefix -I,${GSL_INC_DIRS}) +RANLIB = ${RANLIB} +# We don't need dependencies since we always build from scratch +#MAKEDEPEND = ${CXX_DEPEND} \$(INC) \$< ${CXX_DEPEND_OUT} && mv \$@ \$(df).d +MAKEDEPEND = : > \$(df).d +DEPDIR = .deps +FFT_DIR = FFT991 +LIB_CXX = ${LIBS} +LIB_LAPACK = ${LAPACK_LIBS} ${BLAS_LIBS} +LIB_PGPLOT = +LIB_GSL = ${GSL_LIBS} +DONTBUILDDEBUGLIB = yes +EOF +if [ -n "$XARGS" ]; then echo "XARGS = $XARGS" >> local_settings; fi +if [ -n "$FIND" ]; then echo "FIND = $FIND" >> local_settings; fi + +echo "LORENE: Building..." +# Note that this builds two versions of the library, a "regular" +# version and a "debug" version. Both are identical (since we +# specified identical build options above), and we ignore the "debug" +# version. +${MAKE} cpp fortran export + +echo "LORENE: Installing..." +mv ${BUILD_DIR}/${NAME}/Lib ${INSTALL_DIR} +mkdir ${INSTALL_DIR}/C++ +mv ${BUILD_DIR}/${NAME}/C++/Include ${INSTALL_DIR}/C++ +mkdir ${INSTALL_DIR}/Export +mkdir ${INSTALL_DIR}/Export/C++ +mv ${BUILD_DIR}/${NAME}/Export/C++/Include ${INSTALL_DIR}/Export/C++ +popd + +echo "LORENE: Cleaning up..." +rm -rf ${BUILD_DIR} + +date > ${DONE_FILE} +echo "LORENE: Done." diff --git a/src/detect.sh b/src/detect.sh new file mode 100755 index 0000000..5ff7af1 --- /dev/null +++ b/src/detect.sh @@ -0,0 +1,115 @@ +#! /bin/bash + +################################################################################ +# Prepare +################################################################################ + +# Set up shell +if [ "$(echo ${VERBOSE} | tr '[:upper:]' '[:lower:]')" = 'yes' ]; then + set -x # Output commands +fi +set -e # Abort on errors + + + +################################################################################ +# Search +################################################################################ + +if [ -z "${LORENE_DIR}" ]; then + echo "BEGIN MESSAGE" + echo "LORENE selected, but LORENE_DIR not set." + echo "END MESSAGE" +else + echo "BEGIN MESSAGE" + echo "Using LORENE in ${LORENE_DIR}" + echo "END MESSAGE" +fi + + + +################################################################################ +# Build +################################################################################ + +if [ -z "${LORENE_DIR}" \ + -o "$(echo "${LORENE_DIR}" | tr '[a-z]' '[A-Z]')" = 'BUILD' ] +then + echo "BEGIN MESSAGE" + echo "Using bundled LORENE..." + echo "END MESSAGE" + + # Check for required tools. Do this here so that we don't require + # them when using the system library. + if [ "x$TAR" = x ] ; then + echo 'BEGIN ERROR' + echo 'Could not find tar command.' + echo 'Please make sure that the (GNU) tar command is present,' + echo 'and that the TAR variable is set to its location.' + echo 'END ERROR' + exit 1 + fi + if [ "x$PATCH" = x ] ; then + echo 'BEGIN ERROR' + echo 'Could not find patch command.' + echo 'Please make sure that the patch command is present,' + echo 'and that the PATCH variable is set to its location.' + echo 'END ERROR' + exit 1 + fi + + # Set locations + THORN=LORENE + NAME=Lorene + SRCDIR="$(dirname $0)" + BUILD_DIR=${SCRATCH_BUILD}/build/${THORN} + if [ -z "${LORENE_INSTALL_DIR}" ]; then + INSTALL_DIR=${SCRATCH_BUILD}/external/${THORN} + else + echo "BEGIN MESSAGE" + echo "Installing LORENE into ${LORENE_INSTALL_DIR}" + echo "END MESSAGE" + INSTALL_DIR=${LORENE_INSTALL_DIR} + fi + DONE_FILE=${SCRATCH_BUILD}/done/${THORN} + LORENE_DIR=${INSTALL_DIR} +else + THORN=LORENE + DONE_FILE=${SCRATCH_BUILD}/done/${THORN} + mkdir ${SCRATCH_BUILD}/done 2> /dev/null || true + date > ${DONE_FILE} +fi + + + +################################################################################ +# Configure Cactus +################################################################################ + +# Pass configuration options to build script +echo "BEGIN MAKE_DEFINITION" +echo "LORENE_EXTRA_LIB_DIRS = ${LORENE_EXTRA_LIB_DIRS}" +echo "LORENE_EXTRA_LIBS = ${LORENE_EXTRA_LIBS}" +echo "LORENE_INSTALL_DIR = ${LORENE_INSTALL_DIR}" +echo "END MAKE_DEFINITION" + +# Set options +LORENE_INC_DIRS="${LORENE_DIR}/Export/C++/Include ${LORENE_DIR}/C++/Include" +LORENE_LIB_DIRS="${LORENE_DIR}/Lib ${LORENE_EXTRA_LIB_DIRS}" +LORENE_LIBS="lorene_export lorene lorenef77 ${LORENE_EXTRA_LIBS}" + +LORENE_INC_DIRS="$(${CCTK_HOME}/lib/sbin/strip-incdirs.sh ${LORENE_INC_DIRS})" +LORENE_LIB_DIRS="$(${CCTK_HOME}/lib/sbin/strip-libdirs.sh ${LORENE_LIB_DIRS})" + +# Pass options to Cactus +echo "BEGIN MAKE_DEFINITION" +echo "LORENE_DIR = ${LORENE_DIR}" +echo "LORENE_INC_DIRS = ${LORENE_INC_DIRS}" +echo "LORENE_LIB_DIRS = ${LORENE_LIB_DIRS}" +echo "LORENE_LIBS = ${LORENE_LIBS}" +# echo "HOME_LORENE = ${LORENE_DIR}" +echo "END MAKE_DEFINITION" + +echo 'INCLUDE_DIRECTORY $(LORENE_INC_DIRS)' +echo 'LIBRARY_DIRECTORY $(LORENE_LIB_DIRS)' +echo 'LIBRARY $(LORENE_LIBS)' diff --git a/src/make.code.deps b/src/make.code.deps new file mode 100644 index 0000000..29353e3 --- /dev/null +++ b/src/make.code.deps @@ -0,0 +1,12 @@ +# Main make.code.deps file for thorn LORENE + +export BLAS_DIR BLAS_INC_DIRS BLAS_LIB_DIRS BLAS_LIBS +export GSL_DIR GSL_INC_DIRS GSL_LIB_DIRS GSL_LIBS +export LAPACK_DIR LAPACK_INC_DIRS LAPACK_LIB_DIRS LAPACK_LIBS + +export LORENE_EXTRA_LIB_DIRS LORENE_EXTRA_LIBS +export LORENE_INSTALL_DIR + +$(CCTK_TARGET) $(OBJS): $(SCRATCH_BUILD)/done/$(THORN) +$(SCRATCH_BUILD)/done/$(THORN): $(SRCDIR)/build.sh + $(SRCDIR)/build.sh |