mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
The Unix paths in Bash do not mix well with the Windows paths in CMake.
The uppercase and the lowercase environment variables do not mix well
in MSBuild. Et cetera.
On AppVeyor CI, verification of Windows builds with the Visual Studio
toolchain used to work, perhaps due to one or more lucky coincidences,
but it stopped working after an upgrade on the AppVeyor CI site.
Update ci_cmake.sh as follows:
* Use POSIX commands like "mkdir" and "rm" instead of CMake commands
like "make_directory" and "remove_directory".
* Avoid using absolute paths in the CMake command line; use relative
paths that are accessible from both Bash and Windows.
* Clean up incidental mixtures of Windows and Bash-on-Windows
environment variables like {$TEMP,$Temp,$temp} and {$TMP,$Tmp,$tmp}.
128 lines
5.3 KiB
Bash
Executable File
128 lines
5.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# ci_cmake.sh
|
|
# Continuously integrate libpng using CMake.
|
|
#
|
|
# Copyright (c) 2019-2020 Cosmin Truta.
|
|
#
|
|
# This software is released under the libpng license.
|
|
# For conditions of distribution and use, see the disclaimer
|
|
# and license in png.h.
|
|
|
|
readonly CI_SCRIPTNAME="$(basename "$0")"
|
|
readonly CI_SCRIPTDIR="$(cd "$(dirname "$0")" && pwd)"
|
|
readonly CI_SRCDIR="$(dirname "$CI_SCRIPTDIR")"
|
|
readonly CI_BUILDDIR="$CI_SRCDIR/out/cmake.build"
|
|
readonly CI_INSTALLDIR="$CI_SRCDIR/out/cmake.install"
|
|
readonly CI_SRCDIR_REL_BUILDDIR="../.."
|
|
readonly CI_INSTALLDIR_REL_BUILDDIR="../../out/cmake.install"
|
|
|
|
function ci_info {
|
|
printf >&2 "%s: %s\\n" "$CI_SCRIPTNAME" "$*"
|
|
}
|
|
|
|
function ci_err {
|
|
printf >&2 "%s: error: %s\\n" "$CI_SCRIPTNAME" "$*"
|
|
exit 2
|
|
}
|
|
|
|
function ci_spawn {
|
|
printf >&2 "%s: executing:" "$CI_SCRIPTNAME"
|
|
printf >&2 " %q" "$@"
|
|
printf >&2 "\\n"
|
|
"$@"
|
|
}
|
|
|
|
function ci_init_cmake {
|
|
# Initialize the CI_ variables with default values, where applicable.
|
|
CI_CMAKE="${CI_CMAKE:-cmake}"
|
|
CI_CTEST="${CI_CTEST:-ctest}"
|
|
[[ $(uname -s || echo unknown) == Darwin ]] && CI_CC="${CI_CC:-clang}"
|
|
CI_CMAKE_BUILD_TYPE="${CI_CMAKE_BUILD_TYPE:-Release}"
|
|
# Print the CI_ variables.
|
|
ci_info "source directory: $CI_SRCDIR"
|
|
ci_info "build directory: $CI_BUILDDIR"
|
|
ci_info "install directory: $CI_INSTALLDIR"
|
|
ci_info "environment option: \$CI_CMAKE='$CI_CMAKE'"
|
|
ci_info "environment option: \$CI_CMAKE_GENERATOR='$CI_CMAKE_GENERATOR'"
|
|
ci_info "environment option: \$CI_CMAKE_GENERATOR_PLATFORM='$CI_CMAKE_GENERATOR_PLATFORM'"
|
|
ci_info "environment option: \$CI_CMAKE_BUILD_TYPE='$CI_CMAKE_BUILD_TYPE'"
|
|
ci_info "environment option: \$CI_CMAKE_BUILD_FLAGS='$CI_CMAKE_BUILD_FLAGS'"
|
|
ci_info "environment option: \$CI_CMAKE_VARS='$CI_CMAKE_VARS'"
|
|
ci_info "environment option: \$CI_CTEST='$CI_CTEST'"
|
|
ci_info "environment option: \$CI_CTEST_FLAGS='$CI_CTEST_FLAGS'"
|
|
ci_info "environment option: \$CI_CC='$CI_CC'"
|
|
ci_info "environment option: \$CI_CC_FLAGS='$CI_CC_FLAGS'"
|
|
ci_info "environment option: \$CI_AR='$CI_AR'"
|
|
ci_info "environment option: \$CI_RANLIB='$CI_RANLIB'"
|
|
ci_info "environment option: \$CI_SANITIZERS='$CI_SANITIZERS'"
|
|
ci_info "environment option: \$CI_NO_TEST='$CI_NO_TEST'"
|
|
ci_info "environment option: \$CI_NO_INSTALL='$CI_NO_INSTALL'"
|
|
ci_info "environment option: \$CI_NO_CLEAN='$CI_NO_CLEAN'"
|
|
# Print the CMake/CTest program versions.
|
|
ci_spawn "$(command -v "$CI_CMAKE")" --version
|
|
ci_spawn "$(command -v "$CI_CTEST")" --version
|
|
}
|
|
|
|
function ci_build_cmake {
|
|
# Initialize ALL_CC_FLAGS as a string.
|
|
local ALL_CC_FLAGS="$CI_CC_FLAGS"
|
|
[[ $CI_SANITIZERS ]] && ALL_CC_FLAGS="-fsanitize=$CI_SANITIZERS $ALL_CC_FLAGS"
|
|
# Initialize ALL_CMAKE_VARS, ALL_CMAKE_BUILD_FLAGS and ALL_CTEST_FLAGS as arrays.
|
|
local -a ALL_CMAKE_VARS=()
|
|
[[ $CI_CC ]] && ALL_CMAKE_VARS+=(-DCMAKE_C_COMPILER="$CI_CC")
|
|
[[ $ALL_CC_FLAGS ]] && ALL_CMAKE_VARS+=(-DCMAKE_C_FLAGS="$ALL_CC_FLAGS")
|
|
[[ $CI_AR ]] && ALL_CMAKE_VARS+=(-DCMAKE_AR="$CI_AR")
|
|
[[ $CI_RANLIB ]] && ALL_CMAKE_VARS+=(-DCMAKE_RANLIB="$CI_RANLIB")
|
|
ALL_CMAKE_VARS+=(-DCMAKE_BUILD_TYPE="$CI_CMAKE_BUILD_TYPE")
|
|
ALL_CMAKE_VARS+=(-DCMAKE_VERBOSE_MAKEFILE=ON)
|
|
[[ $CI_NO_TEST ]] && ALL_CMAKE_VARS+=(-DPNG_TESTS=OFF)
|
|
ALL_CMAKE_VARS+=($CI_CMAKE_VARS)
|
|
local -a ALL_CMAKE_BUILD_FLAGS=($CI_CMAKE_BUILD_FLAGS)
|
|
local -a ALL_CTEST_FLAGS=($CI_CTEST_FLAGS)
|
|
# Export the CMake build environment.
|
|
[[ $CI_CMAKE_GENERATOR ]] &&
|
|
ci_spawn export CMAKE_GENERATOR="$CI_CMAKE_GENERATOR"
|
|
[[ $CI_CMAKE_GENERATOR_PLATFORM ]] &&
|
|
ci_spawn export CMAKE_GENERATOR_PLATFORM="$CI_CMAKE_GENERATOR_PLATFORM"
|
|
# Fix the build environment, if necessary.
|
|
[[ $CI_CMAKE_GENERATOR == "Visual Studio "* ]] && {
|
|
# Clean up incidental mixtures of Windows and Bash-on-Windows
|
|
# environment variables, to avoid confusing MSBuild.
|
|
[[ $TEMP && ( $Temp || $temp ) ]] && unset TEMP
|
|
[[ $TMP && ( $Tmp || $tmp ) ]] && unset TMP
|
|
}
|
|
# Build and install.
|
|
ci_spawn rm -fr "$CI_BUILDDIR" "$CI_INSTALLDIR"
|
|
ci_spawn mkdir -p "$CI_BUILDDIR"
|
|
ci_spawn cd "$CI_BUILDDIR"
|
|
ci_spawn "$CI_CMAKE" "${ALL_CMAKE_VARS[@]}" \
|
|
-DCMAKE_INSTALL_PREFIX="$CI_INSTALLDIR_REL_BUILDDIR" \
|
|
"$CI_SRCDIR_REL_BUILDDIR"
|
|
ci_spawn "$CI_CMAKE" --build . \
|
|
--config "$CI_CMAKE_BUILD_TYPE" \
|
|
"${ALL_CMAKE_BUILD_FLAGS[@]}"
|
|
[[ $CI_NO_TEST ]] ||
|
|
ci_spawn "$CI_CTEST" --build-config "$CI_CMAKE_BUILD_TYPE" \
|
|
"${ALL_CTEST_FLAGS[@]}"
|
|
[[ $CI_NO_INSTALL ]] ||
|
|
ci_spawn "$CI_CMAKE" --build . \
|
|
--config "$CI_CMAKE_BUILD_TYPE" \
|
|
--target install \
|
|
"${ALL_CMAKE_BUILD_FLAGS[@]}"
|
|
[[ $CI_NO_CLEAN ]] ||
|
|
ci_spawn "$CI_CMAKE" --build . \
|
|
--config "$CI_CMAKE_BUILD_TYPE" \
|
|
--target clean \
|
|
"${ALL_CMAKE_BUILD_FLAGS[@]}"
|
|
ci_info "success!"
|
|
}
|
|
|
|
ci_init_cmake
|
|
[[ ! $* ]] || {
|
|
ci_info "note: this program accepts environment options only"
|
|
ci_err "unexpected command arguments: '$*'"
|
|
}
|
|
ci_build_cmake
|