Before this patch, `ENABLE_CURLDEBUG` (memory tracking) was unconditionally enabled when `ENABLE_DEBUGBUILD` was set. This made testing some build configurations complicated. To fix it, this patch makes `ENABLE_CURLDEBUG` to receive the value of `ENABLE_DEBUG` by default, while allowing free override by the user. This allows to use the config: `ENABLE_DEBUGBUILD=ON ENABLE_CURLDEBUG=OFF` to enable debug features, without also enabling memory tracking. This is important because some other build methods allow to set one of these features but not the other. This patch allows to test any combination with CMake. This makes it unnecessary to use the workaround of passing `-DDEBUGBUILD` via `CMAKE_C_FLAGS`. Which has the disadvantage that our CMake logic cannot easily detect it, e.g. for disabling symbol hiding on Windows for `ENABLE_DEBUG`/`DEBUGBUILD` builds. Cherry-picked from #13718 Closes #13792
142 lines
5.2 KiB
Bash
142 lines
5.2 KiB
Bash
#!/usr/bin/env bash
|
|
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# This software is licensed as described in the file COPYING, which
|
|
# you should have received as part of this distribution. The terms
|
|
# are also available at https://curl.se/docs/copyright.html.
|
|
#
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
#
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
# KIND, either express or implied.
|
|
#
|
|
# SPDX-License-Identifier: curl
|
|
#
|
|
###########################################################################
|
|
|
|
# shellcheck disable=SC3040,SC2039
|
|
set -eux; [ -n "${BASH:-}${ZSH_NAME:-}" ] && set -o pipefail
|
|
|
|
# build
|
|
|
|
if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then
|
|
openssl_root_win='C:/OpenSSL-v32-Win64'
|
|
else
|
|
openssl_root_win='C:/OpenSSL-v111-Win64'
|
|
fi
|
|
openssl_root="$(cygpath "${openssl_root_win}")"
|
|
|
|
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
|
options=''
|
|
[[ "${TARGET:-}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture'
|
|
[ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}"
|
|
[ "${PRJ_CFG}" = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG='
|
|
[ "${PRJ_CFG}" = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE='
|
|
[[ "${PRJ_GEN}" = *'Visual Studio'* ]] && options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false'
|
|
if [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ]; then
|
|
[ "${DEBUG}" = 'ON' ] && [ "${SHARED}" = 'ON' ] && SKIP_RUN='Crash on startup in ENABLE_DEBUG=ON shared builds'
|
|
# Fails to run without this due to missing MSVCR90.dll / MSVCR90D.dll
|
|
options+=' -DCURL_STATIC_CRT=ON'
|
|
fi
|
|
# shellcheck disable=SC2086
|
|
cmake -B _bld "-G${PRJ_GEN}" ${TARGET:-} ${options} \
|
|
"-DCURL_USE_OPENSSL=${OPENSSL}" \
|
|
"-DCURL_USE_SCHANNEL=${SCHANNEL}" \
|
|
"-DHTTP_ONLY=${HTTP_ONLY}" \
|
|
"-DBUILD_SHARED_LIBS=${SHARED}" \
|
|
"-DBUILD_TESTING=${TESTING}" \
|
|
"-DENABLE_WEBSOCKETS=${WEBSOCKETS:-}" \
|
|
"-DCMAKE_UNITY_BUILD=${UNITY}" \
|
|
'-DCURL_WERROR=ON' \
|
|
"-DENABLE_DEBUG=${DEBUG}" \
|
|
"-DENABLE_UNICODE=${ENABLE_UNICODE}" \
|
|
'-DCMAKE_INSTALL_PREFIX=C:/curl' \
|
|
"-DCMAKE_BUILD_TYPE=${PRJ_CFG}"
|
|
# shellcheck disable=SC2086
|
|
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 -- ${BUILD_OPT:-}
|
|
if [ "${SHARED}" = 'ON' ]; then
|
|
cp -f -p _bld/lib/*.dll _bld/src/
|
|
fi
|
|
if [ "${OPENSSL}" = 'ON' ]; then
|
|
cp -f -p "${openssl_root}"/*.dll _bld/src/
|
|
fi
|
|
curl='_bld/src/curl.exe'
|
|
elif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then
|
|
(
|
|
cd projects
|
|
./generate.bat "${VC_VERSION}"
|
|
msbuild.exe -maxcpucount "-property:Configuration=${PRJ_CFG}" "Windows/${VC_VERSION}/curl-all.sln"
|
|
)
|
|
curl="build/Win32/${VC_VERSION}/${PRJ_CFG}/curld.exe"
|
|
elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2015' ]; then
|
|
./buildconf.bat
|
|
(
|
|
cd winbuild
|
|
cat << EOF > _make.bat
|
|
call "C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.cmd" /x64
|
|
call "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat" x86_amd64
|
|
nmake -f Makefile.vc mode=dll VC=14 "SSL_PATH=${openssl_root_win}" WITH_SSL=dll MACHINE=x64 DEBUG=${DEBUG} ENABLE_UNICODE=${ENABLE_UNICODE}
|
|
EOF
|
|
./_make.bat
|
|
rm _make.bat
|
|
)
|
|
curl="builds/libcurl-vc14-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe"
|
|
elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2017' ]; then
|
|
./buildconf.bat
|
|
(
|
|
cd winbuild
|
|
cat << EOF > _make.bat
|
|
call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat"
|
|
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} ENABLE_WEBSOCKETS=yes
|
|
EOF
|
|
./_make.bat
|
|
rm _make.bat
|
|
)
|
|
curl="builds/libcurl-vc14.10-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe"
|
|
fi
|
|
|
|
find . -name '*.exe' -o -name '*.dll'
|
|
if [ -z "${SKIP_RUN:-}" ]; then
|
|
"${curl}" --disable --version
|
|
else
|
|
echo "Skip running curl.exe. Reason: ${SKIP_RUN}"
|
|
fi
|
|
|
|
if false; then
|
|
for log in CMakeFiles/CMakeConfigureLog.yaml CMakeFiles/CMakeOutput.log CMakeFiles/CMakeError.log; do
|
|
[ -r "_bld/${log}" ] && cat "_bld/${log}"
|
|
done
|
|
fi
|
|
|
|
# test
|
|
|
|
if [ "${TESTING}" = 'ON' ]; then
|
|
export TFLAGS=''
|
|
if [ -x "$(cygpath "${SYSTEMROOT}/System32/curl.exe")" ]; then
|
|
TFLAGS+=" -ac $(cygpath "${SYSTEMROOT}/System32/curl.exe")"
|
|
elif [ -x "$(cygpath 'C:/msys64/usr/bin/curl.exe')" ]; then
|
|
TFLAGS+=" -ac $(cygpath 'C:/msys64/usr/bin/curl.exe')"
|
|
fi
|
|
TFLAGS+=" ${DISABLED_TESTS:-}"
|
|
if [ "${BUILD_SYSTEM}" = 'CMake' ]; then
|
|
cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps
|
|
ls _bld/lib/*.dll >/dev/null 2>&1 && cp -f -p _bld/lib/*.dll _bld/tests/libtest/
|
|
cmake --build _bld --config "${PRJ_CFG}" --target test-ci
|
|
else
|
|
(
|
|
TFLAGS="-a -p !flaky -r -rm ${TFLAGS}"
|
|
cd _bld/tests
|
|
./runtests.pl
|
|
)
|
|
fi
|
|
fi
|