From 0ca8b53e6284dfce0681a962601d330ec1c63c77 Mon Sep 17 00:00:00 2001 From: he-zilong <159878975+he-zilong@users.noreply.github.com> Date: Mon, 9 Mar 2026 15:57:56 +0800 Subject: [PATCH] Toolchain: use new function to check filename and sha256sum of packages (#4909) --- tools/toolchain/install_cp2k_toolchain.sh | 45 +++++---- .../scripts/generate_cmake_options.sh | 2 +- tools/toolchain/scripts/get_openblas_arch.sh | 6 +- .../toolchain/scripts/stage0/install_cmake.sh | 6 +- tools/toolchain/scripts/stage0/install_gcc.sh | 9 +- .../toolchain/scripts/stage0/install_ninja.sh | 6 +- .../toolchain/scripts/stage1/install_mpich.sh | 6 +- .../scripts/stage1/install_openmpi.sh | 6 +- tools/toolchain/scripts/stage2/install_gmp.sh | 6 +- .../scripts/stage2/install_openblas.sh | 7 +- .../toolchain/scripts/stage3/install_fftw.sh | 6 +- .../scripts/stage3/install_greenx.sh | 6 +- .../scripts/stage3/install_libint.sh | 10 +- .../toolchain/scripts/stage3/install_libxc.sh | 6 +- .../toolchain/scripts/stage4/install_cosma.sh | 10 +- .../scripts/stage4/install_libxsmm.sh | 13 +-- .../scripts/stage4/install_scalapack.sh | 6 +- .../toolchain/scripts/stage5/install_elpa.sh | 7 +- tools/toolchain/scripts/stage6/install_ace.sh | 8 +- .../scripts/stage6/install_deepmd.sh | 8 +- tools/toolchain/scripts/stage6/install_gsl.sh | 8 +- .../scripts/stage6/install_libtorch.sh | 7 +- .../scripts/stage6/install_plumed.sh | 10 +- .../toolchain/scripts/stage7/install_hdf5.sh | 6 +- .../scripts/stage7/install_libsmeagol.sh | 6 +- .../scripts/stage7/install_libvdwxc.sh | 7 +- .../scripts/stage7/install_libvori.sh | 7 +- .../scripts/stage7/install_spglib.sh | 7 +- .../toolchain/scripts/stage8/install_dftd4.sh | 9 +- tools/toolchain/scripts/stage8/install_mcl.sh | 7 +- .../scripts/stage8/install_pugixml.sh | 7 +- .../scripts/stage8/install_sirius.sh | 7 +- .../toolchain/scripts/stage8/install_spfft.sh | 10 +- .../toolchain/scripts/stage8/install_spla.sh | 7 +- .../scripts/stage8/install_tblite.sh | 9 +- .../scripts/stage8/install_trexio.sh | 8 +- .../toolchain/scripts/stage9/install_dbcsr.sh | 6 +- tools/toolchain/scripts/tool_kit.sh | 93 +++++++++++-------- 38 files changed, 133 insertions(+), 267 deletions(-) diff --git a/tools/toolchain/install_cp2k_toolchain.sh b/tools/toolchain/install_cp2k_toolchain.sh index 7e83a91954..4fac4ef2ea 100755 --- a/tools/toolchain/install_cp2k_toolchain.sh +++ b/tools/toolchain/install_cp2k_toolchain.sh @@ -358,9 +358,6 @@ It should be safe to terminate running of this script in the middle of a build process. The script will know if a package has been successfully installed and will just carry on and recompile and install the last package it is working on. This is true even if you lose the content of the entire ./build directory. -However, if you terminate when downloading packages, you will have to delete the -incomplete tarball as toolchain don't check existing ones and will give error -due to failing to uncompress an incomplete tarball. Some packages are sensitive to the environment variables of their dependencies. Therefore, if you use --with-PKG_A=system but encounter an error indicating that @@ -402,36 +399,48 @@ some hints and observations that may be useful: LMod and Environment Modules. Users can load or unload modules to control active environment variables and paths in runtime without conflicts. It is recommended to check for available modules (with "module avail", "module - show" or similar commands) beforehand, and activate desired compatible - packages when running the toolchain script with "--with-PKG=system" options - to avoid repeated labour. + show" or similar commands) beforehand, and activate desired packages when + running the toolchain script with "--with-PKG=system" options so as to + avoid repeated labour. That said, actual compatibility between modules and + CP2K to be built may still take rounds of trial-and-error to confirm, and + resorting to "--with-PKG=install" can sometimes resolve problems if modules + turn out to be outdated, or compiled inconsistently, or not registering + complete variables and paths, or not built with GPU support on GPU machine, + etc. Please forward complaints about faulty modules to whoever responsible + for the server first before submitting any bug report to program developer. (4) If no internet connection is available for downloading packages from public resources on the server, an offline installation of toolchain and CP2K may be carried out by downloading all packages elsewhere, transferring them to server and placing them under the ./build directory. The toolchain script will not attempt to download packages if they are already present in the - build directory with filenames reflecting the correct versions. + build directory, with filenames and sha256sum strings matching the records. (5) An important common feature of clusters is the distinction of node types: "login node", where users log in and perform tasks with low workload; and "compute node", where resource-intensive computation jobs are carried out. They may be hosted on separate machines, and their hardware specifications (CPU, RAM, disk space, etc.) may be similar or different. Therefore, care - must be taken especially for the latter case; for instance, running - toolchain scripts on login node with "--target-cpu=native" (which is - default too if omitted) and executing CP2K on compute node afterwards may - result in poor performance or illegal instruction errors due to - discrepancies in CPU architectures and supported instruction sets, In this - case, the option with best portability for compiling programs at the cost - of reduced (non-optimal) performance is "--target-cpu=generic". + must be taken especially for the latter case. For instance, discrepancies + in CPU architectures and supported instruction sets may cause poor program + performance or illegal instruction errors if toolchain script is executed + on login node with "--target-cpu=native" (which is default too if omitted) + but CP2K is executed on compute node(s) afterwards. In this case, an option + "--target-cpu=generic" with best portability for compiling programs at the + cost of reduced (non-optimized) performance may be necessary. (6) Again, be careful about the environment if CP2K is to be executed with job submission scripts to the job queue system handling resource allocation. - Active environment variables and paths on the login node (by loading - modules, sourcing scripts, editing ~/.bashrc or /etc/profile files, etc.) - may NOT be active on the compute node where CP2K actually runs, unless all - appropriate commands are explicitly written in the job submission script. + Active environment variables and paths on the login node seen by user (by + loading modules, sourcing scripts, editing ~/.bashrc or /etc/profile files, + or entering commands interactively in general) may NOT be effective on the + compute node where CP2K actually runs, unless all appropriate commands are + written explicitly in the batch job submission script. For example, a + frequently encountered scenario with corrupted, interleaved output messages + stems from incorrect MPI library configuration launching multiple instances + of CP2K simultaneously instead of multi-process parallel execution of one + single instance; some possible culprits are that the ./install/setup file + is not sourced or the wrong module for MPI library is loaded at runtime. EOF } diff --git a/tools/toolchain/scripts/generate_cmake_options.sh b/tools/toolchain/scripts/generate_cmake_options.sh index 9f577a0766..7b38185d19 100755 --- a/tools/toolchain/scripts/generate_cmake_options.sh +++ b/tools/toolchain/scripts/generate_cmake_options.sh @@ -73,7 +73,7 @@ fi # ------------------------- if [ "${dry_run}" = "__TRUE__" ]; then cat << EOF -Suggested cmake command if toolchain is built with your options: +Suggested cmake command if toolchain is built with your options: cmake .. ${CMAKE_OPTIONS} EOF else diff --git a/tools/toolchain/scripts/get_openblas_arch.sh b/tools/toolchain/scripts/get_openblas_arch.sh index 8ad3031062..8afd5c6a88 100755 --- a/tools/toolchain/scripts/get_openblas_arch.sh +++ b/tools/toolchain/scripts/get_openblas_arch.sh @@ -35,11 +35,7 @@ echo "==================== Getting proc arch info using OpenBLAS tools ========= openblas_dir="$(find_openblas_dir)" # if cannot find openblas source dir, try download one if ! [ "$openblas_dir" ]; then - if [ -f ${openblas_pkg} ]; then - echo "${openblas_pkg} is found" - else - download_pkg_from_cp2k_org "${openblas_sha256}" "${openblas_pkg}" - fi + retrieve_package "${openblas_sha256}" "${openblas_pkg}" tar -xzf ${openblas_pkg} openblas_dir="$(find_openblas_dir)" fi diff --git a/tools/toolchain/scripts/stage0/install_cmake.sh b/tools/toolchain/scripts/stage0/install_cmake.sh index 44f1cb2209..8ec308be9c 100755 --- a/tools/toolchain/scripts/stage0/install_cmake.sh +++ b/tools/toolchain/scripts/stage0/install_cmake.sh @@ -47,11 +47,7 @@ case "${with_cmake}" in if verify_checksums "${install_lock_file}"; then echo "cmake-${cmake_ver} is already installed, skipping it." else - if [ -f cmake-${cmake_ver}-${cmake_arch}.${cmake_ext} ]; then - echo "cmake-${cmake_ver}-${cmake_arch}.${cmake_ext} is found" - else - download_pkg_from_cp2k_org "${cmake_sha256}" "cmake-${cmake_ver}-${cmake_arch}.${cmake_ext}" - fi + retrieve_package "${cmake_sha256}" "cmake-${cmake_ver}-${cmake_arch}.${cmake_ext}" echo "Installing from scratch into ${pkg_install_dir}" mkdir -p ${pkg_install_dir} if [ "${cmake_arch}" = "macos-universal" ]; then diff --git a/tools/toolchain/scripts/stage0/install_gcc.sh b/tools/toolchain/scripts/stage0/install_gcc.sh index 04e2b4fe7b..dba72141ec 100755 --- a/tools/toolchain/scripts/stage0/install_gcc.sh +++ b/tools/toolchain/scripts/stage0/install_gcc.sh @@ -30,15 +30,10 @@ case "${with_gcc}" in if verify_checksums "${install_lock_file}"; then echo "gcc-${gcc_ver} is already installed, skipping it." else - if [ -f gcc-${gcc_ver}.tar.gz ]; then - echo "gcc-${gcc_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${gcc_sha256}" "gcc-${gcc_ver}.tar.gz" - fi + retrieve_package "${gcc_sha256}" "gcc-${gcc_ver}.tar.gz" + echo "Installing GCC from scratch into ${pkg_install_dir}" [ -d gcc-${gcc_ver} ] && rm -rf gcc-${gcc_ver} tar -xzf gcc-${gcc_ver}.tar.gz - - echo "Installing GCC from scratch into ${pkg_install_dir}" cd gcc-${gcc_ver} # Download prerequisites from cp2k.org because gcc.gnu.org returns 403 when queried from GCP. diff --git a/tools/toolchain/scripts/stage0/install_ninja.sh b/tools/toolchain/scripts/stage0/install_ninja.sh index d9feac743e..6a21ebe398 100755 --- a/tools/toolchain/scripts/stage0/install_ninja.sh +++ b/tools/toolchain/scripts/stage0/install_ninja.sh @@ -29,11 +29,7 @@ case "${with_ninja}" in if verify_checksums "${install_lock_file}"; then echo "ninja-v${ninja_ver} is already installed, skipping it." else - if [ -f ninja-v${ninja_ver}.tar.gz ]; then - echo "ninja-v${ninja_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${ninja_sha256}" "ninja-v${ninja_ver}.tar.gz" - fi + retrieve_package "${ninja_sha256}" "ninja-v${ninja_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" mkdir -p ${pkg_install_dir} tar -xzf ninja-v${ninja_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage1/install_mpich.sh b/tools/toolchain/scripts/stage1/install_mpich.sh index 38f712f014..821e634c77 100755 --- a/tools/toolchain/scripts/stage1/install_mpich.sh +++ b/tools/toolchain/scripts/stage1/install_mpich.sh @@ -30,11 +30,7 @@ case "${with_mpich}" in if verify_checksums "${install_lock_file}"; then echo "mpich-${mpich_ver} is already installed, skipping it." else - if [ -f ${mpich_pkg} ]; then - echo "${mpich_pkg} is found" - else - download_pkg_from_cp2k_org "${mpich_sha256}" "${mpich_pkg}" - fi + retrieve_package "${mpich_sha256}" "${mpich_pkg}" echo "Installing from scratch into ${pkg_install_dir} for MPICH device ${MPICH_DEVICE}" [ -d mpich-${mpich_ver} ] && rm -rf mpich-${mpich_ver} tar -xzf ${mpich_pkg} diff --git a/tools/toolchain/scripts/stage1/install_openmpi.sh b/tools/toolchain/scripts/stage1/install_openmpi.sh index 2d07dcc856..aae060467e 100755 --- a/tools/toolchain/scripts/stage1/install_openmpi.sh +++ b/tools/toolchain/scripts/stage1/install_openmpi.sh @@ -30,11 +30,7 @@ case "${with_openmpi}" in if verify_checksums "${install_lock_file}"; then echo "openmpi-${openmpi_ver} is already installed, skipping it." else - if [ -f ${openmpi_pkg} ]; then - echo "${openmpi_pkg} is found" - else - download_pkg_from_cp2k_org "${openmpi_sha256}" "${openmpi_pkg}" - fi + retrieve_package "${openmpi_sha256}" "${openmpi_pkg}" echo "Installing from scratch into ${pkg_install_dir}" [ -d openmpi-${openmpi_ver} ] && rm -rf openmpi-${openmpi_ver} tar -xjf ${openmpi_pkg} diff --git a/tools/toolchain/scripts/stage2/install_gmp.sh b/tools/toolchain/scripts/stage2/install_gmp.sh index 56297e7fbf..7e1cdd0605 100755 --- a/tools/toolchain/scripts/stage2/install_gmp.sh +++ b/tools/toolchain/scripts/stage2/install_gmp.sh @@ -29,11 +29,7 @@ case "$with_gmp" in if verify_checksums "${install_lock_file}"; then echo "gmp-${gmp_ver} is already installed, skipping it." else - if [ -f gmp-${gmp_ver}.tar.gz ]; then - echo "gmp-${gmp_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${gmp_sha256}" "gmp-${gmp_ver}.tar.gz" - fi + retrieve_package "${gmp_sha256}" "gmp-${gmp_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d gmp-${gmp_ver} ] && rm -rf gmp-${gmp_ver} tar -xzf gmp-${gmp_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage2/install_openblas.sh b/tools/toolchain/scripts/stage2/install_openblas.sh index 734e241163..98f47c9070 100755 --- a/tools/toolchain/scripts/stage2/install_openblas.sh +++ b/tools/toolchain/scripts/stage2/install_openblas.sh @@ -29,12 +29,7 @@ case "${with_openblas}" in if verify_checksums "${install_lock_file}"; then echo "openblas-${openblas_ver} is already installed, skipping it." else - if [ -f ${openblas_pkg} ]; then - echo "${openblas_pkg} is found" - else - download_pkg_from_cp2k_org "${openblas_sha256}" "${openblas_pkg}" - fi - + retrieve_package "${openblas_sha256}" "${openblas_pkg}" echo "Installing from scratch into ${pkg_install_dir}" [ -d OpenBLAS-${openblas_ver} ] && rm -rf OpenBLAS-${openblas_ver} tar -zxf ${openblas_pkg} diff --git a/tools/toolchain/scripts/stage3/install_fftw.sh b/tools/toolchain/scripts/stage3/install_fftw.sh index cab7e8a0ac..b86effff1c 100755 --- a/tools/toolchain/scripts/stage3/install_fftw.sh +++ b/tools/toolchain/scripts/stage3/install_fftw.sh @@ -31,11 +31,7 @@ case "$with_fftw" in if verify_checksums "${install_lock_file}"; then echo "fftw-${fftw_ver} is already installed, skipping it." else - if [ -f ${fftw_pkg} ]; then - echo "${fftw_pkg} is found" - else - download_pkg_from_cp2k_org "${fftw_sha256}" "${fftw_pkg}" - fi + retrieve_package "${fftw_sha256}" "${fftw_pkg}" echo "Installing from scratch into ${pkg_install_dir}" [ -d fftw-${fftw_ver} ] && rm -rf fftw-${fftw_ver} tar -xzf ${fftw_pkg} diff --git a/tools/toolchain/scripts/stage3/install_greenx.sh b/tools/toolchain/scripts/stage3/install_greenx.sh index a7b2d3257c..5a5e9d6192 100755 --- a/tools/toolchain/scripts/stage3/install_greenx.sh +++ b/tools/toolchain/scripts/stage3/install_greenx.sh @@ -31,11 +31,7 @@ case "$with_greenx" in if verify_checksums "${install_lock_file}"; then echo "greenX-${greenx_ver} is already installed, skipping it." else - if [ -f greenX-${greenx_ver}.tar.gz ]; then - echo "greenX-${greenx_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${greenx_sha256}" "greenX-${greenx_ver}.tar.gz" - fi + retrieve_package "${greenx_sha256}" "greenX-${greenx_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d greenX-${greenx_ver} ] && rm -rf greenX-${greenx_ver} tar -xzf greenX-${greenx_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage3/install_libint.sh b/tools/toolchain/scripts/stage3/install_libint.sh index d57036f6ad..9f389add32 100755 --- a/tools/toolchain/scripts/stage3/install_libint.sh +++ b/tools/toolchain/scripts/stage3/install_libint.sh @@ -47,16 +47,10 @@ case "$with_libint" in if verify_checksums "${install_lock_file}"; then echo "libint-${libint_ver} is already installed, skipping it." else - if [ -f ${libint_pkg} ]; then - echo "${libint_pkg} is found" - else - download_pkg_from_cp2k_org "${libint_sha256}" "${libint_pkg}" - fi - + retrieve_package "${libint_sha256}" "${libint_pkg}" + echo "Installing from scratch into ${pkg_install_dir}" [ -d libint-v${libint_ver}-cp2k-lmax-${LIBINT_LMAX} ] && rm -rf libint-v${libint_ver}-cp2k-lmax-${LIBINT_LMAX} tar -xJf ${libint_pkg} - - echo "Installing from scratch into ${pkg_install_dir}" cd libint-v${libint_ver}-cp2k-lmax-${LIBINT_LMAX} # reduce debug information to level 1 since diff --git a/tools/toolchain/scripts/stage3/install_libxc.sh b/tools/toolchain/scripts/stage3/install_libxc.sh index 275ed86cd5..989c717e1e 100755 --- a/tools/toolchain/scripts/stage3/install_libxc.sh +++ b/tools/toolchain/scripts/stage3/install_libxc.sh @@ -27,11 +27,7 @@ case "$with_libxc" in if verify_checksums "${install_lock_file}"; then echo "libxc-${libxc_ver} is already installed, skipping it." else - if [ -f libxc-${libxc_ver}.tar.bz2 ]; then - echo "libxc-${libxc_ver}.tar.bz2 is found" - else - download_pkg_from_cp2k_org "${libxc_sha256}" "libxc-${libxc_ver}.tar.bz2" - fi + retrieve_package "${libxc_sha256}" "libxc-${libxc_ver}.tar.bz2" echo "Installing from scratch into ${pkg_install_dir}" [ -d libxc-${libxc_ver} ] && rm -rf libxc-${libxc_ver} tar -xjf libxc-${libxc_ver}.tar.bz2 diff --git a/tools/toolchain/scripts/stage4/install_cosma.sh b/tools/toolchain/scripts/stage4/install_cosma.sh index c530a22c82..341b8af8ea 100755 --- a/tools/toolchain/scripts/stage4/install_cosma.sh +++ b/tools/toolchain/scripts/stage4/install_cosma.sh @@ -36,13 +36,9 @@ case "$with_cosma" in if verify_checksums "${install_lock_file}"; then echo "COSMA-${cosma_ver} is already installed, skipping it." else - if [ -f COSMA-v${cosma_ver}.tar.gz ]; then - echo "COSMA-v${cosma_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${cosma_sha256}" "COSMA-v${cosma_ver}.tar.gz" - download_pkg_from_cp2k_org "${costa_sha256}" "COSTA-v${costa_ver}.tar.gz" - download_pkg_from_cp2k_org "${tiled_mm_sha256}" "Tiled-MM-v${tiled_mm_ver}.tar.gz" - fi + retrieve_package "${cosma_sha256}" "COSMA-v${cosma_ver}.tar.gz" + retrieve_package "${costa_sha256}" "COSTA-v${costa_ver}.tar.gz" + retrieve_package "${tiled_mm_sha256}" "Tiled-MM-v${tiled_mm_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d COSMA-${cosma_ver} ] && rm -rf COSMA-${cosma_ver} tar -xzf COSMA-v${cosma_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage4/install_libxsmm.sh b/tools/toolchain/scripts/stage4/install_libxsmm.sh index 65d4472fbc..99ecd63ba4 100755 --- a/tools/toolchain/scripts/stage4/install_libxsmm.sh +++ b/tools/toolchain/scripts/stage4/install_libxsmm.sh @@ -34,19 +34,10 @@ EOF if verify_checksums "${install_lock_file}"; then echo "libxsmm-${libxsmm_ver} is already installed, skipping it." else - if [ -f libxsmm-${libxsmm_ver}.tar.gz ]; then - echo "libxsmm-${libxsmm_ver}.tar.gz is found" - else - if ! download_pkg_from_cp2k_org "${libxsmm_sha256}" "libxsmm-${libxsmm_ver}.tar.gz"; then - download_pkg_from_urlpath "${libxsmm_sha256}" "${libxsmm_ver}.tar.gz" \ - https://github.com/libxsmm/libxsmm/archive \ - "libxsmm-${libxsmm_ver}.tar.gz" - fi - fi + retrieve_package "${libxsmm_sha256}" "libxsmm-${libxsmm_ver}.tar.gz" + echo "Installing from scratch into ${pkg_install_dir}" [ -d libxsmm-${libxsmm_ver} ] && rm -rf libxsmm-${libxsmm_ver} tar -xzf libxsmm-${libxsmm_ver}.tar.gz - - echo "Installing from scratch into ${pkg_install_dir}" # note that we do not have to set -L flags to ld for the # linked math libraries for the libxsmm build, as for a # library this is not required, you just have to provide diff --git a/tools/toolchain/scripts/stage4/install_scalapack.sh b/tools/toolchain/scripts/stage4/install_scalapack.sh index 9fa0d7faa8..f097f8d145 100755 --- a/tools/toolchain/scripts/stage4/install_scalapack.sh +++ b/tools/toolchain/scripts/stage4/install_scalapack.sh @@ -30,11 +30,7 @@ case "$with_scalapack" in echo "scalapack-${scalapack_ver} is already installed, skipping it." else require_env MATH_LIBS - if [ -f ${scalapack_pkg} ]; then - echo "${scalapack_pkg} is found" - else - download_pkg_from_cp2k_org "${scalapack_sha256}" "${scalapack_pkg}" - fi + retrieve_package "${scalapack_sha256}" "${scalapack_pkg}" echo "Installing from scratch into ${pkg_install_dir}" [ -d scalapack-${scalapack_ver} ] && rm -rf scalapack-${scalapack_ver} tar -xzf ${scalapack_pkg} diff --git a/tools/toolchain/scripts/stage5/install_elpa.sh b/tools/toolchain/scripts/stage5/install_elpa.sh index d7a7e2dcfe..517567db92 100755 --- a/tools/toolchain/scripts/stage5/install_elpa.sh +++ b/tools/toolchain/scripts/stage5/install_elpa.sh @@ -49,11 +49,8 @@ case "${with_elpa}" in echo "elpa-${elpa_ver} is already installed, skipping it." else require_env MATH_LIBS - if [ -f elpa-${elpa_ver}.tar.gz ]; then - echo "elpa-${elpa_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${elpa_sha256}" "elpa-${elpa_ver}.tar.gz" - fi + retrieve_package "${elpa_sha256}" "elpa-${elpa_ver}.tar.gz" + echo "Installing from scratch into ${pkg_install_dir}" [ -d elpa-${elpa_ver} ] && rm -rf elpa-${elpa_ver} tar -xzf elpa-${elpa_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage6/install_ace.sh b/tools/toolchain/scripts/stage6/install_ace.sh index 054fc1de43..021b468287 100755 --- a/tools/toolchain/scripts/stage6/install_ace.sh +++ b/tools/toolchain/scripts/stage6/install_ace.sh @@ -35,13 +35,9 @@ case "$with_ace" in if verify_checksums "${install_lock_file}"; then echo "${ace_dir} aka Ace is already installed, skipping it." else - if [ -f ${ace_pkg} ]; then - echo "${ace_pkg} is found" - else - download_pkg_from_cp2k_org "${ace_sha256}" "${ace_pkg}" - fi - [ -d ${ace_dir} ] && rm -rf ${ace_dir} + retrieve_package "${ace_sha256}" "${ace_pkg}" echo "Installing from scratch into ${pkg_install_dir}" + [ -d ${ace_dir} ] && rm -rf ${ace_dir} tar -xzf ${ace_pkg} cd ${ace_dir} diff --git a/tools/toolchain/scripts/stage6/install_deepmd.sh b/tools/toolchain/scripts/stage6/install_deepmd.sh index c9654b923e..4c060292d4 100755 --- a/tools/toolchain/scripts/stage6/install_deepmd.sh +++ b/tools/toolchain/scripts/stage6/install_deepmd.sh @@ -34,13 +34,9 @@ case "$with_deepmd" in if verify_checksums "${install_lock_file}"; then echo "libdeepmd_c-${deepmd_ver} is already installed, skipping it." else - if [ -f ${deepmd_pkg} ]; then - echo "${deepmd_pkg} is found" - else - download_pkg_from_cp2k_org "${deepmd_sha256}" "${deepmd_pkg}" - fi - [ -d deepmd-kit-${deepmd_ver} ] && rm -rf deepmd-kit-${deepmd_ver} + retrieve_package "${deepmd_sha256}" "${deepmd_pkg}" echo "Installing from scratch into ${pkg_install_dir}" + [ -d deepmd-kit-${deepmd_ver} ] && rm -rf deepmd-kit-${deepmd_ver} tar -xzf ${deepmd_pkg} cd deepmd-kit-${deepmd_ver}/source diff --git a/tools/toolchain/scripts/stage6/install_gsl.sh b/tools/toolchain/scripts/stage6/install_gsl.sh index fe4226e275..f2408097d3 100755 --- a/tools/toolchain/scripts/stage6/install_gsl.sh +++ b/tools/toolchain/scripts/stage6/install_gsl.sh @@ -7,7 +7,7 @@ SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" gsl_ver="2.8" -gls_sha256="6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190" +gsl_sha256="6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190" source "${SCRIPT_DIR}"/common_vars.sh source "${SCRIPT_DIR}"/tool_kit.sh source "${SCRIPT_DIR}"/signal_trap.sh @@ -27,11 +27,7 @@ case "$with_gsl" in if verify_checksums "${install_lock_file}"; then echo "gsl-${gsl_ver} is already installed, skipping it." else - if [ -f gsl-${gsl_ver}.tar.gz ]; then - echo "gsl-${gsl_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${gls_sha256}" "gsl-${gsl_ver}.tar.gz" - fi + retrieve_package "${gsl_sha256}" "gsl-${gsl_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d gsl-${gsl_ver} ] && rm -rf gsl-${gsl_ver} tar -xzf gsl-${gsl_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage6/install_libtorch.sh b/tools/toolchain/scripts/stage6/install_libtorch.sh index b2685dac4b..8b3e812d6e 100755 --- a/tools/toolchain/scripts/stage6/install_libtorch.sh +++ b/tools/toolchain/scripts/stage6/install_libtorch.sh @@ -33,12 +33,7 @@ case "${with_libtorch}" in if verify_checksums "${install_lock_file}"; then echo "libtorch-${libtorch_ver} is already installed, skipping it." else - if [ -f ${archive_file} ]; then - echo "${archive_file} is found" - else - download_pkg_from_cp2k_org "${libtorch_sha256}" "${archive_file}" - fi - + retrieve_package "${libtorch_sha256}" "${archive_file}" echo "Installing from scratch into ${pkg_install_dir}" [ -d libtorch ] && rm -rf libtorch [ -d ${pkg_install_dir} ] && rm -rf ${pkg_install_dir} diff --git a/tools/toolchain/scripts/stage6/install_plumed.sh b/tools/toolchain/scripts/stage6/install_plumed.sh index e558eb2fc6..ffa5c533a9 100755 --- a/tools/toolchain/scripts/stage6/install_plumed.sh +++ b/tools/toolchain/scripts/stage6/install_plumed.sh @@ -38,16 +38,10 @@ case "$with_plumed" in if verify_checksums "${install_lock_file}"; then echo "plumed-${plumed_ver} is already installed, skipping it." else - if [ -f ${plumed_pkg} ]; then - echo "${plumed_pkg} is found" - else - download_pkg_from_cp2k_org "${plumed_sha256}" "${plumed_pkg}" - fi - + retrieve_package "${plumed_sha256}" "${plumed_pkg}" + echo "Installing from scratch into ${pkg_install_dir}" [ -d plumed-${plumed_ver} ] && rm -rf plumed-${plumed_ver} tar -xzf ${plumed_pkg} - - echo "Installing from scratch into ${pkg_install_dir}" cd plumed-${plumed_ver} # disable generating debugging infos for now to work around an issue in gcc-10.2: # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96354 diff --git a/tools/toolchain/scripts/stage7/install_hdf5.sh b/tools/toolchain/scripts/stage7/install_hdf5.sh index 46ac77b29d..1b4dacee97 100755 --- a/tools/toolchain/scripts/stage7/install_hdf5.sh +++ b/tools/toolchain/scripts/stage7/install_hdf5.sh @@ -28,11 +28,7 @@ case "$with_hdf5" in if verify_checksums "${install_lock_file}"; then echo "hdf5-${hdf5_ver} is already installed, skipping it." else - if [ -f hdf5-${hdf5_ver}.tar.gz ]; then - echo "hdf5-${hdf5_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${hdf5_sha256}" "hdf5-${hdf5_ver}.tar.gz" - fi + retrieve_package "${hdf5_sha256}" "hdf5-${hdf5_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d hdf5-${hdf5_ver} ] && rm -rf hdf5-${hdf5_ver} tar xf hdf5-${hdf5_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage7/install_libsmeagol.sh b/tools/toolchain/scripts/stage7/install_libsmeagol.sh index bfad00cebc..6e54879b1e 100755 --- a/tools/toolchain/scripts/stage7/install_libsmeagol.sh +++ b/tools/toolchain/scripts/stage7/install_libsmeagol.sh @@ -32,11 +32,7 @@ case "${with_libsmeagol}" in if verify_checksums "${install_lock_file}"; then echo "libsmeagol-${libsmeagol_ver} is already installed, skipping it." else - if [ -f libsmeagol-${libsmeagol_ver}.tar.gz ]; then - echo "libsmeagol-${libsmeagol_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${libsmeagol_sha256}" "libsmeagol-${libsmeagol_ver}.tar.gz" - fi + retrieve_package "${libsmeagol_sha256}" "libsmeagol-${libsmeagol_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d libsmeagol-${libsmeagol_ver} ] && rm -rf libsmeagol-${libsmeagol_ver} tar -xzf libsmeagol-${libsmeagol_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage7/install_libvdwxc.sh b/tools/toolchain/scripts/stage7/install_libvdwxc.sh index e336c01def..db2e281745 100755 --- a/tools/toolchain/scripts/stage7/install_libvdwxc.sh +++ b/tools/toolchain/scripts/stage7/install_libvdwxc.sh @@ -35,12 +35,7 @@ case "$with_libvdwxc" in if verify_checksums "${install_lock_file}"; then echo "libvdwxc-${libvdwxc_ver} is already installed, skipping it." else - if [ -f libvdwxc-${libvdwxc_ver}.tar.gz ]; then - echo "libvdwxc-${libvdwxc_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${libvdwxc_sha256}" "libvdwxc-${libvdwxc_ver}.tar.gz" - fi - + retrieve_package "${libvdwxc_sha256}" "libvdwxc-${libvdwxc_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d libvdwxc-${libvdwxc_ver} ] && rm -rf libvdwxc-${libvdwxc_ver} tar -xzf libvdwxc-${libvdwxc_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage7/install_libvori.sh b/tools/toolchain/scripts/stage7/install_libvori.sh index 4ae1a7dece..45c2c97df2 100755 --- a/tools/toolchain/scripts/stage7/install_libvori.sh +++ b/tools/toolchain/scripts/stage7/install_libvori.sh @@ -30,12 +30,7 @@ case "${with_libvori:=__INSTALL__}" in if verify_checksums "${install_lock_file}"; then echo "libvori-${libvori_ver} is already installed, skipping it." else - if [ -f libvori-${libvori_ver}.tar.gz ]; then - echo "libvori-${libvori_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${libvori_sha256}" "libvori-${libvori_ver}.tar.gz" - fi - + retrieve_package "${libvori_sha256}" "libvori-${libvori_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d libvori-${libvori_ver} ] && rm -rf libvori-${libvori_ver} tar -xzf libvori-${libvori_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage7/install_spglib.sh b/tools/toolchain/scripts/stage7/install_spglib.sh index a46416112c..3afd19e61a 100755 --- a/tools/toolchain/scripts/stage7/install_spglib.sh +++ b/tools/toolchain/scripts/stage7/install_spglib.sh @@ -27,12 +27,7 @@ case "$with_spglib" in if verify_checksums "${install_lock_file}"; then echo "spglib-${spglib_ver} is already installed, skipping it." else - if [ -f spglib-${spglib_ver}.tar.gz ]; then - echo "spglib-${spglib_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${spglib_sha256}" "spglib-${spglib_ver}.tar.gz" - fi - + retrieve_package "${spglib_sha256}" "spglib-${spglib_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" rm -rf spglib-${spglib_ver} "${pkg_install_dir}" tar -xzf spglib-${spglib_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage8/install_dftd4.sh b/tools/toolchain/scripts/stage8/install_dftd4.sh index 1bda9b207a..c9b1b4ac09 100755 --- a/tools/toolchain/scripts/stage8/install_dftd4.sh +++ b/tools/toolchain/scripts/stage8/install_dftd4.sh @@ -34,12 +34,7 @@ case "$with_dftd4" in if verify_checksums "${install_lock_file}"; then echo "dftd4_dist-${dftd4_ver} is already installed, skipping it." else - if [ -f dftd4-${dftd4_ver}.tar.gz ]; then - echo " dftd4-${dftd4_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${dftd4_sha256}" "dftd4-${dftd4_ver}.tar.gz" - fi - + retrieve_package "${dftd4_sha256}" "dftd4-${dftd4_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d dftd4-${dftd4_ver} ] && rm -rf dftd4-${dftd4_ver} tar -xzf dftd4-${dftd4_ver}.tar.gz @@ -125,7 +120,7 @@ export DFTD4="${DFTD4}" export DFTD4_INCLUDE_DIRS="${DFTD4_INCLUDE_DIRS}" export DFTD4_LINK_LIBRARIES="${DFTD4_LINK_LIBRARIES}" export DFTD4_ROOT="${pkg_install_dir}" -export DFTD4_DFLAGS="${DFTD4_DFLAGS}" +export DFTD4_DFLAGS="${DFTD4_DFLAGS}" export DFTD4_CFLAGS="${DFTD4_CFLAGS}" export DFTD4_LDFLAGS="${DFTD4_LDFLAGS}" export DFTD4_LIBS="${DFTD4_LIBS}" diff --git a/tools/toolchain/scripts/stage8/install_mcl.sh b/tools/toolchain/scripts/stage8/install_mcl.sh index 1edf742544..c12a2720cf 100755 --- a/tools/toolchain/scripts/stage8/install_mcl.sh +++ b/tools/toolchain/scripts/stage8/install_mcl.sh @@ -30,12 +30,7 @@ case "${with_mcl:=__INSTALL__}" in if verify_checksums "${install_lock_file}"; then echo "libmcl-${mcl_ver} is already installed, skipping it." else - if [ -f mcl-${mcl_ver}.tar.gz ]; then - echo "mcl-${mcl_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${mcl_sha256}" mcl-${mcl_ver}.tar.gz - fi - + retrieve_package "${mcl_sha256}" mcl-${mcl_ver}.tar.gz echo "Installing from scratch into ${pkg_install_dir}" [ -d mcl-${mcl_ver} ] && rm -rf mcl-${mcl_ver} tar -xzf mcl-${mcl_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage8/install_pugixml.sh b/tools/toolchain/scripts/stage8/install_pugixml.sh index 6e2a66ec11..4494edd42c 100755 --- a/tools/toolchain/scripts/stage8/install_pugixml.sh +++ b/tools/toolchain/scripts/stage8/install_pugixml.sh @@ -27,12 +27,7 @@ case "${with_pugixml}" in if verify_checksums "${install_lock_file}"; then echo "pugixml-${pugixml_ver} is already installed, skipping it." else - if [ -f pugixml-${pugixml_ver}.tar.gz ]; then - echo "pugixml-${pugixml_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${pugixml_sha256}" "pugixml-${pugixml_ver}.tar.gz" - - fi + retrieve_package "${pugixml_sha256}" "pugixml-${pugixml_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d pugixml-${pugixml_ver} ] && rm -rf pugixml-${pugixml_ver} tar -xzf pugixml-${pugixml_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage8/install_sirius.sh b/tools/toolchain/scripts/stage8/install_sirius.sh index c91e27cf7c..2892e57fb0 100755 --- a/tools/toolchain/scripts/stage8/install_sirius.sh +++ b/tools/toolchain/scripts/stage8/install_sirius.sh @@ -101,12 +101,7 @@ case "$with_sirius" in if verify_checksums "${install_lock_file}"; then echo "sirius_dist-${sirius_ver} is already installed, skipping it." else - if [ -f SIRIUS-${sirius_ver}.tar.gz ]; then - echo "sirius_${sirius_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${sirius_sha256}" "SIRIUS-${sirius_ver}.tar.gz" - fi - + retrieve_package "${sirius_sha256}" "SIRIUS-${sirius_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d sirius-${sirius_ver} ] && rm -rf sirius-${sirius_ver} tar -xzf SIRIUS-${sirius_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage8/install_spfft.sh b/tools/toolchain/scripts/stage8/install_spfft.sh index e59787b56a..0db08681e6 100755 --- a/tools/toolchain/scripts/stage8/install_spfft.sh +++ b/tools/toolchain/scripts/stage8/install_spfft.sh @@ -27,18 +27,14 @@ case "${with_spfft}" in if verify_checksums "${install_lock_file}"; then echo "SpFFT-${spfft_ver} is already installed, skipping it." else - if [ -f SpFFT-${spfft_ver}.tar.gz ]; then - echo "SpFFT-${spfft_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${spfft_sha256}" "SpFFT-${spfft_ver}.tar.gz" - - fi + retrieve_package "${spfft_sha256}" "SpFFT-${spfft_ver}.tar.gz" + echo "Installing from scratch into ${pkg_install_dir}" if [ "${MATH_MODE}" = "mkl" ]; then EXTRA_CMAKE_FLAGS="-DSPFFT_MKL=ON -DSPFFT_FFTW_LIB=MKL" else EXTRA_CMAKE_FLAGS="" fi - echo "Installing from scratch into ${pkg_install_dir}" + [ -d SpFFT-${spfft_ver} ] && rm -rf SpFFT-${spfft_ver} tar -xzf SpFFT-${spfft_ver}.tar.gz cd SpFFT-${spfft_ver} diff --git a/tools/toolchain/scripts/stage8/install_spla.sh b/tools/toolchain/scripts/stage8/install_spla.sh index df844551be..f4fd74af28 100755 --- a/tools/toolchain/scripts/stage8/install_spla.sh +++ b/tools/toolchain/scripts/stage8/install_spla.sh @@ -27,12 +27,7 @@ case "${with_spla}" in if verify_checksums "${install_lock_file}"; then echo "SpLA-${spla_ver} is already installed, skipping it." else - if [ -f SpLA-${spla_ver}.tar.gz ]; then - echo "SpLA-${spla_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${spla_sha256}" "SpLA-${spla_ver}.tar.gz" - - fi + retrieve_package "${spla_sha256}" "SpLA-${spla_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d SpLA-${spla_ver} ] && rm -rf SpLA-${spla_ver} tar -xzf SpLA-${spla_ver}.tar.gz diff --git a/tools/toolchain/scripts/stage8/install_tblite.sh b/tools/toolchain/scripts/stage8/install_tblite.sh index 503edafff9..5c4e45321e 100755 --- a/tools/toolchain/scripts/stage8/install_tblite.sh +++ b/tools/toolchain/scripts/stage8/install_tblite.sh @@ -34,12 +34,7 @@ case "$with_tblite" in if verify_checksums "${install_lock_file}"; then echo "tblite-${tblite_ver} is already installed, skipping it." else - if [ -f tblite-${tblite_ver}.tar.xz ]; then - echo "tblite-${tblite_ver}.tar.xz is found" - else - download_pkg_from_cp2k_org "${tblite_sha256}" "tblite-${tblite_ver}.tar.xz" - fi - + retrieve_package "${tblite_sha256}" "tblite-${tblite_ver}.tar.xz" echo "Installing from scratch into ${pkg_install_dir}" [ -d tblite-${tblite_ver} ] && rm -rf tblite-${tblite_ver} tar -xJf tblite-${tblite_ver}.tar.xz @@ -144,7 +139,7 @@ export TBLITE="${TBLITE}" export TBLITE_INCLUDE_DIRS="${TBLITE_INCLUDE_DIRS}" export TBLITE_LINK_LIBRARIES="${TBLITE_LINK_LIBRARIES}" export TBLITE_ROOT="${pkg_install_dir}" -export TBLITE_DFLAGS="${TBLITE_DFLAGS}" +export TBLITE_DFLAGS="${TBLITE_DFLAGS}" export TBLITE_CFLAGS="${TBLITE_CFLAGS}" export TBLITE_LDFLAGS="${TBLITE_LDFLAGS}" export TBLITE_LIBS="${TBLITE_LIBS}" diff --git a/tools/toolchain/scripts/stage8/install_trexio.sh b/tools/toolchain/scripts/stage8/install_trexio.sh index 2ae04920fc..591a0853c5 100755 --- a/tools/toolchain/scripts/stage8/install_trexio.sh +++ b/tools/toolchain/scripts/stage8/install_trexio.sh @@ -34,15 +34,9 @@ case "$with_trexio" in if verify_checksums "${install_lock_file}"; then echo "trexio-${trexio_ver} is already installed, skipping it." else + retrieve_package "${trexio_sha256}" "trexio-${trexio_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d trexio-${trexio_ver} ] && rm -rf trexio-${trexio_ver} - - if [ -f trexio-${trexio_ver}.tar.gz ]; then - echo "trexio_${trexio_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${trexio_sha256}" "trexio-${trexio_ver}.tar.gz" - fi - tar -xzf trexio-${trexio_ver}.tar.gz cd trexio-${trexio_ver} diff --git a/tools/toolchain/scripts/stage9/install_dbcsr.sh b/tools/toolchain/scripts/stage9/install_dbcsr.sh index 9b80e43956..f41275b015 100755 --- a/tools/toolchain/scripts/stage9/install_dbcsr.sh +++ b/tools/toolchain/scripts/stage9/install_dbcsr.sh @@ -27,11 +27,7 @@ case "${with_dbcsr}" in if verify_checksums "${install_lock_file}"; then echo "dbcsr-${dbcsr_ver} is already installed, skipping it." else - if [ -f dbcsr-${dbcsr_ver}.tar.gz ]; then - echo "dbcsr-${dbcsr_ver}.tar.gz is found" - else - download_pkg_from_cp2k_org "${dbcsr_sha256}" "dbcsr-${dbcsr_ver}.tar.gz" - fi + retrieve_package "${dbcsr_sha256}" "dbcsr-${dbcsr_ver}.tar.gz" echo "Installing from scratch into ${pkg_install_dir}" [ -d dbcsr-${dbcsr_ver} ] && rm -rf dbcsr-${dbcsr_ver} tar -xzf dbcsr-${dbcsr_ver}.tar.gz diff --git a/tools/toolchain/scripts/tool_kit.sh b/tools/toolchain/scripts/tool_kit.sh index d56386db9c..231bcf413b 100644 --- a/tools/toolchain/scripts/tool_kit.sh +++ b/tools/toolchain/scripts/tool_kit.sh @@ -615,25 +615,34 @@ read_with() { esac } -# helper routine to check integrity of downloaded files +# get checksum command based on OS type, inspired by part of gcc package +# (gcc-14.3.0/contrib/download_prerequisites) +get_checksum_cmd() { + local __os=$(uname) + local __chksum="sha256sum" + case $__os in + "Darwin" | "FreeBSD" | "DragonFly" | "AIX") + __chksum='shasum -a 256' + ;; + "OpenBSD") + __chksum='sha256' + ;; + *) + __chksum='sha256sum' + ;; + esac + echo "$__chksum" +} + +# helper routine to check integrity of files +# intended to be used as condition test in an if-then-else construct, because +# no extra actions are taken for missing file or failed match in this form +# usage: checksum sha256 filename checksum() { - local __filename=$1 - local __sha256=$2 - local __shasum_command='sha256sum' - # check if we have sha256sum command, Mac OS X does not have - # sha256sum, but has an equivalent with shasum -a 256 - if command -v "$__shasum_command" > /dev/null 2>&1 && ! ${__shasum_command} --version 2>&1 | grep -q 'Darwin'; then - __shasum_command='sha256sum' - else - __shasum_command="shasum -a 256" - fi - if echo "$__sha256 $__filename" | ${__shasum_command} --check; then - echo "Checksum of $__filename Ok" - else - rm -v ${__filename} - report_error "Checksum of $__filename could not be verified, abort." - return 1 - fi + local __sha256="$1" + local __filename="$2" + local __shasum_command=$(get_checksum_cmd) + echo "$__sha256 $__filename" | ${__shasum_command} --check } # downloader for the package tars, includes checksum @@ -651,7 +660,13 @@ download_pkg_from_urlpath() { return 1 fi # checksum - checksum "${__outfile}" "${__sha256}" + if checksum "${__sha256}" "${__outfile}"; then + echo "Checksum of $__filename Ok" + else + rm -vf "${__outfile}" + report_error "Checksum of $__filename could not be verified, abort." + return 1 + fi } # download from CP2K.org @@ -660,18 +675,30 @@ download_pkg_from_cp2k_org() { download_pkg_from_urlpath "$1" "$2" https://www.cp2k.org/static/downloads } +# retrieve package under current directory with filename and checksum verification +# if file exists and checksum is correct, only print a message +# if file exists but checksum is incorrect, delete and re-download from cp2k.org +# if file does not exist, download from cp2k.org +retrieve_package() { + local __sha256="$1" + local __filename="$2" + if ! [ -f "${__filename}" ]; then + download_pkg_from_cp2k_org "${__sha256}" "${__filename}" + else + if ! checksum "${__sha256}" "${__filename}"; then + echo "$__filename is found but checksum is wrong; delete and re-download" + rm -vf "${__filename}" + download_pkg_from_cp2k_org "${__sha256}" "${__filename}" + else + echo "$__filename is found and checksum is right" + fi + fi +} + # verify the checksums inside the given checksum file verify_checksums() { local __checksum_file=$1 - local __shasum_command='sha256sum' - - # check if we have sha256sum command, Mac OS X does not have - # sha256sum, but has an equivalent with shasum -a 256 - if command -v "$__shasum_command" > /dev/null 2>&1 && ! ${__shasum_command} --version 2>&1 | grep -q 'Darwin'; then - __shasum_command='sha256sum' - else - __shasum_command="shasum -a 256" - fi + local __shasum_command=$(get_checksum_cmd) ${__shasum_command} --check "${__checksum_file}" > /dev/null 2>&1 } @@ -680,15 +707,7 @@ verify_checksums() { write_checksums() { local __checksum_file=$1 shift # remove output file from arguments to be able to pass them along properly quoted - local __shasum_command='sha256sum' - - # check if we have sha256sum command, Mac OS X does not have - # sha256sum, but has an equivalent with shasum -a 256 - if command -v "$__shasum_command" > /dev/null 2>&1 && ! ${__shasum_command} --version 2>&1 | grep -q 'Darwin'; then - __shasum_command='sha256sum' - else - __shasum_command="shasum -a 256" - fi + local __shasum_command=$(get_checksum_cmd) ${__shasum_command} "${VERSION_FILE}" "$@" > "${__checksum_file}" }