test.sh (4936B)
1 #!/bin/sh -x 2 # Copyright (C) Viktor Szakats 3 # 4 # SPDX-License-Identifier: curl 5 6 # shellcheck disable=SC2086 7 8 set -eu 9 10 cd "$(dirname "$0")" 11 12 mode="${1:-all}"; shift 13 14 cmake_consumer="${TEST_CMAKE_CONSUMER:-cmake}" 15 cmake_provider="${TEST_CMAKE_PROVIDER:-${cmake_consumer}}" 16 17 # 'modern': supports -S/-B (3.13+), --install (3.15+) 18 "${cmake_consumer}" --help | grep -q -- '--install' && cmake_consumer_modern=1 19 "${cmake_provider}" --help | grep -q -- '--install' && cmake_provider_modern=1 20 21 if [ -n "${TEST_CMAKE_GENERATOR:-}" ]; then 22 gen="${TEST_CMAKE_GENERATOR}" 23 elif [ -n "${cmake_consumer_modern:-}" ] && \ 24 [ -n "${cmake_provider_modern:-}" ] && \ 25 command -v ninja >/dev/null; then 26 gen='Ninja' # 3.17+ 27 else 28 gen='Unix Makefiles' 29 fi 30 31 cmake_opts='-DBUILD_CURL_EXE=OFF -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF' 32 33 src='../..' 34 35 runresults() { 36 set +x 37 for bin in "$1"/test-consumer*; do 38 file "${bin}" || true 39 ${TEST_CMAKE_EXE_RUNNER:-} "${bin}" || true 40 done 41 set -x 42 } 43 44 if [ "${mode}" = 'ExternalProject' ]; then # Broken 45 (cd "${src}"; git archive --format=tar HEAD) | gzip > source.tar.gz 46 src="${PWD}/source.tar.gz" 47 sha="$(openssl dgst -sha256 "${src}" | grep -a -i -o -E '[0-9a-f]{64}$')" 48 bldc='bld-externalproject' 49 rm -rf "${bldc}" 50 if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+ 51 "${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \ 52 -DTEST_INTEGRATION_MODE=ExternalProject \ 53 -DFROM_ARCHIVE="${src}" -DFROM_HASH="${sha}" 54 "${cmake_consumer}" --build "${bldc}" --verbose 55 else 56 mkdir "${bldc}"; cd "${bldc}" 57 "${cmake_consumer}" .. -G "${gen}" ${cmake_opts} ${TEST_CMAKE_FLAGS:-} "$@" \ 58 -DTEST_INTEGRATION_MODE=ExternalProject \ 59 -DFROM_ARCHIVE="${src}" -DFROM_HASH="${sha}" 60 VERBOSE=1 "${cmake_consumer}" --build . 61 cd .. 62 fi 63 runresults "${bldc}" 64 fi 65 66 if [ "${mode}" = 'all' ] || [ "${mode}" = 'FetchContent' ]; then # 3.14+ 67 src="${PWD}/${src}" 68 bldc='bld-fetchcontent' 69 rm -rf "${bldc}" 70 "${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \ 71 -DTEST_INTEGRATION_MODE=FetchContent \ 72 -DFROM_GIT_REPO="${src}" \ 73 -DFROM_GIT_TAG="$(git rev-parse HEAD)" 74 "${cmake_consumer}" --build "${bldc}" --verbose 75 PATH="${bldc}/_deps/curl-build/lib:${PATH}" 76 runresults "${bldc}" 77 fi 78 79 if [ "${mode}" = 'all' ] || [ "${mode}" = 'add_subdirectory' ]; then 80 rm -rf curl 81 if ! ln -s "${src}" curl; then 82 rm -rf curl; mkdir curl; (cd "${src}"; git archive --format=tar HEAD) | tar -x --directory=curl # for MSYS2/Cygwin 83 fi 84 bldc='bld-add_subdirectory' 85 rm -rf "${bldc}" 86 if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+ 87 "${cmake_consumer}" -B "${bldc}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \ 88 -DTEST_INTEGRATION_MODE=add_subdirectory 89 "${cmake_consumer}" --build "${bldc}" --verbose 90 else 91 mkdir "${bldc}"; cd "${bldc}" 92 # Disable `pkg-config` for CMake <= 3.12. These versions cannot propagate 93 # library directories to the consumer project. 94 "${cmake_consumer}" .. -G "${gen}" ${cmake_opts} -DCURL_USE_PKGCONFIG=OFF ${TEST_CMAKE_FLAGS:-} "$@" \ 95 -DTEST_INTEGRATION_MODE=add_subdirectory 96 VERBOSE=1 "${cmake_consumer}" --build . 97 cd .. 98 fi 99 PATH="${bldc}/curl/lib:${PATH}" 100 runresults "${bldc}" 101 fi 102 103 if [ "${mode}" = 'all' ] || [ "${mode}" = 'find_package' ]; then 104 src="${PWD}/${src}" 105 bldp='bld-curl' 106 prefix="${PWD}/${bldp}/_pkg" 107 rm -rf "${bldp}" 108 if [ -n "${cmake_provider_modern:-}" ]; then # 3.15+ 109 "${cmake_provider}" -B "${bldp}" -S "${src}" -G "${gen}" ${cmake_opts} -DCMAKE_UNITY_BUILD=ON ${TEST_CMAKE_FLAGS:-} "$@" \ 110 -DBUILD_SHARED_LIBS=ON \ 111 -DBUILD_STATIC_LIBS=ON \ 112 -DCMAKE_INSTALL_PREFIX="${prefix}" 113 "${cmake_provider}" --build "${bldp}" --verbose 114 "${cmake_provider}" --install "${bldp}" 115 else 116 mkdir "${bldp}"; cd "${bldp}" 117 "${cmake_provider}" "${src}" -G "${gen}" ${cmake_opts} -DCURL_USE_PKGCONFIG=OFF ${TEST_CMAKE_FLAGS:-} "$@" \ 118 -DBUILD_SHARED_LIBS=ON \ 119 -DBUILD_STATIC_LIBS=ON \ 120 -DCMAKE_INSTALL_PREFIX="${prefix}" 121 VERBOSE=1 "${cmake_provider}" --build . 122 make install 123 cd .. 124 fi 125 bldc='bld-find_package' 126 rm -rf "${bldc}" 127 if [ -n "${cmake_consumer_modern:-}" ]; then # 3.15+ 128 "${cmake_consumer}" -B "${bldc}" -G "${gen}" ${TEST_CMAKE_FLAGS:-} \ 129 -DTEST_INTEGRATION_MODE=find_package \ 130 -DCMAKE_PREFIX_PATH="${prefix}/lib/cmake/CURL" 131 "${cmake_consumer}" --build "${bldc}" --verbose 132 else 133 mkdir "${bldc}"; cd "${bldc}" 134 "${cmake_consumer}" .. -G "${gen}" ${TEST_CMAKE_FLAGS:-} \ 135 -DTEST_INTEGRATION_MODE=find_package \ 136 -DCMAKE_PREFIX_PATH="${prefix}/lib/cmake/CURL" 137 VERBOSE=1 "${cmake_consumer}" --build . 138 cd .. 139 fi 140 PATH="${prefix}/bin:${PATH}" 141 runresults "${bldc}" 142 fi