ci_verify_version.sh 6.7 KB

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