mirror of
https://github.com/libssh2/libssh2.git
synced 2025-07-29 13:01:14 +03:00
It was an exercise to run old cmake versions in CI and in the test suite. It also revealed that 3.7.2 2017-01-13 is too old to consume libssh2 via `find_package()` due to: ``` CMake Error at bld-libssh2/_pkg/lib/cmake/libssh2/libssh2-config.cmake:35 (add_library): add_library cannot create ALIAS target "libssh2::libssh2" because target "libssh2::libssh2_shared" is IMPORTED. Call Stack (most recent call first): CMakeLists.txt:27 (find_package) ``` The mitigation for this issue requires 3.11. Also: - rename a few existing envs to use the `TEST_` prefix. - make the `find_package` test provider stage verbose. Closes #1591
139 lines
4.7 KiB
Bash
Executable File
139 lines
4.7 KiB
Bash
Executable File
#!/bin/sh -x
|
|
#
|
|
# Copyright (C) Viktor Szakats
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
mode="${1:-all}"; shift
|
|
|
|
cmake_consumer="${TEST_CMAKE_CONSUMER:-cmake}"
|
|
cmake_provider="${TEST_CMAKE_PROVIDER:-${cmake_consumer}}"
|
|
|
|
# 'modern': supports -S/-B (3.13+), --install (3.15+)
|
|
"${cmake_consumer}" --help | grep -q -- '--install' && cmake_consumer_modern=1
|
|
"${cmake_provider}" --help | grep -q -- '--install' && cmake_provider_modern=1
|
|
|
|
if [ -n "${TEST_CMAKE_GENERATOR:-}" ]; then
|
|
gen="${TEST_CMAKE_GENERATOR}"
|
|
elif [ -n "${cmake_consumer_modern:-}" ] && \
|
|
[ -n "${cmake_provider_modern:-}" ] && \
|
|
command -v ninja >/dev/null; then
|
|
gen='Ninja' # 3.17+
|
|
else
|
|
gen='Unix Makefiles'
|
|
fi
|
|
|
|
cmake_opts='-DBUILD_EXAMPLES=OFF -DBUILD_TESTING=OFF -DENABLE_ZLIB_COMPRESSION=ON'
|
|
|
|
src='../..'
|
|
|
|
runresults() {
|
|
set +x
|
|
for bin in "$1"/test-consumer*; do
|
|
file "${bin}" || true
|
|
${TEST_CMAKE_EXE_RUNNER:-} "${bin}" || true
|
|
done
|
|
set -x
|
|
}
|
|
|
|
if [ "${mode}" = 'ExternalProject' ]; then # Broken
|
|
(cd "${src}"; git archive --format=tar HEAD) | gzip > source.tar.gz
|
|
src="${PWD}/source.tar.gz"
|
|
sha="$(openssl dgst -sha256 "${src}" | grep -a -i -o -E '[0-9a-f]{64}$')"
|
|
bldc='bld-externalproject'
|
|
rm -rf "${bldc}"
|
|
if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+
|
|
"${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DTEST_INTEGRATION_MODE=ExternalProject \
|
|
-DFROM_ARCHIVE="${src}" -DFROM_HASH="${sha}"
|
|
"${cmake_consumer}" --build "${bldc}" --verbose
|
|
else
|
|
mkdir "${bldc}"; cd "${bldc}"
|
|
"${cmake_consumer}" .. -G "${gen}" ${cmake_opts} ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DTEST_INTEGRATION_MODE=ExternalProject \
|
|
-DFROM_ARCHIVE="${src}" -DFROM_HASH="${sha}"
|
|
VERBOSE=1 "${cmake_consumer}" --build .
|
|
cd ..
|
|
fi
|
|
runresults "${bldc}"
|
|
fi
|
|
|
|
if [ "${mode}" = 'all' ] || [ "${mode}" = 'FetchContent' ]; then # 3.14+
|
|
src="${PWD}/${src}"
|
|
bldc='bld-fetchcontent'
|
|
rm -rf "${bldc}"
|
|
"${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DTEST_INTEGRATION_MODE=FetchContent \
|
|
-DFROM_GIT_REPO="${src}" \
|
|
-DFROM_GIT_TAG="$(git rev-parse HEAD)"
|
|
"${cmake_consumer}" --build "${bldc}" --verbose
|
|
PATH="${bldc}/_deps/libssh2-build/lib:${PATH}"
|
|
runresults "${bldc}"
|
|
fi
|
|
|
|
if [ "${mode}" = 'all' ] || [ "${mode}" = 'add_subdirectory' ]; then
|
|
rm -rf libssh2
|
|
if ! ln -s "${src}" libssh2; then
|
|
rm -rf libssh2; mkdir libssh2; (cd "${src}"; git archive --format=tar HEAD) | tar -x --directory=libssh2 # for MSYS2/Cygwin
|
|
fi
|
|
bldc='bld-add_subdirectory'
|
|
rm -rf "${bldc}"
|
|
if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+
|
|
"${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DTEST_INTEGRATION_MODE=add_subdirectory
|
|
"${cmake_consumer}" --build "${bldc}" --verbose
|
|
else
|
|
mkdir "${bldc}"; cd "${bldc}"
|
|
# Disable `pkg-config` for CMake <= 3.12. These versions cannot propagate
|
|
# library directories to the consumer project.
|
|
"${cmake_consumer}" .. -G "${gen}" ${cmake_opts} -DLIBSSH2_USE_PKGCONFIG=OFF ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DTEST_INTEGRATION_MODE=add_subdirectory
|
|
VERBOSE=1 "${cmake_consumer}" --build .
|
|
cd ..
|
|
fi
|
|
PATH="${bldc}/libssh2/src:${PATH}"
|
|
runresults "${bldc}"
|
|
fi
|
|
|
|
if [ "${mode}" = 'all' ] || [ "${mode}" = 'find_package' ]; then
|
|
src="${PWD}/${src}"
|
|
bldp='bld-libssh2'
|
|
prefix="${PWD}/${bldp}/_pkg"
|
|
rm -rf "${bldp}"
|
|
if [ -n "${cmake_provider_modern:-}" ]; then # 3.15+
|
|
"${cmake_provider}" -B "${bldp}" -S "${src}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DCMAKE_INSTALL_PREFIX="${prefix}"
|
|
"${cmake_provider}" --build "${bldp}" --verbose
|
|
"${cmake_provider}" --install "${bldp}"
|
|
else
|
|
mkdir "${bldp}"; cd "${bldp}"
|
|
"${cmake_provider}" "${src}" -G "${gen}" ${cmake_opts} ${TEST_CMAKE_FLAGS:-} "$@" \
|
|
-DCMAKE_INSTALL_PREFIX="${prefix}"
|
|
VERBOSE=1 "${cmake_provider}" --build .
|
|
make install
|
|
cd ..
|
|
fi
|
|
bldc='bld-find_package'
|
|
rm -rf "${bldc}"
|
|
if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+
|
|
"${cmake_consumer}" -B "${bldc}" -G "${gen}" ${TEST_CMAKE_FLAGS:-} \
|
|
-DTEST_INTEGRATION_MODE=find_package \
|
|
-DCMAKE_PREFIX_PATH="${prefix}/lib/cmake/libssh2"
|
|
"${cmake_consumer}" --build "${bldc}" --verbose
|
|
else
|
|
mkdir "${bldc}"; cd "${bldc}"
|
|
"${cmake_consumer}" .. -G "${gen}" ${TEST_CMAKE_FLAGS:-} \
|
|
-DTEST_INTEGRATION_MODE=find_package \
|
|
-DCMAKE_PREFIX_PATH="${prefix}/lib/cmake/libssh2"
|
|
VERBOSE=1 "${cmake_consumer}" --build .
|
|
cd ..
|
|
fi
|
|
PATH="${prefix}/bin:${PATH}"
|
|
runresults "${bldc}"
|
|
fi
|