xref: /aosp_15_r20/external/curl/appveyor.sh (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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