mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00

Work around a limitation in the `shellcheck source` directive, which does not recognize quotes in shellcheck versions older than 0.9. Also extend the checks for YAML files over the entire source tree, in preparation for the introduction of the GitHub Actions config file.
93 lines
3.0 KiB
Bash
Executable File
93 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -o errexit -o pipefail -o posix
|
|
|
|
# Copyright (c) 2019-2024 Cosmin Truta.
|
|
#
|
|
# Use, modification and distribution are subject to the MIT License.
|
|
# Please see the accompanying file LICENSE_MIT.txt
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# shellcheck source=ci/lib/ci.lib.sh
|
|
source "$(dirname "$0")/lib/ci.lib.sh"
|
|
cd "$CI_TOPLEVEL_DIR"
|
|
|
|
function ci_shellify_c {
|
|
# Convert C preprocessor text, specifically originating
|
|
# from png.h, to shell scripting text.
|
|
# Select only the easy-to-parse definitions of PNG_LIBPNG_*.
|
|
sed -n -e '/^\# *define * PNG_LIBPNG_[^ ]* * ["0-9A-Za-z_]/ p' |
|
|
sed -e 's/^\# *define * PNG\([^ ]*\) * \([^ ]*\)/PNG\1=\2/' \
|
|
-e 's/=PNG\([0-9A-Za-z_]*\)/=\${PNG\1}/' \
|
|
-e 's/^\([^ ]*=[^ ]*\).*$/export \1;/'
|
|
}
|
|
|
|
function ci_shellify_autoconf {
|
|
# Convert autoconf (M4) text, specifically originating
|
|
# from configure.ac, to shell scripting text.
|
|
# Select only the easy-to-parse definitions of PNGLIB_*.
|
|
sed -n -e '/^ *PNGLIB_[^ ]*=[$"0-9A-Za-z_]/ p' |
|
|
sed -e 's/^ *PNG\([0-9A-Za-z_]*\)=\([^# ]*\).*$/PNG\1=\2/' \
|
|
-e 's/^\([^ ]*=[^ ]*\).*$/export \1;/'
|
|
}
|
|
|
|
function ci_shellify_cmake {
|
|
# Convert CMake lists text, specifically originating
|
|
# from CMakeLists.txt, to shell scripting text.
|
|
# Select only the easy-to-parse definitions of PNGLIB_*.
|
|
sed -n -e '/^ *set *(PNGLIB_[^ ]* * [$"0-9A-Za-z_].*)/ p' |
|
|
sed -e 's/^ *set *(PNG\([^ ]*\) * \([^() ]*\)).*$/PNG\1=\2/' \
|
|
-e 's/^\([^ ]*=[^ ]*\).*$/export \1;/'
|
|
}
|
|
|
|
function ci_shellify {
|
|
local arg filename
|
|
for arg in "$@"
|
|
do
|
|
test -f "$arg" || ci_err "no such file: '$arg'"
|
|
filename="$(basename -- "$arg")"
|
|
case "$filename" in
|
|
( *.[ch] )
|
|
[[ $filename == png.h ]] || {
|
|
ci_err "unable to shellify: '$filename' (expecting: 'png.h')"
|
|
}
|
|
ci_shellify_c <"$arg" ;;
|
|
( config* | *.ac )
|
|
[[ $filename == configure.ac ]] || {
|
|
ci_err "unable to shellify: '$filename' (expecting: 'configure.ac')"
|
|
}
|
|
ci_shellify_autoconf <"$arg" ;;
|
|
( *CMake* | *cmake* | *.txt )
|
|
[[ $filename == [Cc][Mm]ake[Ll]ists.txt ]] || {
|
|
ci_err "unable to shellify: '$filename' (expecting: 'CMakeLists.txt')"
|
|
}
|
|
ci_shellify_cmake <"$arg" ;;
|
|
( * )
|
|
ci_err "unable to shellify: '$arg'" ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function usage {
|
|
echo "usage: $CI_SCRIPT_NAME [<options>] <files>..."
|
|
echo "options: -?|-h|--help"
|
|
echo "files: png.h|configure.ac|CMakeLists.txt"
|
|
exit "${@:-0}"
|
|
}
|
|
|
|
function main {
|
|
local opt
|
|
while getopts ":" opt
|
|
do
|
|
# This ain't a while-loop. It only pretends to be.
|
|
[[ $1 == -[?h]* || $1 == --help || $1 == --help=* ]] && usage 0
|
|
ci_err "unknown option: '$1'"
|
|
done
|
|
shift $((OPTIND - 1))
|
|
[[ $# -eq 0 ]] && usage 2
|
|
# And... go!
|
|
ci_shellify "$@"
|
|
}
|
|
|
|
main "$@"
|