Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • b383306/libcdi
  • mpim-sw/libcdi
  • m214007/libcdi
3 results
Show changes
Commits on Source (651)
Showing
with 1167 additions and 505 deletions
# Initialize utility functions:
. "$(cd "$(dirname "${BASH_SOURCE}")"; pwd)/../common_utils.sh"
#
# Initializes the environment.
#
init_env ()
{
case $(lsb_release -sc) in
stretch)
module unload automake/1.16.1
switch_for_module automake/1.16.1
# Use non-Debian libtool by default:
LIBTOOL_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libtool-2.4.6-qdyaqqw'
export PATH="${LIBTOOL_ROOT}/bin:${PATH-}"
export ACLOCAL_PATH="${LIBTOOL_ROOT}/share/aclocal:${ACLOCAL_PATH-}"
SWIG_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/swig-4.0.2-busrrtn'
RUBY_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/ruby-3.0.2-stqm2vj'
PYTHON_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/python-2.7.18-zqrnwom'
export PATH="${RUBY_ROOT}/bin:${PYTHON_ROOT}/bin:${SWIG_ROOT}/bin:${PATH}"
;;
bullseye)
switch_for_module automake autoconf libtool swig ruby python
;;
esac
}
#
# Initializes the Debian libtool
init_debian_libtool ()
{
export PATH="/usr/bin:${PATH-}"
export ACLOCAL_PATH="/usr/share/aclocal:${ACLOCAL_PATH-}"
case $(lsb_release -sc) in
stretch)
automake_module='automake/1.16.1'
;;
bullseye)
automake_module='automake'
;;
esac
# Prepend ACLOCAL_PATH with the path to Automake:
module unload "${automake_module}"
switch_for_module "${automake_module}"
}
#
# Sets variables for tests with GCC.
#
init_gcc ()
{
init_env
case $(lsb_release -sc) in
stretch)
switch_for_module gcc/6.3.0
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/netcdf-c-4.8.0-fzupaca'
# The installation of ecCodes does not provide '*.la' files, which would
# trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${LD_LIBRARY_PATH-}"
# The installation of NetCDF library provides '*.la' files, which trigger
# the linking to the HDF5 library but its installation does not provide
# the '*.la' files, which would trigger the RPATH injection:
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/hdf5-1.10.7-4l3frcp'
export LD_LIBRARY_PATH="${HDF5_ROOT}/lib:${LD_LIBRARY_PATH}"
;;
bullseye)
switch_for_module gcc/12.1.0 mpich/3.4.3-gcc-12.1.0
ECCODES_ROOT='/sw/bullseye-x64/packages/gcc-12.1.0/eccodes-2.26.0'
NETCDF_ROOT='/sw/bullseye-x64/packages/gcc-12.1.0/netcdf-c-4.9.0'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/ppm-1.0.8.1-gcc-12.1.0'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/yaxt-0.9.3.1-gcc-12.1.0'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
;;
esac
CC=gcc
CXX=g++
FC=gfortran
}
#
# Sets variables for tests with NVHPC.
#
init_nvhpc ()
{
init_env
case $(lsb_release -sc) in
stretch)
switch_for_module gcc/6.3.0
export NVHPC='/data/mpi/sclab/sip/m300488/nvhpc'
export NVLOCALRC="${NVHPC}/Linux_x86_64/21.3/compilers/bin/localrc.60300"
export PATH="${NVHPC}/Linux_x86_64/21.3/compilers/bin:${PATH-}"
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/mpich-3.4.2-sfxulsj/bin:${PATH}"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/netcdf-c-4.8.0-vjppuov'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/scales-ppm-1.0.7-uy4z72r'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/yaxt-0.9.2.1-lbqqemx'
# The installation of ecCodes does not provide '*.la' files, which would
# trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${LD_LIBRARY_PATH-}"
# The installation of NetCDF library provides '*.la' files, which trigger
# the linking to the HDF5 library but its installation does not provide
# the '*.la' files, which would trigger the RPATH injection:
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/hdf5-1.10.7-h7pvthl'
export LD_LIBRARY_PATH="${HDF5_ROOT}/lib:${LD_LIBRARY_PATH}"
;;
bullseye)
switch_for_module nvhpc/22.3 mpich/3.4.3-nvhpc-22.3
ECCODES_ROOT='/sw/bullseye-x64/packages/nvhpc-22.3/eccodes-2.26.0'
NETCDF_ROOT='/sw/bullseye-x64/packages/nvhpc-22.3/netcdf-c-4.9.0'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/ppm-1.0.8.1-nvhpc-22.3'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/yaxt-0.9.3.1-nvhpc-22.3'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
;;
esac
CC=nvc
CXX=nvc++
FC=nvfortran
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
}
#
# Sets variables for tests with Clang.
#
init_clang ()
{
# Make the system gfortran the first gfortran in the PATH:
export PATH="/usr/bin:${PATH-}"
init_env
case $(lsb_release -sc) in
stretch)
switch_for_module gcc/6.3.0
export PATH="/data/mpi/sclab/sip/m300488/clang/12.0.1/bin:${PATH}"
# Clang does not inject RPATHs to the standard library in use:
export LD_LIBRARY_PATH="/sw/stretch-x64/gcc/gcc-6.3.0/lib64:${LD_LIBRARY_PATH-}"
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/openmpi-4.1.1-6ydagyy/bin:${PATH}"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/netcdf-c-4.8.0-z6r5guk'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/scales-ppm-1.0.7-5mhatgx'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/yaxt-0.9.2.1-cj2nf5j'
# The installation of ecCodes does not provide '*.la' files, which would
# trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${LD_LIBRARY_PATH-}"
# The installation of NetCDF library provides '*.la' files, which trigger
# the linking to the HDF5 library but its installation does not provide
# the '*.la' files, which would trigger the RPATH injection:
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/hdf5-1.10.7-4y54xnh'
export LD_LIBRARY_PATH="${HDF5_ROOT}/lib:${LD_LIBRARY_PATH}"
;;
bullseye)
switch_for_module clang/14.0.6 openmpi/4.1.3-clang-14.0.6
ECCODES_ROOT='/sw/bullseye-x64/packages/clang-14.0.6/eccodes-2.26.0'
NETCDF_ROOT='/sw/bullseye-x64/packages/clang-14.0.6/netcdf-c-4.9.0-openmpi-4.1.3'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/ppm-1.0.8.1-clang-14.0.6'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/yaxt-0.9.3.1-clang-14.0.6'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
;;
esac
CC=clang
CXX=clang++
FC=gfortran
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun) --oversubscribe"
}
#
# Sets variables for tests with NAG.
#
init_nag ()
{
# Make the system gcc the first gcc in the PATH:
export PATH="/usr/bin:${PATH-}"
init_env
case $(lsb_release -sc) in
stretch)
switch_for_module gcc/6.3.0 nag/6.2
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/mpich-3.4.2-fzsvtw2/bin:${PATH}"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/netcdf-c-4.8.0-ogawg3w'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/scales-ppm-1.0.7-5kdlwzv'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/yaxt-0.9.2.1-rhq2ysn'
# The installation of ecCodes does not provide '*.la' files, which would
# trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${LD_LIBRARY_PATH-}"
# The installation of NetCDF library provides '*.la' files, which trigger
# the linking to the HDF5 library but its installation does not provide
# the '*.la' files, which would trigger the RPATH injection:
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/hdf5-1.10.7-pltg3k4'
export LD_LIBRARY_PATH="${HDF5_ROOT}/lib:${LD_LIBRARY_PATH}"
;;
bullseye)
switch_for_module nag/7.1 mpich/3.4.3-nag-7.1
ECCODES_ROOT='/sw/bullseye-x64/packages/nag-7.1/eccodes-2.26.0'
NETCDF_ROOT='/sw/bullseye-x64/packages/nag-7.1/netcdf-c-4.9.0-mpich-3.4.3'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/ppm-1.0.8.1-nag-7.1'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye/yaxt-0.9.3.1-nag-7.1'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
;;
esac
CC=gcc
CXX=g++
FC=nagfor
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
}
#!/bin/bash
set -eu
unset CDPATH
module purge
module load git
install_dir='/data/mpi/sclab/sip/m300488/libcdi-ci-sw-bullseye'
work_dir="$(pwd)/build"
make_cmd='make -j22'
mkdir -p "${work_dir}" && cd "${work_dir}"
# Get PPM:
wget https://swprojects.dkrz.de/redmine/attachments/download/521/ppm-1.0.8.1.tar.gz
tar xvf ppm-1.0.8.1.tar.gz
ppm_src_dir="${work_dir}/ppm-1.0.8.1"
ppm_name_tag='ppm-1.0.8.1'
ppm_config_args='--enable-MPI --disable-netcdf --disable-hdf5 --disable-parmetis --disable-metis --disable-crypto'
# Get YAXT:
git clone -b release-0.9.3.1 https://gitlab.dkrz.de/dkrz-sw/yaxt.git
git -C yaxt cherry-pick 8c1b18bc9cfb3c7185017e37f8b39f7a61c94259
yaxt_src_dir="${work_dir}/yaxt"
yaxt_name_tag='yaxt-0.9.3.1'
yaxt_config_args=''
export CC='mpicc'
export FC='mpif90'
# Install for GCC 12.1.0:
compiler_name_tag='gcc-12.1.0'
module load mpich/3.4.3-gcc-12.1.0
# Install PPM:
build_dir="${ppm_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${ppm_src_dir}/configure" ${ppm_config_args} --prefix="${install_dir}/${ppm_name_tag}-${compiler_name_tag}" FCFLAGS='-g -O2 -fallow-argument-mismatch'
$make_cmd
$make_cmd check
$make_cmd install )
# Install YAXT:
build_dir="${yaxt_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${yaxt_src_dir}/configure" ${yaxt_config_args} --prefix="${install_dir}/${yaxt_name_tag}-${compiler_name_tag}"
$make_cmd
$make_cmd check
$make_cmd install )
module unload mpich/3.4.3-gcc-12.1.0
# Install for NVHPC 22.3:
compiler_name_tag='nvhpc-22.3'
module load mpich/3.4.3-nvhpc-22.3
# Install PPM:
build_dir="${ppm_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${ppm_src_dir}/configure" ${ppm_config_args} --prefix="${install_dir}/${ppm_name_tag}-${compiler_name_tag}"
$make_cmd
$make_cmd check
$make_cmd install )
# Install YAXT:
build_dir="${yaxt_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${yaxt_src_dir}/configure" ${yaxt_config_args} --prefix="${install_dir}/${yaxt_name_tag}-${compiler_name_tag}"
$make_cmd
$make_cmd check
$make_cmd install )
module unload mpich/3.4.3-nvhpc-22.3
# Install for Clang 14.0.6:
compiler_name_tag='clang-14.0.6'
module load openmpi/4.1.3-clang-14.0.6
# Install PPM:
build_dir="${ppm_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${ppm_src_dir}/configure" ${ppm_config_args} --prefix="${install_dir}/${ppm_name_tag}-${compiler_name_tag}" FCFLAGS='-g -O2 -no-pie'
$make_cmd
$make_cmd check
$make_cmd install )
# Install YAXT:
build_dir="${yaxt_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${yaxt_src_dir}/configure" ${yaxt_config_args} --prefix="${install_dir}/${yaxt_name_tag}-${compiler_name_tag}" FCFLAGS='-g -O2 -no-pie'
$make_cmd
$make_cmd check
$make_cmd install )
module unload openmpi/4.1.3-clang-14.0.6
# Install for NAG 7.1:
compiler_name_tag='nag-7.1'
module load mpich/3.4.3-nag-7.1
# Install PPM:
build_dir="${ppm_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${ppm_src_dir}/configure" ${ppm_config_args} --prefix="${install_dir}/${ppm_name_tag}-${compiler_name_tag}" FC=no
$make_cmd
$make_cmd check
$make_cmd install )
# Install YAXT:
build_dir="${yaxt_name_tag}-${compiler_name_tag}"
mkdir "${build_dir}"
( cd "${build_dir}"
"${yaxt_src_dir}/configure" ${yaxt_config_args} --prefix="${install_dir}/${yaxt_name_tag}-${compiler_name_tag}"
$make_cmd
$make_cmd check
$make_cmd install )
module unload mpich/3.4.3-nag-7.1
......@@ -6,35 +6,45 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_clang1201
. "${script_dir}/init.sh"
init_clang
# Check the formatting. Note that git-clang-format might keep redundant blank
# lines. Therefore, we use clang-format:
find src app \
-name '*.h' -o -name '*.hpp' -o -name '*.c' -o -name '*.cpp' | \
xargs -n 1 -P 8 clang-format --Werror --dry-run --verbose
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
find src app interfaces tests examples \
\( -name '*.h' -o -name '*.hpp' -o -name '*.c' -o -name '*.cpp' \) -a \
! -path 'interfaces/python/cdi_wrapper.cpp' -a \
! -path 'interfaces/ruby/cdi_wrapper.cpp' -a \
! -path 'src/cdilib.c' \
| xargs -n 1 -P 8 clang-format --Werror --dry-run --verbose
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-cf-interface \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--enable-ppm-dist-array \
--with-eccodes="${ECCODES_ROOT}" \
--with-netcdf="${NETCDF_ROOT}" \
CC="${MPICC}" \
CPPFLAGS="-I${UUID_ROOT}/include" \
FC="${MPIFC}" \
F77="${MPIFC}" \
LDFLAGS="-I${UUID_ROOT}/lib" \
FCFLAGS='-g -O2 -no-pie' \
MPI_LAUNCH="${MPI_LAUNCH}" \
PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig"
make -j8
make -j8 check | tee tests/test-suite.log
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
......@@ -6,27 +6,27 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_nag626223
. "${script_dir}/init.sh"
init_nag
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
# Create a distribution file with minimalistic configuration:
"${top_srcdir}/configure"
make -j1 dist
"${top_srcdir}/configure" --enable-maintainer-mode
make -j8 dist
# Create a subdirectory for further testing and switch to it:
mkdir check_dist && cd check_dist
# Create a (git-ignored) subdirectory for further testing and switch to it:
mkdir build && cd build
# Move the distribution file to the test directory and unpack it:
mv ../cdi-*.tar.gz ./
tar xf cdi-*.tar.gz
# Create a subdirectory for building and switch to it:
mkdir build && cd build
mkdir build_dist && cd build_dist
# Use GCC from the path when compiling/linking Fortran code:
FCFLAGS="-O2 -g -Wc=$(which gcc)"
FCFLAGS="-g -O2 -Wc=$(which gcc)"
# Create an out-of-source configuration:
../cdi-*/configure \
......@@ -35,24 +35,23 @@ FCFLAGS="-O2 -g -Wc=$(which gcc)"
--enable-iso-c-interface \
--enable-mpi \
--enable-option-checking=fatal \
--enable-ppm-dist-array \
--with-eccodes="${ECCODES_ROOT}" \
--with-netcdf="${NETCDF_ROOT}" \
CC="${MPICC}" \
CPPFLAGS="-I${UUID_ROOT}/include" \
F77="${MPIFC}" \
FC="${MPIFC}" \
FCFLAGS="${FCFLAGS}" \
FFLAGS="${FCFLAGS}" \
LDFLAGS="-I${UUID_ROOT}/lib" \
MPI_LAUNCH="${MPI_LAUNCH}" \
PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig"
make -j8
make -j8 check | tee tests/test-suite.log
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
make -j8 distclean
check_no_files_in_cwd
cd "${top_srcdir}" && check_no_git_untracked
......@@ -6,42 +6,43 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_nv2130
. "${script_dir}/init.sh"
init_nvhpc
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
# We want to check with the Debian version of Libtool, which is patched to avoid
# overlinking:
( export PATH="/usr/bin:${PATH-}"
export ACLOCAL_PATH="/usr/share/aclocal:${ACLOCAL_PATH-}"
module unload automake/1.16.1
module load automake/1.16.1
"${top_srcdir}/autogen.sh" )
( init_debian_libtool; "${top_srcdir}/autogen.sh" )
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-cf-interface \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--enable-ppm-dist-array \
--with-eccodes="${ECCODES_ROOT}" \
--with-netcdf="${NETCDF_ROOT}" \
CC="${MPICC}" \
CPPFLAGS="-I${UUID_ROOT}/include" \
F77="${MPIFC}" \
FC="${MPIFC}" \
FCFLAGS='-g -fPIC' \
LDFLAGS="-I${UUID_ROOT}/lib" \
MPI_LAUNCH="${MPI_LAUNCH}" \
PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig"
make -j8
make -j8 check | tee tests/test-suite.log
# Check that an executable is not overlinked to libscalesppmcore.so:
tested_file='examples/pio/collectData.parallel'
tested_dir=$(dirname "${tested_file}")
check_all_tests_passed tests/test-suite.log
rm -f "${tested_file}" && make -C "${tested_dir}" AM_CFLAGS=-shared
tested_file="${tested_dir}/.libs/$(basename "${tested_file}")"
# Check that an executable is not overlinked to libscalesppmcore.so:
tested_file='./examples/pio/.libs/collectData'
invalid_needed=`readelf -d "${tested_file}" | sed -E -n '/\(NEEDED\).*libscalesppmcore\.so/p'` || {
echo "ERROR: failed to check '${tested_file}' for ELF NEEDED entries" >&2
exit 1
......@@ -53,3 +54,9 @@ if test -n "${invalid_needed}"; then
} >&2
exit 1
fi
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
......@@ -5,29 +5,58 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
install_dir="$(pwd)/install"
. "${script_dir}/utils.sh"
init_gcc630
. "${script_dir}/init.sh"
init_gcc
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Ruby and
# Python interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-option-checking=fatal \
--enable-python \
--enable-ruby \
--enable-swig \
--enable-python-interface \
--enable-ruby-interface \
--prefix="${install_dir}" \
--with-eccodes="${ECCODES_ROOT}" \
--with-netcdf="${NETCDF_ROOT}" \
CC="${CC}" \
CPPFLAGS="-I${UUID_ROOT}/include" \
CXX="${CXX}" \
LDFLAGS="-L${UUID_ROOT}/lib"
CXX="${CXX}"
make -j8
# Test the interfaces:
LD_LIBRARY_PATH="${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH}" make -j8 -C interfaces test
(cd interfaces && ./CdiInfo)
make -j8 check
make -j8 check || { cat interfaces/test-suite.log tests/test-suite.log; exit 1; }
check_all_tests_passed interfaces/test-suite.log
check_no_git_untracked
# Check the installation:
make -j8 install
export RUBYLIB="$(find "${install_dir}" -name 'Cdi.so' -printf '%h'):${RUBYLIB-}"
ruby ./interfaces/ruby/test.rb ./interfaces/testdata/mulval.grb
ruby ./interfaces/ruby/test.rb ./interfaces/testdata/mulval.nc
export PYTHONPATH="$(find "${install_dir}" -name 'Cdi.py' -printf '%h'):${PYTHONPATH-}"
python ./interfaces/python/test.py ./interfaces/testdata/mulval.grb
python ./interfaces/python/test.py ./interfaces/testdata/mulval.nc
# Check the uninstallation:
make -j8 uninstall
remaining_files=$(find "${install_dir}" -type f) || {
echo "ERROR: failed to get the list of files in the installation prefix '${install_dir}'" >&2
exit 1
}
test -z "${remaining_files}" || {
cat >&2 <<_EOF
ERROR: 'make uninstall' did not remove the following files:
${remaining_files}
_EOF
exit 1
}
#
# Accepts a list of environment modules and loads them witch conflict
# resolution.
#
switch_for_module ()
{
for sfm_module in "$@"; do
sfm_module_full=
sfm_module_short=
case $sfm_module in
*/*)
# The module is provided with the version part:
sfm_module_full=$sfm_module
sfm_module_short=`echo $sfm_module | sed 's%/[^/]*$%%'` ;;
*)
# Only the name of the module is provided, get the default version:
sfm_module_full=`module show $sfm_module 2>&1 | sed -n "s%^[^ \t]*/\\($sfm_module.*\\):%\\1%p"`
sfm_module_short=$sfm_module ;;
esac
# A space-separated list of modules that are already loaded:
sfm_loaded_full=`module -t list 2>&1 | tr '\n' ' ' | sed 's/^.*Modulefiles://' | sed 's/(default)//g'`
# Check whether the requested module if already loaded:
if test -n "$sfm_module_full"; then
case " $sfm_loaded_full " in
*" $sfm_module_full "*)
echo "module $sfm_module is already loaded"
continue ;;
esac
fi
# A list of modules in conflict:
sfm_conflicts=`module show $sfm_module 2>&1 | sed -n 's/^conflict\(.*\)/\1/p' | tr '\n\t' ' '`
# A list of loaded modules without version parts:
sfm_loaded_short=`echo "$sfm_loaded_full" | sed 's%\([^ ][^ ]*\)/[^ ]*%\1%g'`
# Add the short name of the module to the list of conflicts:
sfm_conflicts="$sfm_conflicts $sfm_module_short"
# A list of loaded modules that are in conflict with the requested module:
sfm_loaded_conflicts=
for sfm_conflict in $sfm_conflicts""; do
sfm_loaded_list=
case $sfm_conflict in
*/*)
# The conflict is specified with the version part:
sfm_loaded_list=$sfm_loaded_full ;;
*)
# The conflict is specified without the version part:
sfm_loaded_list=$sfm_loaded_short ;;
esac
# Check that the conflicted module is loaded:
case " $sfm_loaded_list " in
*" $sfm_conflict "*)
# The conflict is loaded, check whether it is already added to the
# list:
case " $sfm_loaded_conflicts " in
*" $sfm_conflict "*) ;;
*)
# The conflict is not in the list, append:
sfm_loaded_conflicts="$sfm_loaded_conflicts $sfm_conflict" ;;
esac
;;
esac
done
# Calculate the number of modules that must be unloaded to before loading
# the requested module:
sfm_loaded_conflicts_count=`echo $sfm_loaded_conflicts | wc -w`
case $sfm_loaded_conflicts_count in
0)
# None of the conflicting modules is loaded:
sfm_cmd="module load $sfm_module" ;;
1)
# There is only one module that must be unloaded, use switch command:
sfm_cmd="module switch $sfm_loaded_conflicts $sfm_module" ;;
*)
# There is more than one module that must be unloaded, unload all of
# them and then load the requested one:
sfm_cmd="module unload $sfm_loaded_conflicts && module load $sfm_module" ;;
esac
echo "$sfm_cmd"
eval "$sfm_cmd"
done
}
#
# Initializes the environment.
#
init_env ()
{
saved_set=$-
set +eu
. /etc/profile.d/mpim.sh
set -${saved_set}
switch_for_module automake/1.16.1
# Use non-Debian libtool by default:
LIBTOOL_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libtool-2.4.6-qdyaqqw'
export PATH="${LIBTOOL_ROOT}/bin:${PATH-}"
export ACLOCAL_PATH="${LIBTOOL_ROOT}/share/aclocal:${ACLOCAL_PATH-}"
SWIG_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/swig-4.0.2-busrrtn'
RUBY_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/ruby-3.0.2-stqm2vj'
PYTHON_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/python-2.7.18-zqrnwom'
export PATH="${RUBY_ROOT}/bin:${PYTHON_ROOT}/bin:${SWIG_ROOT}/bin:${PATH-}"
}
#
# Sets variables for tests with GCC 6.3.0.
#
init_gcc630 ()
{
init_env
switch_for_module gcc/6.3.0
CC=gcc
CXX=g++
FC=gfortran
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/netcdf-c-4.8.0-fzupaca'
UUID_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libuuid-1.0.3-rm4kv2o'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/hdf5-1.10.7-4l3frcp'
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${HDF5_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with NVHPC 21.3.0.
#
init_nv2130 ()
{
init_env
switch_for_module gcc/6.3.0
export NVHPC='/data/mpi/sclab/sip/m300488/nvhpc'
export NVLOCALRC="${NVHPC}/Linux_x86_64/21.3/compilers/bin/localrc.60300"
export PATH="${NVHPC}/Linux_x86_64/21.3/compilers/bin:${PATH-}"
CC=nvc
CXX=nvc++
FC=nvfortran
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/mpich-3.4.2-sfxulsj/bin:${PATH-}"
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/netcdf-c-4.8.0-vjppuov'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/scales-ppm-1.0.7-uy4z72r'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/yaxt-0.9.2.1-lbqqemx'
UUID_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libuuid-1.0.3-rm4kv2o'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nvhpc-21.3-sandybridge/hdf5-1.10.7-h7pvthl'
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${HDF5_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with Clang 12.0.1.
#
init_clang1201 ()
{
init_env
switch_for_module gcc/6.3.0
export PATH="/data/mpi/sclab/sip/m300488/clang/12.0.1/bin:${PATH-}"
# Clang does not inject RPATHs to the standard library in use:
export LD_LIBRARY_PATH="/sw/stretch-x64/gcc/gcc-6.3.0/lib64:${LD_LIBRARY_PATH-}"
CC=clang
CXX=clang++
FC=gfortran
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/openmpi-4.1.1-6ydagyy/bin:${PATH-}"
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun) --oversubscribe"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/netcdf-c-4.8.0-z6r5guk'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/scales-ppm-1.0.7-5mhatgx'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/yaxt-0.9.2.1-cj2nf5j'
UUID_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libuuid-1.0.3-rm4kv2o'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/clang-12.0.1-sandybridge/hdf5-1.10.7-4y54xnh'
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${HDF5_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with NAG 6.2.6223.
#
init_nag626223 ()
{
init_env
switch_for_module gcc/6.3.0 nag/6.2
CC=gcc
CXX=g++
FC=nagfor
export PATH="/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/mpich-3.4.2-fzsvtw2/bin:${PATH-}"
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/eccodes-2.21.0-3sdngaq'
NETCDF_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/netcdf-c-4.8.0-ogawg3w'
PPM_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/scales-ppm-1.0.7-5kdlwzv'
YAXT_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/yaxt-0.9.2.1-rhq2ysn'
UUID_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/gcc-6.3.0-sandybridge/libuuid-1.0.3-rm4kv2o'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
HDF5_ROOT='/data/mpi/sclab/sip/m300488/libcdi-ci-sw/nag-6.2-sandybridge/hdf5-1.10.7-pltg3k4'
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib:${HDF5_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Accepts a path to a file containing the testsuite summary (either the
# 'test-suite.log' or the standard output of the 'make check' command) and
# checks whether all tests were run and passed.
#
check_all_tests_passed ()
{
awk '/SKIP: /{
print "ERROR: the total number of tests is not equal to the number of passed tests";
exit 1;
}' $1 >&2
}
#
# Checks whether the current working directory or any of its subdirectories
# contain a file and fails with an error message if that is the case.
#
check_no_files_in_cwd ()
{
cnfic_files=`find . -type f 2>/dev/null`
if test -n "$cnfic_files"; then
{
echo "ERROR: the current working directory contains undeleted files:"
echo "$cnfic_files"
} >&2
exit 1
fi
}
......@@ -39,10 +39,30 @@ switch_for_module ()
# Add the short name of the module to the list of conflicts:
sfm_conflicts="$sfm_conflicts $sfm_module_short"
# On a Cray system, it is important that only one PrgEnv module is loaded at
# a time. This is normally covered with the mutual conflict statements in
# the respective module files. However, that is not always the case,
# therefore we introduce an additional protection against two or more PrgEnv
# modules being loaded simultaneously: if the module we are asked to switch
# for starts with PrgEnv-, each of the loaded modules that starts with
# PrgEnv- too is added to the list of conflicts:
case $sfm_module_short in
PrgEnv-*)
for sfm_loaded in $sfm_loaded_short; do
case $sfm_loaded in
PrgEnv-*)
sfm_conflicts="$sfm_conflicts $sfm_loaded" ;;
*) ;;
esac
done
;;
*) ;;
esac
# A list of loaded modules that are in conflict with the requested module:
sfm_loaded_conflicts=
for sfm_conflict in $sfm_conflicts""; do
sfm_loaded_list=
sfm_loaded_list=
case $sfm_conflict in
*/*)
# The conflict is specified with the version part:
......@@ -89,69 +109,6 @@ switch_for_module ()
done
}
#
# Initializes the environment.
#
init_env ()
{
:
}
#
# Sets variables for tests with GCC 11.2.0.
#
init_gcc1120 ()
{
init_env
switch_for_module gcc/11.2.0-gcc-11.2.0 openmpi/4.1.2-gcc-11.2.0
CC=gcc
CXX=g++
FC=gfortran
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/sw/spack-levante/eccodes-2.21.0-4ywkk4'
NETCDF_ROOT='/sw/spack-levante/netcdf-c-4.8.1-6qheqr'
PPM_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/ppm-1.0.8-gcc-11.2.0'
YAXT_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/yaxt-0.9.3-gcc-11.2.0'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with Intel Classic 2021.5.0.
#
init_intelclassic202150 ()
{
init_env
# Try to make sure that the compiler works with the system gcc:
module unload gcc
# For whatever reason, Intel Classic 2021.5.0 is enabled with
# intel-oneapi-compilers/2022.0.1-gcc-11.2.0:
switch_for_module intel-oneapi-compilers/2022.0.1-gcc-11.2.0 openmpi/4.1.2-intel-2021.5.0
AR=xiar
CC=icc
CXX=icpc
FC=ifort
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/sw/spack-levante/eccodes-2.21.0-3ehkbb'
NETCDF_ROOT='/sw/spack-levante/netcdf-c-4.8.1-2k3cmu'
PPM_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/ppm-1.0.8-intel-classic-2021.5.0'
YAXT_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/yaxt-0.9.3-intel-classic-2021.5.0'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Accepts a path to a file containing the testsuite summary (either the
# 'test-suite.log' or the standard output of the 'make check' command) and
......@@ -159,9 +116,13 @@ init_intelclassic202150 ()
#
check_all_tests_passed ()
{
awk '/SKIP: /{
print "ERROR: the total number of tests is not equal to the number of passed tests";
exit 1;
awk '/^# TOTAL: /{ total=$3 };
/^# PASS: /{ pass=$3 };
END {
if ( total == "" || total != pass ) {
print "ERROR: the total number of tests is not equal to the number of passed tests";
exit 1;
}
}' $1 >&2
}
......@@ -173,10 +134,32 @@ check_no_files_in_cwd ()
{
cnfic_files=`find . -type f 2>/dev/null`
if test -n "$cnfic_files"; then
{
echo "ERROR: the current working directory contains undeleted files:"
echo "$cnfic_files"
} >&2
cat >&2 <<_EOF
ERROR: the current working directory contains undeleted files:
$cnfic_files
Update the respective distclean recipes.
_EOF
exit 1
fi
}
#
# Checks whether the building has generated any git-untracked files and fails if
# it has.
#
check_no_git_untracked ()
{
cngu_files=`git ls-files --other --exclude-standard`
if test -n "${cngu_files}"; then
cat >&2 <<_EOF
ERROR: the building process generated untracked files in the repository:
$cngu_files
Update '.gitignore'.
_EOF
exit 1
fi
}
#
# Accepts a list of environment modules and loads them witch conflict
# resolution.
#
switch_for_module ()
{
for sfm_module in "$@"; do
sfm_module_full=
sfm_module_short=
case $sfm_module in
*/*)
# The module is provided with the version part:
sfm_module_full=$sfm_module
sfm_module_short=`echo $sfm_module | sed 's%/[^/]*$%%'` ;;
*)
# Only the name of the module is provided, get the default version:
sfm_module_full=`module show $sfm_module 2>&1 | sed -n "s%^[^ \t]*/\\($sfm_module.*\\):%\\1%p"`
sfm_module_short=$sfm_module ;;
esac
# A space-separated list of modules that are already loaded:
sfm_loaded_full=`module -t list 2>&1 | tr '\n' ' ' | sed 's/^.*Modulefiles://' | sed 's/(default)//g'`
# Check whether the requested module if already loaded:
if test -n "$sfm_module_full"; then
case " $sfm_loaded_full " in
*" $sfm_module_full "*)
echo "module $sfm_module is already loaded"
continue ;;
esac
fi
# A list of modules in conflict:
sfm_conflicts=`module show $sfm_module 2>&1 | sed -n 's/^conflict\(.*\)/\1/p' | tr '\n\t' ' '`
# A list of loaded modules without version parts:
sfm_loaded_short=`echo "$sfm_loaded_full" | sed 's%\([^ ][^ ]*\)/[^ ]*%\1%g'`
# Add the short name of the module to the list of conflicts:
sfm_conflicts="$sfm_conflicts $sfm_module_short"
# A list of loaded modules that are in conflict with the requested module:
sfm_loaded_conflicts=
for sfm_conflict in $sfm_conflicts""; do
sfm_loaded_list=
case $sfm_conflict in
*/*)
# The conflict is specified with the version part:
sfm_loaded_list=$sfm_loaded_full ;;
*)
# The conflict is specified without the version part:
sfm_loaded_list=$sfm_loaded_short ;;
esac
# Check that the conflicted module is loaded:
case " $sfm_loaded_list " in
*" $sfm_conflict "*)
# The conflict is loaded, check whether it is already added to the
# list:
case " $sfm_loaded_conflicts " in
*" $sfm_conflict "*) ;;
*)
# The conflict is not in the list, append:
sfm_loaded_conflicts="$sfm_loaded_conflicts $sfm_conflict" ;;
esac
;;
esac
done
# Calculate the number of modules that must be unloaded to before loading
# the requested module:
sfm_loaded_conflicts_count=`echo $sfm_loaded_conflicts | wc -w`
case $sfm_loaded_conflicts_count in
0)
# None of the conflicting modules is loaded:
sfm_cmd="module load $sfm_module" ;;
1)
# There is only one module that must be unloaded, use switch command:
sfm_cmd="module switch $sfm_loaded_conflicts $sfm_module" ;;
*)
# There is more than one module that must be unloaded, unload all of
# them and then load the requested one:
sfm_cmd="module unload $sfm_loaded_conflicts && module load $sfm_module" ;;
esac
echo "$sfm_cmd"
eval "$sfm_cmd"
done
}
# Initialize utility functions:
. "$(cd "$(dirname "${BASH_SOURCE}")"; pwd)/../common_utils.sh"
#
# Initializes the environment.
......@@ -101,9 +13,9 @@ init_env ()
}
#
# Sets variables for tests with Cray 12.0.3.
# Sets variables for tests with Cray.
#
init_cray1203 ()
init_cray ()
{
init_env
switch_for_module craype PrgEnv-cray cce/12.0.3 cray-mpich
......@@ -125,15 +37,15 @@ init_cray1203 ()
PPM_ROOT='/project/d56/libcdi-ci-sw/cce-12.0.3-haswell/scales-ppm-1.0.8-44zlrlu'
YAXT_ROOT='/project/d56/libcdi-ci-sw/cce-12.0.3-haswell/yaxt-0.9.2.1-enz3pcz'
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
# The installations of ecCodes, PPM and YAXT do not provide '*.la' files,
# which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${PPM_ROOT}/lib:${YAXT_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with PGI 20.1.1.
# Sets variables for tests with PGI.
#
init_pgi2011 ()
init_pgi ()
{
init_env
# We use deprecated versions (the most recent compatible with PGI though) of
......@@ -163,20 +75,7 @@ init_pgi2011 ()
# search path:
export LD_LIBRARY_PATH="${MPICH_DIR}/lib:${NETCDF_DIR}/lib:${HDF5_DIR}/lib:${LD_LIBRARY_PATH-}"
# Here we fix a never-ending story with Libtool overlinkning, absence of
# '*.la' files when they could help, and '-Wl,--disable/enable-new-dtags':
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${PPM_ROOT}/lib:${YAXT_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Accepts a path to a file containing the testsuite summary (either the
# 'test-suite.log' or the standard output of the 'make check' command) and
# checks whether all tests were run and passed.
#
check_all_tests_passed ()
{
awk '/SKIP: /{
print "ERROR: the total number of tests is not equal to the number of passed tests";
exit 1;
}' $1 >&2
# The installations of ecCodes, PPM and YAXT do not provide '*.la' files,
# which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${PPM_ROOT}/lib:${YAXT_ROOT}/lib:${LD_LIBRARY_PATH}"
}
......@@ -6,8 +6,8 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_cray1203
. "${script_dir}/init.sh"
init_cray
# Save time for the person running this script manually:
if test "x${PE_NETCDF_MODULE_NAME}" = 'xcray-netcdf'; then
......@@ -18,7 +18,13 @@ if test "x${PE_NETCDF_MODULE_NAME}" = 'xcray-netcdf'; then
esac
fi
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
# The configure script does not check the 'lib64' subdirectory, therefore we
# run it with '--with-eccodes' and the following flags. Note that fixing this
......@@ -31,16 +37,17 @@ CPPFLAGS="-I${ECCODES_ROOT}/include"
LDFLAGS="-L${ECCODES_ROOT}/lib64"
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-cf-interface \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--enable-ppm-dist-array \
--with-concurrent-mpi-checks \
--with-eccodes \
--with-netcdf \
CC="${CC}" \
CPPFLAGS="${CPPFLAGS}" \
F77="${FC}" \
FC="${FC}" \
LDFLAGS="${LDFLAGS}" \
MPI_LAUNCH="${MPI_LAUNCH}" \
......@@ -48,6 +55,10 @@ PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig:${PKG_CONF
make -j8
make -j8 check | tee tests/test-suite.log
# Run with '-j' to submit as many MPI jobs as possible
# (see '--with-concurrent-mpi-checks'):
make -j check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
......@@ -6,8 +6,8 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_pgi2011
. "${script_dir}/init.sh"
init_pgi
# Save time for the person running this script manually:
if test "x${PE_NETCDF_MODULE_NAME}" = 'xcray-netcdf'; then
......@@ -18,7 +18,13 @@ if test "x${PE_NETCDF_MODULE_NAME}" = 'xcray-netcdf'; then
esac
fi
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
# The configure script does not check the 'lib64' subdirectory, therefore we
# run it with '--with-eccodes' and the following flags. Note that fixing this
......@@ -31,19 +37,18 @@ CPPFLAGS="-I${ECCODES_ROOT}/include"
LDFLAGS="-L${ECCODES_ROOT}/lib64"
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-cf-interface \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--enable-ppm-dist-array \
--with-concurrent-mpi-checks \
--with-eccodes \
--with-netcdf \
CC="${CC}" \
CFLAGS='-g -O1' \
CPPFLAGS="${CPPFLAGS}" \
F77="${FC}" \
FC="${FC}" \
FCFLAGS='-g -fPIC' \
LDFLAGS="${LDFLAGS}" \
MPI_LAUNCH="${MPI_LAUNCH}" \
PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig:${PKG_CONFIG_PATH}" \
......@@ -51,6 +56,10 @@ PTHREAD_LIBS='-lpthread'
make -j8
make -j8 check | tee tests/test-suite.log
# Run with '-j' to submit as many MPI jobs as possible
# (see '--with-concurrent-mpi-checks'):
make -j check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
# Initialize utility functions:
. "$(cd "$(dirname "${BASH_SOURCE}")"; pwd)/../common_utils.sh"
#
# Initializes the environment.
#
init_env ()
{
switch_for_module ruby/3.0.2-gcc-11.2.0
}
#
# Sets variables for tests with GCC.
#
init_gcc ()
{
init_env
switch_for_module gcc/11.2.0-gcc-11.2.0 openmpi/4.1.2-gcc-11.2.0
CC=gcc
CXX=g++
FC=gfortran
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/sw/spack-levante/eccodes-2.21.0-4ywkk4'
NETCDF_ROOT='/sw/spack-levante/netcdf-c-4.8.1-6qheqr'
PPM_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/ppm-1.0.8-gcc-11.2.0'
YAXT_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/yaxt-0.9.3-gcc-11.2.0'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
#
# Sets variables for tests with Intel Classic.
#
init_intelclassic ()
{
init_env
# Try to make sure that the compiler works with the system gcc:
module unload gcc
# For whatever reason, Intel Classic 2021.5.0 is enabled with
# intel-oneapi-compilers/2022.0.1-gcc-11.2.0:
switch_for_module intel-oneapi-compilers/2022.0.1-gcc-11.2.0 openmpi/4.1.2-intel-2021.5.0
AR=xiar
CC=icc
CXX=icpc
FC=ifort
MPICC=mpicc
MPIFC=mpif90
MPI_LAUNCH="$(which mpirun)"
ECCODES_ROOT='/sw/spack-levante/eccodes-2.21.0-3ehkbb'
NETCDF_ROOT='/sw/spack-levante/netcdf-c-4.8.1-2k3cmu'
PPM_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/ppm-1.0.8-intel-classic-2021.5.0'
YAXT_ROOT='/work/mh0287/m300488/libcdi-ci-sw/install/yaxt-0.9.3-intel-classic-2021.5.0'
# The installations of NetCDF and ecCodes libraries do not provide '*.la'
# files, which would trigger the RPATH injection:
export LD_LIBRARY_PATH="${ECCODES_ROOT}/lib64:${NETCDF_ROOT}/lib:${LD_LIBRARY_PATH-}"
}
......@@ -6,10 +6,16 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_gcc1120
. "${script_dir}/init.sh"
init_gcc
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
# The configure script does not check the 'lib64' subdirectory, therefore we
# run it with '--with-eccodes' and the following flags. Note that fixing this
......@@ -26,15 +32,14 @@ LDFLAGS="-L${ECCODES_ROOT}/lib64"
# 'check_all_tests_passed' that we run at the end makes sure that the options
# have been enabled and the corresponding tests have not been skipped.
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--with-eccodes \
--with-netcdf="${NETCDF_ROOT}" \
CC="${MPICC}" \
CPPFLAGS="${CPPFLAGS}" \
F77="${MPIFC}" \
FC="${MPIFC}" \
LDFLAGS="${LDFLAGS}" \
MPI_LAUNCH="${MPI_LAUNCH}" \
......@@ -42,6 +47,8 @@ PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig"
make -j8
make -j8 check | tee tests/test-suite.log
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
......@@ -6,10 +6,16 @@ set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_intelclassic202150
. "${script_dir}/init.sh"
init_intelclassic
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only:
enable_maintainer_mode='yes'
fi
# Create a subdirectory for building and switch to it:
mkdir build && cd build
......@@ -25,9 +31,9 @@ CPPFLAGS="-I${ECCODES_ROOT}/include"
LDFLAGS="-L${ECCODES_ROOT}/lib64"
"${top_srcdir}/configure" \
--disable-maintainer-mode \
--enable-cf-interface \
--enable-iso-c-interface \
--enable-maintainer-mode="${enable_maintainer_mode}" \
--enable-mpi \
--enable-option-checking=fatal \
--with-eccodes \
......@@ -40,12 +46,21 @@ LDFLAGS="${LDFLAGS}" \
MPI_LAUNCH="${MPI_LAUNCH}" \
PKG_CONFIG_PATH="${YAXT_ROOT}/lib/pkgconfig:${PPM_ROOT}/lib/pkgconfig"
# Check whether the configure script removed the '.libs' directory:
test -e .libs && echo "ERROR: the configure script did not remove directory '.libs'" && exit 1
make -j8
make -j8 check | tee tests/test-suite.log
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
make -j8 distclean
if test "x${enable_maintainer_mode}" = 'xyes'; then
make -j8 maintainer-clean
else
make -j8 distclean
fi
check_no_files_in_cwd
cd "${top_srcdir}" && check_no_git_untracked
#!/bin/bash
echo "WARNING: the current version of CDI-PIO is incompatible with the build system if ICON" >&2
exit 0
set -eu
set -o pipefail
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/init.sh"
init_intelclassic
# The following compiler flags are used by the respective ICON configure
# wrapper. They are not set into stone and can be changed if needed. It is just
# important to keep them the same as in the wrapper.
CFLAGS='-g -gdwarf-4 -qno-opt-dynamic-align -m64 -march=core-avx2 -mtune=core-avx2 -m64 -march=core-avx2 -mtune=core-avx2 -fma -ip -pc64 -std=gnu99 -O2 -ftz'
FCFLAGS='-m64 -march=core-avx2 -mtune=core-avx2 -g -gdwarf-4 -pc64 -fp-model source -O3 -ftz -qoverride-limits -assume realloc_lhs -align array64byte -fma -ip'
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only. Therefore,
# we have to generate them before testing:
"${top_srcdir}/configure" --enable-maintainer-mode && make -C src mo_cdi.f90 cdi.inc cdipio.inc && make distclean
fi
# Make sure that the libtool script has a chance to erroneously link to the
# shared versions of YAXT and PPM:
for file in \
"${PPM_ROOT}/lib/libscalesppmcore.so" \
"${YAXT_ROOT}/lib/libyaxt.so" \
"${YAXT_ROOT}/lib/libyaxt_c.so"; do
test -r "${file}" || {
echo "ERROR: file '${file}' not found" >&2
exit 1
}
done
# When configured as part of ICON, C headers, Fortran modules and library files
# of YAXT and PPM become available only at the build time. We mock that by
# creating two empty directories for YAXT and PPM before running the configure
# script of CDI and copy the required files into them before running make:
LOCAL_YAXT_ROOT="$(pwd)/build/cdi-test-yaxt"
LOCAL_PPM_ROOT="$(pwd)/build/cdi-test-ppm"
rm -rf "${LOCAL_YAXT_ROOT}" "${LOCAL_PPM_ROOT}"
mkdir -p "${LOCAL_YAXT_ROOT}" "${LOCAL_PPM_ROOT}"
# Make sure that CDI gets linked to the right instances of YAXT even if certain
# environment variables and linker flags point to the wrong existing instance:
WRONG_YAXT_LIBDIR="$(init_gcc >/dev/null && echo "${YAXT_ROOT}")/lib"
for file in \
"${WRONG_YAXT_LIBDIR}/libyaxt.la" \
"${WRONG_YAXT_LIBDIR}/libyaxt_c.la" \
"${WRONG_YAXT_LIBDIR}/pkgconfig/yaxt.pc" \
"${WRONG_YAXT_LIBDIR}/pkgconfig/yaxt_c.pc"; do
test -f "${file}" || {
echo "ERROR: file '${file}' not found" >&2
exit 1
}
done
export PKG_CONFIG_PATH="${WRONG_YAXT_LIBDIR}/pkgconfig"
export LD_LIBRARY_PATH="${WRONG_YAXT_LIBDIR}:${LD_LIBRARY_PATH-}"
LDFLAGS="-L${WRONG_YAXT_LIBDIR}"
# There is no way for the configure script of ICON to provide the configure
# script of CDI with the path to the installation of NetCDF in use. Here we
# imitate a situation when 'nc-config' from another (wrong) installation of
# NetCDF is in the ${PATH}.
WRONG_NETCDF_ROOT=$(init_gcc >/dev/null && echo "${NETCDF_ROOT}")
WRONG_NETCDF_BINDIR="${WRONG_NETCDF_ROOT}/bin"
# It looks like we cannot properly check whether the wrong 'nc-config' in the
# ${PATH} causes any inconsistency. All we can do is run a not very reliable
# indirect check of whether CDI gets built without the unwanted dependency on
# cURL:
nc_has_dap=`"${WRONG_NETCDF_BINDIR}/nc-config" --has-dap` || {
echo "ERROR: failed to check whether NetCDF in '${WRONG_NETCDF_ROOT}' is built with DAP support" >&2
exit 1
}
test "x${nc_has_dap}" = 'xyes' || {
echo "ERROR: NetCDF in '${WRONG_NETCDF_ROOT}' is built without DAP support" >&2
exit 1
}
export PATH="${WRONG_NETCDF_BINDIR}:${PATH-}"
"${top_srcdir}/configure" \
--disable-across \
--disable-cdi-app \
--disable-maintainer-mode \
--disable-openmp \
--disable-python-interface \
--disable-ruby-interface \
--disable-shared \
--enable-cf-interface=yes \
--enable-cgribex \
--enable-grib \
--enable-iso-c-interface \
--enable-mpi=yes \
--enable-ppm-dist-array=yes \
--enable-silent-rules=yes \
--enable-static \
--with-eccodes=yes \
--with-netcdf \
--with-on-demand-check-programs \
--without-dce-uuid \
--without-example-programs \
--without-fdb5 \
--without-grib_api \
--without-ossp-uuid \
--without-szlib \
--without-threads \
--without-util-linux-uuid \
AR="${AR}" \
BUILD_CC= \
BUILD_CFLAGS= \
BUILD_CXX= \
BUILD_F77= \
BUILD_FC= \
BUILD_FCFLAGS= \
BUILD_LDFLAGS= \
BUILD_LIBS= \
BUILD_MPI_C_LIB= \
BUILD_MPI_FC_LIB= \
CC="${MPICC}" \
CFLAGS="${CFLAGS}" \
CPPFLAGS="-I${NETCDF_ROOT}/include -I${ECCODES_ROOT}/include" \
CXX=no \
DCE_UUID_C_INCLUDE= \
DCE_UUID_C_LIB= \
F77=no \
FC="${MPIFC}" \
FCFLAGS="${FCFLAGS}" \
LDFLAGS="${LDFLAGS} -L${NETCDF_ROOT}/lib -L${ECCODES_ROOT}/lib64" \
LIBS='-Wl,--disable-new-dtags -Wl,--as-needed -lnetcdf -leccodes' \
MPIROOT= \
MPI_C_INCLUDE= \
MPI_C_LIB= \
MPI_FC_LIB= \
MPI_FC_MOD= \
MPI_LAUNCH="${MPI_LAUNCH}" \
OSSP_UUID_C_INCLUDE= \
OSSP_UUID_C_LIB= \
PKG_CONFIG= \
PPM_CORE_C_INCLUDE= \
PPM_CORE_C_LIB= \
UTIL_LINUX_UUID_C_INCLUDE= \
UTIL_LINUX_UUID_C_LIB= \
YAXT_C_INCLUDE= \
YAXT_C_LIB= \
YAXT_FC_LIB= \
YAXT_FC_MOD= \
ac_cv_header_ppm_dist_array_h=yes \
acx_cv_c_include_ppm_ppm_h="-I${LOCAL_PPM_ROOT}/include" \
acx_cv_c_include_yaxt_h="-I${LOCAL_YAXT_ROOT}/include" \
acx_cv_fortran_mod_yaxt="-I${LOCAL_YAXT_ROOT}/include" \
acx_cv_have_libnc_dap=no \
acx_cv_have_nc4hdf5=no \
acx_cv_have_netcdf2=yes \
acx_cv_have_netcdf4=yes \
acx_cv_have_pnetcdf=no \
acx_cv_option_search_PPM_initialize_c="${LOCAL_PPM_ROOT}/lib/libscalesppmcore.la" \
acx_cv_option_search_xt_initialized_c="${LOCAL_YAXT_ROOT}/lib/libyaxt_c.la" \
acx_cv_option_search_xt_initialized_fc="${LOCAL_YAXT_ROOT}/lib/libyaxt.la ${LOCAL_YAXT_ROOT}/lib/libyaxt_c.la"
# Create local copies of YAXT and PPM and make them similar to what they look like
# when the libraries are built inside the build system of ICON:
rsync -uavz "${YAXT_ROOT}/" "${LOCAL_YAXT_ROOT}/" --exclude='*.pc' --exclude='*.so' --exclude='*.so.*'
rsync -uavz "${PPM_ROOT}/" "${LOCAL_PPM_ROOT}/" --exclude='*.pc' --exclude='*.so' --exclude='*.so.*'
sed -i -E -e "{
# The build system of ICON disables the shared versions of the libraries
# (i.e. configures them with '--disable-shared'):
s/^dlname=.*/dlname=''/
s/^library_names=.*/library_names=''/
# The linking to the libraries is done without installing them:
s/^installed=.*/installed=no/
}" `find "${LOCAL_YAXT_ROOT}" "${LOCAL_PPM_ROOT}" -name '*.la'`
make -j8
# The current general approach in the build system of ICON is to avoid building
# the shared versions of the bundled libraries and link to the static ones
# without -L and -l flags. Instead, to avoid possible ambiguity, the linking is
# done by passing paths to static library as positional arguments for the
# linker. That, however, does not work well with libtool scripts as they inject
# all files referred by the positional arguments into the generated static
# libraries (archives). That is usually fine with the GNU linker but is a
# problem for the MacOS one, which might ignore the whole library file:
# ld: warning: ignoring file libcdipio.a, building for macOS-x86_64 but attempting to link with file built for macOS-x86_64
# To circumvent the problem, we tell the configure of CDI to link to YAXT and
# PPM using libtool .la files and check that libcdipio.a does not contain any
# other archive files, which the linker might potentially not be able to handle:
tested_file='src/.libs/libcdipio.a'
invalid_entries=`ar t "${tested_file}" | sed -n '/\.a$/p'` || {
echo "ERROR: failed to check $1 for invalid entries" >&2
exit 1
}
if test -n "${invalid_entries}"; then
{
echo "ERROR: '${tested_file}' has invalid entries:" >&2
echo "${invalid_entries}" >&2
} >&2
exit 1
fi
make -j8 check TESTS= XFAIL_TESTS=
# Check that a test program is linked to YAXT and PPM statically as it should
# when built inside the build system of ICON:
tested_file='tests/pio_write.parallel'
invalid_deps=`ldd "${tested_file}" | sed -E -n '/libscalesppmcore|libyaxt/p'` || {
echo "ERROR: failed to check '${tested_file}' for invalid dependencies" >&2
exit 1
}
if test -n "${invalid_deps}"; then
{
echo "ERROR: '${tested_file}' has invalid dependencies:" >&2
echo "${invalid_deps}" >&2
} >&2
exit 1
fi
# Check that we do not link to the instance of YAXT from ${WRONG_YAXT_LIBDIR}
# (we might fail earlier if ${WRONG_YAXT_LIBDIR} contains the shared version of
# the library):
make -C examples/pio collectData2003.parallel
# Check whether CDI is built without the unwanted dependency on cURL:
tested_file='./app/cdi'
cdi_features=`"${tested_file}" -d 2>&1 | grep '^Features: '` || {
echo "ERROR: failed to get the expected debug output from '${tested_file}'" >&2
exit 1
}
case " ${cdi_features} " in
*' OPeNDAP '*)
echo "ERROR: CDI is built with the unwanted dependency on cURL (i.e. OPeNDAP support is enabled)" 2>&1
exit 1 ;;
esac
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_all_tests_passed tests/test-suite.log
check_no_git_untracked
......@@ -5,8 +5,8 @@ set -eu
script_dir=$(cd "$(dirname "$0")"; pwd)
top_srcdir=$(cd "${script_dir}/../../.."; pwd)
. "${script_dir}/utils.sh"
init_gcc1120
. "${script_dir}/init.sh"
init_gcc
# The following compiler flags are used by the respective ICON configure
# wrapper. They are not set into stone and can be changed if needed. It is just
......@@ -14,11 +14,21 @@ init_gcc1120
CFLAGS='-g -gdwarf-4 -march=native -mpc64 -O2'
FCFLAGS='-fmodule-private -fimplicit-none -fmax-identifier-length=63 -Wall -Wcharacter-truncation -Wconversion -Wunderflow -Wunused-parameter -Wno-surprising -fall-intrinsics -g -march=native -mpc64 -fbacktrace -fbounds-check -fstack-protector-all -finit-real=nan -finit-integer=-2147483648 -finit-character=127 -O2 -std=f2008'
test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
if test ! -f "${top_srcdir}/configure"; then
"${top_srcdir}/autogen.sh"
# If there is no configure script, there are, most probably, no Fortran
# interface files, which are generated in the maintainer mode only. Therefore,
# we have to generate them before testing:
"${top_srcdir}/configure" --enable-maintainer-mode && make -C src mo_cdi.f90 && make distclean
fi
"${top_srcdir}/configure" \
--disable-across \
--disable-cdi-app \
--disable-maintainer-mode \
--disable-openmp \
--disable-python-interface \
--disable-ruby-interface \
--disable-shared \
--enable-cf-interface=no \
--enable-cgribex \
......@@ -26,15 +36,19 @@ test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
--enable-iso-c-interface \
--enable-mpi=no \
--enable-ppm-dist-array=no \
--enable-silent-rules=no \
--enable-silent-rules=yes \
--enable-static \
--with-eccodes=yes \
--with-netcdf \
--with-on-demand-check-programs \
--without-dce-uuid \
--without-example-programs \
--without-fdb5 \
--without-grib_api \
--without-ossp-uuid \
--without-szlib \
--without-threads \
--without-util-linux-uuid \
BUILD_CC= \
BUILD_CFLAGS= \
BUILD_CXX= \
......@@ -49,26 +63,30 @@ CC="${MPICC}" \
CFLAGS="${CFLAGS}" \
CPPFLAGS="-I${NETCDF_ROOT}/include -I${ECCODES_ROOT}/include" \
CXX=no \
DCE_UUID_C_INCLUDE= \
DCE_UUID_C_LIB= \
F77=no \
FC="${MPIFC}" \
FCFLAGS="${FCFLAGS}" \
LDFLAGS="-L${NETCDF_ROOT}/lib -L${ECCODES_ROOT}/lib64" \
LIBS='-leccodes -lnetcdf' \
LIBS='-Wl,--disable-new-dtags -Wl,--as-needed -leccodes -lnetcdf' \
MPIROOT= \
MPI_C_INCLUDE= \
MPI_C_LIB= \
MPI_FC_LIB= \
MPI_FC_MOD= \
MPI_LAUNCH="${MPI_LAUNCH}" \
OSSP_UUID_C_INCLUDE= \
OSSP_UUID_C_LIB= \
PKG_CONFIG= \
PPM_CORE_C_INCLUDE= \
PPM_CORE_C_LIB= \
UTIL_LINUX_UUID_C_INCLUDE= \
UTIL_LINUX_UUID_C_LIB= \
YAXT_C_INCLUDE= \
YAXT_C_LIB= \
YAXT_FC_LIB= \
YAXT_FC_MOD= \
ac_cv_func_uuid_create=no \
ac_cv_lib_uuid_uuid_generate=no \
acx_cv_have_libnc_dap=no \
acx_cv_have_nc4hdf5=no \
acx_cv_have_netcdf2=yes \
......@@ -77,4 +95,6 @@ acx_cv_have_pnetcdf=no
make -j8
make -j8 check
make -j8 check || { cat tests/test-suite.log; exit 1; }
check_no_git_untracked
# Autoreconf stage files:
/aclocal.m4
/autom4te.cache
/src/config.h.in~
# Distributed autoreconf stage files:
/aclocal.m4
/config/compile
/config/config.guess
/config/config.sub
......@@ -8,6 +11,8 @@
/config/install-sh
/config/ltmain.sh
/config/missing
/config/py-compile
/config/test-driver
/configure
/m4/libtool.m4
/m4/ltoptions.m4
......@@ -15,7 +20,6 @@
/m4/ltversion.m4
/m4/lt~obsolete.m4
/src/config.h.in
/src/config.h.in~
Makefile.in
# Configure stage files:
......@@ -24,61 +28,29 @@ Makefile.in
/config.log
/config.lt
/config.status
/examples/pio/collectData
/examples/pio/collectData.parallel
/interfaces/*.run
/libtool
/src/cmake/cdi/*.cmake
/src/config.h
/src/cmake/cdi-config-version.cmake
/src/cmake/cdi-config.cmake
/src/pkgconfig/cdi.pc
/src/pkgconfig/cdi_f2003.pc
/src/pkgconfig/cdipio.pc
/src/pkgconfig/*.pc
/src/stamp-h1
/tables/gen_tableheaderfile
/tests/*.log
/tests/pio_cksum_asynch
/tests/pio_cksum_cdf
/tests/pio_cksum_fpguard
/tests/pio_cksum_mpi_fw_at_all
/tests/pio_cksum_mpi_fw_at_reblock
/tests/pio_cksum_mpi_fw_ordered
/tests/pio_cksum_mpinonb
/tests/pio_cksum_writer
/tests/pio_write_deco2d_run
/tests/pio_write_run
/tests/test_byteswap_run
/tests/test_cdf_const
/tests/test_cdf_transformation
/tests/test_chunk_cksum
/tests/test_cksum_extra
/tests/test_cksum_grib
/tests/test_cksum_ieg
/tests/test_cksum_nc
/tests/test_cksum_nc2
/tests/test_cksum_nc4
/tests/test_cksum_service
/tests/test_f2003
/tests/test_resource_copy_mpi_run
/tests/test_resource_copy_run
/tests/test_table_run
/util/serialrun
/tests/*.run
/tests/test_cksum_base
Makefile
# Build stage files:
*.i
*.la
*.lo
*.mod
*.o
.libs
/a.out
.dirstamp
/*/**/.libs
/app/cdi
/app/createtable
/build
# Documentation stage files:
/doc/cdi_cman.pdf
/doc/cdi_fman.pdf
# Test stage files:
/examples/cdi_append
/examples/cdi_copy
/examples/cdi_read
......@@ -90,39 +62,69 @@ Makefile
/examples/cdi_write_hybrid
/examples/cdi_write_local
/examples/cdi_write_relativ
/examples/pio/collectData
/examples/pio/*.parallel.F90
/examples/pio/*.parallel.c
/examples/pio/collectData2003
/examples/pio/collectData2003.parallel
/examples/pio/collectDataNStreams
/examples/pio/collectDataNStreams.parallel
/examples/pio/compareResourcesArray
/interfaces/CdiInfo
/interfaces/python/Cdi.py
/interfaces/python/cdi_wrapper.cpp
/interfaces/ruby/cdi_wrapper.cpp
/src/cdi.inc
/src/cdiFortran.c
/src/cdipio.inc
/src/cdipioFortran.c
/src/make_fint
/src/mo_cdi.f90
/tests/*.parallel.c
/tests/calendar_test1
/tests/cksum_read
/tests/cksum_verify
/tests/cksum_write
/tests/cksum_write_chunk
/tests/example.cksum
/tests/example.ext
/tests/example.grb
/tests/example.ieg
/tests/example.nc
/tests/example.nc2
/tests/example.nc4
/tests/example.svc
/tests/example_0.cksum
/tests/example_0.grb
/tests/example_0.nc4
/tests/example_1.cksum
/tests/example_1.grb
/tests/example_1.nc4
/tests/pio_write
/tests/pio_write.parallel
/tests/pio_write_deco2d
/tests/pio_write_deco2d.parallel
/tests/test_byteswap
/tests/test_cdf_const.d
/tests/test_cdf_read
/tests/test_cdf_write
/tests/test_grib
/tests/test_month_adjust
/tests/test_resource_copy
/tests/test_resource_copy_mpi
/tests/test_resource_copy.parallel
/tests/test_table
# Test stage files:
/examples/**/*.grb
/examples/**/*.grb2
/examples/**/*.nc
/interfaces/*.log
/interfaces/*.trs
/interfaces/python/*.pyc
/interfaces/python/*.pyo
/interfaces/python/__pycache__
/tests/*.cksum
/tests/*.ext
/tests/*.grb
/tests/*.grb2
/tests/*.ieg
/tests/*.log
/tests/*.nc
/tests/*.nc2
/tests/*.nc4
/tests/*.srv
/tests/*.stderr
/tests/*.stdout
/tests/*.trs
# Documentation stage files:
/doc/cdi_cman.pdf
/doc/cdi_fman.pdf
# Dist stage files:
/cdi-*.tar.gz
/src/cdilib.c
......
2022-12-06 Uwe Schulzweida
* Version 2.1.1 released
2022-11-29 Uwe Schulzweida
* cdf_def_mapping: added support for datatype NC_STRING (bug fix)
2022-11-18 Uwe Schulzweida
* grid module: removed initialization of CDI_KEY_SCANNINGMODE (bug fix)
2022-11-16 Uwe Schulzweida
* cdf_read_xcoord: skip char coordinates only if ndims=1 (bug fix)
2022-11-13 Uwe Schulzweida
* Added interface function streamOpenReadQuery();
* Added module cdiQuery
2022-11-09 Uwe Schulzweida
* async_worker: removed syncronization at end of timesteps
2022-11-05 Uwe Schulzweida
* NetCDF output: added compression support for data on GRID_GENERIC
2022-10-19 Uwe Schulzweida
* Replaced CDI function vlistDefVarExtra() by cdiDefKeyString() with CDI_KEY_CHUNKS
* Replaced CDI function vlistInqVarExtra() by cdiInqKeyString() with CDI_KEY_CHUNKS
* Replaced CDI function vlistDefVarScalefactor() by cdiDefKeyFloat() with CDI_KEY_SCALEFACTOR
* Replaced CDI function vlistInqVarScalefactor() by cdiDefKeyFloat () with CDI_KEY_SCALEFACTOR
* Replaced CDI function vlistDefVarAddoffset() by cdiDefKeyFloat () with CDI_KEY_ADDOFFSET
* Replaced CDI function vlistInqVarAddoffset() by cdiDefKeyFloat () with CDI_KEY_ADDOFFSET
2022-10-17 Uwe Schulzweida
* Added environment variable CDI_SHUFFLE to set shuffle option to NetCDF4 deflation compression
2022-10-16 Uwe Schulzweida
* Improved read performance of temporal chunked NetCDF4 data
* Added environment variable CDI_CHUNK_CACHE to set the NetCDF4 chunk cache size
* Added environment variable CDI_CHUNK_CACHE_MAX to set the maximum chunk cache size
2022-10-14 Uwe Schulzweida
* NetCDF: reading of lower time bounds is wrong since 2.0.6 (bug fix)
2022-10-06 Uwe Schulzweida
* Version 2.1.0 released
......
## Process this file with automake to produce Makefile.in
#
SUBDIRS = src interfaces app examples examples/pio tests
#
EXTRA_DIST=config/default \
LICENSE \
doc/cdi_cman.pdf \
doc/cdi_fman.pdf \
src/cfortran.doc \
util/sunf95preproc-wrapper \
util/sxpreproc-wrapper \
util/xlfpreproc-wrapper \
config/interface.rb
#
SUBDIRS = src interfaces app examples tests
# The pdf files below cannot be created in parallel:
doc/cdi_cman.pdf: doc/cdi_fman.pdf
doc/cdi_cman.pdf:
$(AM_V_GEN)$(am__cd) $(top_srcdir)/doc/tex && ./makepdf_c && mv cdi_cman.pdf .. && ./cleanup
doc/cdi_fman.pdf:
$(AM_V_GEN)$(am__cd) $(top_srcdir)/doc/tex && ./makepdf_f && mv cdi_fman.pdf .. && ./cleanup
EXTRA_DIST = \
LICENSE \
config/interface.rb \
doc/cdi_cman.pdf \
doc/cdi_fman.pdf \
src/cfortran.doc
ACLOCAL_AMFLAGS = -I m4
#
CLEANFILES = `ls *~`
#
doc/cdi_cman.pdf:
(cd $(top_srcdir)/doc/tex ; ./makepdf_c ; mv cdi_cman.pdf .. ; ./cleanup)
#
doc/cdi_fman.pdf:
(cd $(top_srcdir)/doc/tex ; ./makepdf_f ; mv cdi_fman.pdf .. ; ./cleanup)
CDI NEWS
--------
Version 2.1.0 (6 October 2021):
Version 2.2.0 (6 October 2023):
New features:
* Improved read performance of temporal chunked NetCDF4 data
New interface function
* streamOpenReadQuery()
Fixed bugs:
Version 2.1.0 (6 October 2022):
New features:
* Added support for NCZarr
......