Skip to content
Snippets Groups Projects
Commit 7aa6b506 authored by Sergey Kosukhin's avatar Sergey Kosukhin
Browse files

Update CI scripts.

parent 8be844a9
No related branches found
No related tags found
2 merge requests!34Version 2.2.0,!13Consolidation with CDI-PIO (develop)
Showing
with 963 additions and 406 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,14 +6,17 @@ 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
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
......@@ -29,18 +32,19 @@ fi
--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,8 +6,8 @@ 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"
......@@ -15,18 +15,18 @@ test -f "${top_srcdir}/configure" || "${top_srcdir}/autogen.sh"
"${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,8 +6,8 @@ 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
......@@ -18,11 +18,7 @@ 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" \
--enable-cf-interface \
......@@ -30,25 +26,23 @@ fi
--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
......@@ -60,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 ()
{
switch_for_module ruby/3.0.2-gcc-11.2.0
}
#
# 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
......@@ -42,11 +42,12 @@ LDFLAGS="-L${ECCODES_ROOT}/lib64"
--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}" \
......@@ -54,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
......@@ -42,14 +42,13 @@ LDFLAGS="-L${ECCODES_ROOT}/lib64"
--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}" \
......@@ -57,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,8 +6,8 @@ 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
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
......@@ -40,7 +40,6 @@ LDFLAGS="-L${ECCODES_ROOT}/lib64"
--with-netcdf="${NETCDF_ROOT}" \
CC="${MPICC}" \
CPPFLAGS="${CPPFLAGS}" \
F77="${MPIFC}" \
FC="${MPIFC}" \
LDFLAGS="${LDFLAGS}" \
MPI_LAUNCH="${MPI_LAUNCH}" \
......@@ -48,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,8 +6,8 @@ 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
enable_maintainer_mode='no'
if test ! -f "${top_srcdir}/configure"; then
......@@ -46,9 +46,12 @@ 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
......@@ -59,3 +62,5 @@ else
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
......@@ -23,8 +23,12 @@ if test ! -f "${top_srcdir}/configure"; then
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 \
......@@ -32,15 +36,19 @@ fi
--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= \
......@@ -55,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 \
......@@ -83,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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment