xref: /aosp_15_r20/external/libpng/ci/ci_verify_version.sh (revision a67afe4df73cf47866eedc69947994b8ff839aba)
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