1#!/usr/bin/env bash 2set -o errexit -o pipefail -o posix 3 4# Copyright (c) 2019-2024 Cosmin Truta. 5# 6# Use, modification and distribution are subject to the MIT License. 7# Please see the accompanying file LICENSE_MIT.txt 8# 9# SPDX-License-Identifier: MIT 10 11# shellcheck source=ci/lib/ci.lib.sh 12source "$(dirname "$0")/lib/ci.lib.sh" 13cd "$CI_TOPLEVEL_DIR" 14 15function ci_init_shellify { 16 [[ -f $CI_SCRIPT_DIR/ci_shellify.sh ]] || { 17 ci_err_internal "missing script: '$CI_SCRIPT_DIR/ci_shellify.sh'" 18 } 19} 20 21function ci_run_shellify { 22 ci_info "shellifying:" "$@" 23 local my_result 24 "$BASH" "$CI_SCRIPT_DIR/ci_shellify.sh" "$@" 25 echo "$my_result" | "$BASH" --posix || ci_err "bad shellify output" 26 echo "$my_result" 27} 28 29function ci_verify_version { 30 ci_info "## START OF VERIFICATION ##" 31 local my_env_libpng_ver my_env_autoconf_ver my_env_cmake_ver my_expect 32 ci_init_shellify 33 my_env_libpng_ver="$(ci_run_shellify png.h)" 34 echo "$my_env_libpng_ver" 35 my_env_autoconf_ver="$(ci_run_shellify configure.ac)" 36 echo "$my_env_autoconf_ver" 37 my_env_cmake_ver="$(ci_run_shellify CMakeLists.txt)" 38 echo "$my_env_cmake_ver" 39 ci_info "## VERIFYING: png.h version definitions ##" 40 eval "$my_env_libpng_ver" 41 local my_expect="${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}" 42 if [[ "$PNG_LIBPNG_VER_STRING" == "$my_expect"* ]] 43 then 44 ci_info "matched: \$PNG_LIBPNG_VER_STRING == $my_expect*" 45 else 46 ci_err "mismatched: \$PNG_LIBPNG_VER_STRING != $my_expect*" 47 fi 48 my_expect=$((PNG_LIBPNG_VER_MAJOR*10000 + PNG_LIBPNG_VER_MINOR*100 + PNG_LIBPNG_VER_RELEASE)) 49 if [[ "$PNG_LIBPNG_VER" == "$my_expect" ]] 50 then 51 ci_info "matched: \$PNG_LIBPNG_VER == $my_expect" 52 else 53 ci_err "mismatched: \$PNG_LIBPNG_VER != $my_expect" 54 fi 55 my_expect=$((PNG_LIBPNG_VER_MAJOR*10 + PNG_LIBPNG_VER_MINOR)) 56 if [[ "$PNG_LIBPNG_VER_SHAREDLIB" == "$my_expect" ]] 57 then 58 ci_info "matched: \$PNG_LIBPNG_VER_SHAREDLIB == $my_expect" 59 else 60 ci_err "mismatched: \$PNG_LIBPNG_VER_SHAREDLIB != $my_expect" 61 fi 62 if [[ "$PNG_LIBPNG_VER_SONUM" == "$my_expect" ]] 63 then 64 ci_info "matched: \$PNG_LIBPNG_VER_SONUM == $my_expect" 65 else 66 ci_err "mismatched: \$PNG_LIBPNG_VER_SONUM != $my_expect" 67 fi 68 if [[ "$PNG_LIBPNG_VER_DLLNUM" == "$my_expect" ]] 69 then 70 ci_info "matched: \$PNG_LIBPNG_VER_DLLNUM == $my_expect" 71 else 72 ci_err "mismatched: \$PNG_LIBPNG_VER_DLLNUM != $my_expect" 73 fi 74 if [[ "$PNG_LIBPNG_VER_BUILD" == [01] ]] 75 then 76 ci_info "matched: \$PNG_LIBPNG_VER_BUILD == [01]" 77 else 78 ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD != [01]" 79 fi 80 ci_info "## VERIFYING: png.h build definitions ##" 81 my_expect="${PNG_LIBPNG_VER_MAJOR}.${PNG_LIBPNG_VER_MINOR}.${PNG_LIBPNG_VER_RELEASE}" 82 if [[ "$PNG_LIBPNG_VER_STRING" == "$my_expect" ]] 83 then 84 if [[ $PNG_LIBPNG_VER_BUILD -eq 0 ]] 85 then 86 ci_info "matched: \$PNG_LIBPNG_VER_BUILD -eq 0" 87 else 88 ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD -ne 0" 89 fi 90 if [[ $PNG_LIBPNG_BUILD_BASE_TYPE -eq $PNG_LIBPNG_BUILD_STABLE ]] 91 then 92 ci_info "matched: \$PNG_LIBPNG_BUILD_BASE_TYPE -eq \$PNG_LIBPNG_BUILD_BETA" 93 else 94 ci_err "mismatched: \$PNG_LIBPNG_BUILD_BASE_TYPE -ne \$PNG_LIBPNG_BUILD_BETA" 95 fi 96 elif [[ "$PNG_LIBPNG_VER_STRING" == "$my_expect".git ]] 97 then 98 if [[ $PNG_LIBPNG_VER_BUILD -ne 0 ]] 99 then 100 ci_info "matched: \$PNG_LIBPNG_VER_BUILD -ne 0" 101 else 102 ci_err "mismatched: \$PNG_LIBPNG_VER_BUILD -eq 0" 103 fi 104 if [[ $PNG_LIBPNG_BUILD_BASE_TYPE -eq $PNG_LIBPNG_BUILD_BETA ]] 105 then 106 ci_info "matched: \$PNG_LIBPNG_BUILD_BASE_TYPE -eq \$PNG_LIBPNG_BUILD_BETA" 107 else 108 ci_err "mismatched: \$PNG_LIBPNG_BUILD_BASE_TYPE -ne \$PNG_LIBPNG_BUILD_BETA" 109 fi 110 else 111 ci_err "unexpected: \$PNG_LIBPNG_VER_STRING == '$PNG_LIBPNG_VER_STRING'" 112 fi 113 ci_info "## VERIFYING: png.h type definitions ##" 114 my_expect="$(echo "png_libpng_version_${PNG_LIBPNG_VER_STRING}" | tr . _)" 115 ci_spawn grep -w -e "$my_expect" png.h 116 ci_info "## VERIFYING: configure.ac version definitions ##" 117 eval "$my_env_autoconf_ver" 118 if [[ "$PNGLIB_VERSION" == "$PNG_LIBPNG_VER_STRING" ]] 119 then 120 ci_info "matched: \$PNGLIB_VERSION == \$PNG_LIBPNG_VER_STRING" 121 else 122 ci_err "mismatched: \$PNGLIB_VERSION != \$PNG_LIBPNG_VER_STRING" 123 fi 124 ci_info "## VERIFYING: CMakeLists.txt version definitions ##" 125 eval "$my_env_cmake_ver" 126 if [[ "$PNGLIB_VERSION" == "$PNG_LIBPNG_VER_STRING" && "$PNGLIB_SUBREVISION" == 0 ]] 127 then 128 ci_info "matched: \$PNGLIB_VERSION == \$PNG_LIBPNG_VER_STRING" 129 ci_info "matched: \$PNGLIB_SUBREVISION == 0" 130 elif [[ "$PNGLIB_VERSION.$PNGLIB_SUBREVISION" == "$PNG_LIBPNG_VER_STRING" ]] 131 then 132 ci_info "matched: \$PNGLIB_VERSION.\$PNGLIB_SUBREVISION == \$PNG_LIBPNG_VER_STRING" 133 else 134 ci_err "mismatched: \$PNGLIB_VERSION != \$PNG_LIBPNG_VER_STRING" 135 fi 136 ci_info "## END OF VERIFICATION ##" 137 ci_info "success!" 138} 139 140function usage { 141 echo "usage: $CI_SCRIPT_NAME [<options>]" 142 echo "options: -?|-h|--help" 143 exit "${@:-0}" 144} 145 146function main { 147 local opt 148 while getopts ":" opt 149 do 150 # This ain't a while-loop. It only pretends to be. 151 [[ $1 == -[?h]* || $1 == --help || $1 == --help=* ]] && usage 0 152 ci_err "unknown option: '$1'" 153 done 154 shift $((OPTIND - 1)) 155 [[ $# -eq 0 ]] || { 156 echo >&2 "error: unexpected argument: '$1'" 157 usage 2 158 } 159 # And... go! 160 ci_verify_version 161} 162 163main "$@" 164