1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 3*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 4*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 5*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 6*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 7*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 8*6236dae4SAndroid Build Coastguard Worker# 9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 10*6236dae4SAndroid Build Coastguard Worker# 11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 14*6236dae4SAndroid Build Coastguard Worker# 15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 18*6236dae4SAndroid Build Coastguard Worker# 19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 21*6236dae4SAndroid Build Coastguard Worker# 22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 23*6236dae4SAndroid Build Coastguard Worker# 24*6236dae4SAndroid Build Coastguard Worker########################################################################### 25*6236dae4SAndroid Build Coastguard Worker 26*6236dae4SAndroid Build Coastguard Worker# shellcheck disable=SC3040,SC2039 27*6236dae4SAndroid Build Coastguard Workerset -eux; [ -n "${BASH:-}${ZSH_NAME:-}" ] && set -o pipefail 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard Worker# build 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Workerif [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then 32*6236dae4SAndroid Build Coastguard Worker openssl_root_win='C:/OpenSSL-v33-Win64' 33*6236dae4SAndroid Build Coastguard Workerelse 34*6236dae4SAndroid Build Coastguard Worker openssl_root_win='C:/OpenSSL-v111-Win64' 35*6236dae4SAndroid Build Coastguard Workerfi 36*6236dae4SAndroid Build Coastguard Workeropenssl_root="$(cygpath "${openssl_root_win}")" 37*6236dae4SAndroid Build Coastguard Worker 38*6236dae4SAndroid Build Coastguard Workerif [ "${BUILD_SYSTEM}" = 'CMake' ]; then 39*6236dae4SAndroid Build Coastguard Worker options='' 40*6236dae4SAndroid Build Coastguard Worker [[ "${TARGET:-}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture' 41*6236dae4SAndroid Build Coastguard Worker [ -n "${TOOLSET:-}" ] && options+=" -T ${TOOLSET}" 42*6236dae4SAndroid Build Coastguard Worker [ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}" 43*6236dae4SAndroid Build Coastguard Worker [ -n "${CURLDEBUG:-}" ] && options+=" -DENABLE_CURLDEBUG=${CURLDEBUG}" 44*6236dae4SAndroid Build Coastguard Worker [ "${PRJ_CFG}" = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=' 45*6236dae4SAndroid Build Coastguard Worker [ "${PRJ_CFG}" = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=' 46*6236dae4SAndroid Build Coastguard Worker [[ "${PRJ_GEN}" = *'Visual Studio'* ]] && options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false' 47*6236dae4SAndroid Build Coastguard Worker if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then 48*6236dae4SAndroid Build Coastguard Worker [ "${DEBUG}" = 'ON' ] && [ "${SHARED}" = 'ON' ] && SKIP_RUN='Crash on startup in ENABLE_DEBUG=ON shared builds' 49*6236dae4SAndroid Build Coastguard Worker # Fails to run without this due to missing MSVCR90.dll / MSVCR90D.dll 50*6236dae4SAndroid Build Coastguard Worker options+=' -DCURL_STATIC_CRT=ON' 51*6236dae4SAndroid Build Coastguard Worker fi 52*6236dae4SAndroid Build Coastguard Worker # shellcheck disable=SC2086 53*6236dae4SAndroid Build Coastguard Worker cmake -B _bld "-G${PRJ_GEN}" ${TARGET:-} ${options} \ 54*6236dae4SAndroid Build Coastguard Worker "-DCURL_USE_OPENSSL=${OPENSSL}" \ 55*6236dae4SAndroid Build Coastguard Worker "-DCURL_USE_SCHANNEL=${SCHANNEL}" \ 56*6236dae4SAndroid Build Coastguard Worker "-DHTTP_ONLY=${HTTP_ONLY}" \ 57*6236dae4SAndroid Build Coastguard Worker "-DBUILD_SHARED_LIBS=${SHARED}" \ 58*6236dae4SAndroid Build Coastguard Worker "-DCMAKE_UNITY_BUILD=${UNITY}" \ 59*6236dae4SAndroid Build Coastguard Worker '-DCURL_TEST_BUNDLES=ON' \ 60*6236dae4SAndroid Build Coastguard Worker '-DCURL_WERROR=ON' \ 61*6236dae4SAndroid Build Coastguard Worker "-DENABLE_DEBUG=${DEBUG}" \ 62*6236dae4SAndroid Build Coastguard Worker "-DENABLE_UNICODE=${ENABLE_UNICODE}" \ 63*6236dae4SAndroid Build Coastguard Worker '-DCMAKE_INSTALL_PREFIX=C:/curl' \ 64*6236dae4SAndroid Build Coastguard Worker "-DCMAKE_BUILD_TYPE=${PRJ_CFG}" \ 65*6236dae4SAndroid Build Coastguard Worker '-DCURL_USE_LIBPSL=OFF' 66*6236dae4SAndroid Build Coastguard Worker if false; then 67*6236dae4SAndroid Build Coastguard Worker cat _bld/CMakeFiles/CMakeConfigureLog.yaml 2>/dev/null || true 68*6236dae4SAndroid Build Coastguard Worker fi 69*6236dae4SAndroid Build Coastguard Worker echo 'curl_config.h'; grep -F '#define' _bld/lib/curl_config.h | sort || true 70*6236dae4SAndroid Build Coastguard Worker # shellcheck disable=SC2086 71*6236dae4SAndroid Build Coastguard Worker if ! cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}; then 72*6236dae4SAndroid Build Coastguard Worker if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then 73*6236dae4SAndroid Build Coastguard Worker find . -name BuildLog.htm -exec dos2unix '{}' + 74*6236dae4SAndroid Build Coastguard Worker find . -name BuildLog.htm -exec cat '{}' + 75*6236dae4SAndroid Build Coastguard Worker fi 76*6236dae4SAndroid Build Coastguard Worker false 77*6236dae4SAndroid Build Coastguard Worker fi 78*6236dae4SAndroid Build Coastguard Worker if [ "${SHARED}" = 'ON' ]; then 79*6236dae4SAndroid Build Coastguard Worker PATH="$PWD/_bld/lib:$PATH" 80*6236dae4SAndroid Build Coastguard Worker fi 81*6236dae4SAndroid Build Coastguard Worker if [ "${OPENSSL}" = 'ON' ]; then 82*6236dae4SAndroid Build Coastguard Worker PATH="$PWD/_bld/lib:${openssl_root}:$PATH" 83*6236dae4SAndroid Build Coastguard Worker fi 84*6236dae4SAndroid Build Coastguard Worker curl='_bld/src/curl.exe' 85*6236dae4SAndroid Build Coastguard Workerelif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then 86*6236dae4SAndroid Build Coastguard Worker ( 87*6236dae4SAndroid Build Coastguard Worker cd projects 88*6236dae4SAndroid Build Coastguard Worker ./generate.bat "${VC_VERSION}" 89*6236dae4SAndroid Build Coastguard Worker msbuild.exe -maxcpucount "-property:Configuration=${PRJ_CFG}" "Windows/${VC_VERSION}/curl-all.sln" 90*6236dae4SAndroid Build Coastguard Worker ) 91*6236dae4SAndroid Build Coastguard Worker curl="build/Win32/${VC_VERSION}/${PRJ_CFG}/curld.exe" 92*6236dae4SAndroid Build Coastguard Workerelif [ "${BUILD_SYSTEM}" = 'winbuild_vs2015' ]; then 93*6236dae4SAndroid Build Coastguard Worker ./buildconf.bat 94*6236dae4SAndroid Build Coastguard Worker ( 95*6236dae4SAndroid Build Coastguard Worker cd winbuild 96*6236dae4SAndroid Build Coastguard Worker cat << EOF > _make.bat 97*6236dae4SAndroid Build Coastguard Worker call "C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.cmd" /x64 98*6236dae4SAndroid Build Coastguard Worker call "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat" x86_amd64 99*6236dae4SAndroid Build Coastguard Worker nmake -f Makefile.vc mode=dll VC=14 "SSL_PATH=${openssl_root_win}" WITH_SSL=dll MACHINE=x64 DEBUG=${DEBUG} ENABLE_UNICODE=${ENABLE_UNICODE} 100*6236dae4SAndroid Build Coastguard WorkerEOF 101*6236dae4SAndroid Build Coastguard Worker ./_make.bat 102*6236dae4SAndroid Build Coastguard Worker rm _make.bat 103*6236dae4SAndroid Build Coastguard Worker ) 104*6236dae4SAndroid Build Coastguard Worker curl="builds/libcurl-vc14-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe" 105*6236dae4SAndroid Build Coastguard Workerelif [ "${BUILD_SYSTEM}" = 'winbuild_vs2017' ]; then 106*6236dae4SAndroid Build Coastguard Worker ./buildconf.bat 107*6236dae4SAndroid Build Coastguard Worker ( 108*6236dae4SAndroid Build Coastguard Worker cd winbuild 109*6236dae4SAndroid Build Coastguard Worker cat << EOF > _make.bat 110*6236dae4SAndroid Build Coastguard Worker call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat" 111*6236dae4SAndroid Build Coastguard Worker nmake -f Makefile.vc mode=dll VC=14.10 "SSL_PATH=${openssl_root_win}" WITH_SSL=dll MACHINE=x64 DEBUG=${DEBUG} ENABLE_UNICODE=${ENABLE_UNICODE} 112*6236dae4SAndroid Build Coastguard WorkerEOF 113*6236dae4SAndroid Build Coastguard Worker ./_make.bat 114*6236dae4SAndroid Build Coastguard Worker rm _make.bat 115*6236dae4SAndroid Build Coastguard Worker ) 116*6236dae4SAndroid Build Coastguard Worker curl="builds/libcurl-vc14.10-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe" 117*6236dae4SAndroid Build Coastguard Workerfi 118*6236dae4SAndroid Build Coastguard Worker 119*6236dae4SAndroid Build Coastguard Workerfind . -name '*.exe' -o -name '*.dll' 120*6236dae4SAndroid Build Coastguard Workerif [ -z "${SKIP_RUN:-}" ]; then 121*6236dae4SAndroid Build Coastguard Worker "${curl}" --disable --version 122*6236dae4SAndroid Build Coastguard Workerelse 123*6236dae4SAndroid Build Coastguard Worker echo "Skip running curl.exe. Reason: ${SKIP_RUN}" 124*6236dae4SAndroid Build Coastguard Workerfi 125*6236dae4SAndroid Build Coastguard Worker 126*6236dae4SAndroid Build Coastguard Worker# build tests 127*6236dae4SAndroid Build Coastguard Worker 128*6236dae4SAndroid Build Coastguard Workerif [[ "${TFLAGS}" != 'skipall' ]] && \ 129*6236dae4SAndroid Build Coastguard Worker [ "${BUILD_SYSTEM}" = 'CMake' ]; then 130*6236dae4SAndroid Build Coastguard Worker cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps 131*6236dae4SAndroid Build Coastguard Workerfi 132*6236dae4SAndroid Build Coastguard Worker 133*6236dae4SAndroid Build Coastguard Worker# run tests 134*6236dae4SAndroid Build Coastguard Worker 135*6236dae4SAndroid Build Coastguard Workerif [[ "${TFLAGS}" != 'skipall' ]] && \ 136*6236dae4SAndroid Build Coastguard Worker [[ "${TFLAGS}" != 'skiprun' ]]; then 137*6236dae4SAndroid Build Coastguard Worker if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then 138*6236dae4SAndroid Build Coastguard Worker TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")" 139*6236dae4SAndroid Build Coastguard Worker elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then 140*6236dae4SAndroid Build Coastguard Worker TFLAGS+=" -ac $(cygpath 'C:/msys64/usr/bin/curl.exe')" 141*6236dae4SAndroid Build Coastguard Worker fi 142*6236dae4SAndroid Build Coastguard Worker TFLAGS+=' -j0' 143*6236dae4SAndroid Build Coastguard Worker if [ "${BUILD_SYSTEM}" = 'CMake' ]; then 144*6236dae4SAndroid Build Coastguard Worker cmake --build _bld --config "${PRJ_CFG}" --target test-ci 145*6236dae4SAndroid Build Coastguard Worker else 146*6236dae4SAndroid Build Coastguard Worker ( 147*6236dae4SAndroid Build Coastguard Worker TFLAGS="-a -p !flaky -r -rm ${TFLAGS}" 148*6236dae4SAndroid Build Coastguard Worker cd _bld/tests 149*6236dae4SAndroid Build Coastguard Worker ./runtests.pl 150*6236dae4SAndroid Build Coastguard Worker ) 151*6236dae4SAndroid Build Coastguard Worker fi 152*6236dae4SAndroid Build Coastguard Workerfi 153*6236dae4SAndroid Build Coastguard Worker 154*6236dae4SAndroid Build Coastguard Worker# build examples 155*6236dae4SAndroid Build Coastguard Worker 156*6236dae4SAndroid Build Coastguard Workerif [[ "${EXAMPLES}" = 'ON' ]] && \ 157*6236dae4SAndroid Build Coastguard Worker [ "${BUILD_SYSTEM}" = 'CMake' ]; then 158*6236dae4SAndroid Build Coastguard Worker cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples 159*6236dae4SAndroid Build Coastguard Workerfi 160