1*a67afe4dSAndroid Build Coastguard Worker#!/usr/bin/env bash 2*a67afe4dSAndroid Build Coastguard Workerset -o errexit -o pipefail -o posix 3*a67afe4dSAndroid Build Coastguard Worker 4*a67afe4dSAndroid Build Coastguard Worker# Copyright (c) 2019-2024 Cosmin Truta. 5*a67afe4dSAndroid Build Coastguard Worker# 6*a67afe4dSAndroid Build Coastguard Worker# Use, modification and distribution are subject to the MIT License. 7*a67afe4dSAndroid Build Coastguard Worker# Please see the accompanying file LICENSE_MIT.txt 8*a67afe4dSAndroid Build Coastguard Worker# 9*a67afe4dSAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 10*a67afe4dSAndroid Build Coastguard Worker 11*a67afe4dSAndroid Build Coastguard Worker# shellcheck source=ci/lib/ci.lib.sh 12*a67afe4dSAndroid Build Coastguard Workersource "$(dirname "$0")/lib/ci.lib.sh" 13*a67afe4dSAndroid Build Coastguard Workercd "$CI_TOPLEVEL_DIR" 14*a67afe4dSAndroid Build Coastguard Worker 15*a67afe4dSAndroid Build Coastguard Workerfunction ci_shellify_c { 16*a67afe4dSAndroid Build Coastguard Worker # Convert C preprocessor text, specifically originating 17*a67afe4dSAndroid Build Coastguard Worker # from png.h, to shell scripting text. 18*a67afe4dSAndroid Build Coastguard Worker # Select only the easy-to-parse definitions of PNG_LIBPNG_*. 19*a67afe4dSAndroid Build Coastguard Worker sed -n -e '/^\# *define * PNG_LIBPNG_[^ ]* * ["0-9A-Za-z_]/ p' | 20*a67afe4dSAndroid Build Coastguard Worker sed -e 's/^\# *define * PNG\([^ ]*\) * \([^ ]*\)/PNG\1=\2/' \ 21*a67afe4dSAndroid Build Coastguard Worker -e 's/=PNG\([0-9A-Za-z_]*\)/=\${PNG\1}/' \ 22*a67afe4dSAndroid Build Coastguard Worker -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' 23*a67afe4dSAndroid Build Coastguard Worker} 24*a67afe4dSAndroid Build Coastguard Worker 25*a67afe4dSAndroid Build Coastguard Workerfunction ci_shellify_autoconf { 26*a67afe4dSAndroid Build Coastguard Worker # Convert autoconf (M4) text, specifically originating 27*a67afe4dSAndroid Build Coastguard Worker # from configure.ac, to shell scripting text. 28*a67afe4dSAndroid Build Coastguard Worker # Select only the easy-to-parse definitions of PNGLIB_*. 29*a67afe4dSAndroid Build Coastguard Worker sed -n -e '/^ *PNGLIB_[^ ]*=[$"0-9A-Za-z_]/ p' | 30*a67afe4dSAndroid Build Coastguard Worker sed -e 's/^ *PNG\([0-9A-Za-z_]*\)=\([^# ]*\).*$/PNG\1=\2/' \ 31*a67afe4dSAndroid Build Coastguard Worker -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' 32*a67afe4dSAndroid Build Coastguard Worker} 33*a67afe4dSAndroid Build Coastguard Worker 34*a67afe4dSAndroid Build Coastguard Workerfunction ci_shellify_cmake { 35*a67afe4dSAndroid Build Coastguard Worker # Convert CMake lists text, specifically originating 36*a67afe4dSAndroid Build Coastguard Worker # from CMakeLists.txt, to shell scripting text. 37*a67afe4dSAndroid Build Coastguard Worker # Select only the easy-to-parse definitions of PNGLIB_*. 38*a67afe4dSAndroid Build Coastguard Worker sed -n -e '/^ *set *(PNGLIB_[^ ]* * [$"0-9A-Za-z_].*)/ p' | 39*a67afe4dSAndroid Build Coastguard Worker sed -e 's/^ *set *(PNG\([^ ]*\) * \([^() ]*\)).*$/PNG\1=\2/' \ 40*a67afe4dSAndroid Build Coastguard Worker -e 's/^\([^ ]*=[^ ]*\).*$/export \1;/' 41*a67afe4dSAndroid Build Coastguard Worker} 42*a67afe4dSAndroid Build Coastguard Worker 43*a67afe4dSAndroid Build Coastguard Workerfunction ci_shellify { 44*a67afe4dSAndroid Build Coastguard Worker local arg filename 45*a67afe4dSAndroid Build Coastguard Worker for arg in "$@" 46*a67afe4dSAndroid Build Coastguard Worker do 47*a67afe4dSAndroid Build Coastguard Worker test -f "$arg" || ci_err "no such file: '$arg'" 48*a67afe4dSAndroid Build Coastguard Worker filename="$(basename -- "$arg")" 49*a67afe4dSAndroid Build Coastguard Worker case "$filename" in 50*a67afe4dSAndroid Build Coastguard Worker ( *.[ch] ) 51*a67afe4dSAndroid Build Coastguard Worker [[ $filename == png.h ]] || { 52*a67afe4dSAndroid Build Coastguard Worker ci_err "unable to shellify: '$filename' (expecting: 'png.h')" 53*a67afe4dSAndroid Build Coastguard Worker } 54*a67afe4dSAndroid Build Coastguard Worker ci_shellify_c <"$arg" ;; 55*a67afe4dSAndroid Build Coastguard Worker ( config* | *.ac ) 56*a67afe4dSAndroid Build Coastguard Worker [[ $filename == configure.ac ]] || { 57*a67afe4dSAndroid Build Coastguard Worker ci_err "unable to shellify: '$filename' (expecting: 'configure.ac')" 58*a67afe4dSAndroid Build Coastguard Worker } 59*a67afe4dSAndroid Build Coastguard Worker ci_shellify_autoconf <"$arg" ;; 60*a67afe4dSAndroid Build Coastguard Worker ( *CMake* | *cmake* | *.txt ) 61*a67afe4dSAndroid Build Coastguard Worker [[ $filename == [Cc][Mm]ake[Ll]ists.txt ]] || { 62*a67afe4dSAndroid Build Coastguard Worker ci_err "unable to shellify: '$filename' (expecting: 'CMakeLists.txt')" 63*a67afe4dSAndroid Build Coastguard Worker } 64*a67afe4dSAndroid Build Coastguard Worker ci_shellify_cmake <"$arg" ;; 65*a67afe4dSAndroid Build Coastguard Worker ( * ) 66*a67afe4dSAndroid Build Coastguard Worker ci_err "unable to shellify: '$arg'" ;; 67*a67afe4dSAndroid Build Coastguard Worker esac 68*a67afe4dSAndroid Build Coastguard Worker done 69*a67afe4dSAndroid Build Coastguard Worker} 70*a67afe4dSAndroid Build Coastguard Worker 71*a67afe4dSAndroid Build Coastguard Workerfunction usage { 72*a67afe4dSAndroid Build Coastguard Worker echo "usage: $CI_SCRIPT_NAME [<options>] <files>..." 73*a67afe4dSAndroid Build Coastguard Worker echo "options: -?|-h|--help" 74*a67afe4dSAndroid Build Coastguard Worker echo "files: png.h|configure.ac|CMakeLists.txt" 75*a67afe4dSAndroid Build Coastguard Worker exit "${@:-0}" 76*a67afe4dSAndroid Build Coastguard Worker} 77*a67afe4dSAndroid Build Coastguard Worker 78*a67afe4dSAndroid Build Coastguard Workerfunction main { 79*a67afe4dSAndroid Build Coastguard Worker local opt 80*a67afe4dSAndroid Build Coastguard Worker while getopts ":" opt 81*a67afe4dSAndroid Build Coastguard Worker do 82*a67afe4dSAndroid Build Coastguard Worker # This ain't a while-loop. It only pretends to be. 83*a67afe4dSAndroid Build Coastguard Worker [[ $1 == -[?h]* || $1 == --help || $1 == --help=* ]] && usage 0 84*a67afe4dSAndroid Build Coastguard Worker ci_err "unknown option: '$1'" 85*a67afe4dSAndroid Build Coastguard Worker done 86*a67afe4dSAndroid Build Coastguard Worker shift $((OPTIND - 1)) 87*a67afe4dSAndroid Build Coastguard Worker [[ $# -eq 0 ]] && usage 2 88*a67afe4dSAndroid Build Coastguard Worker # And... go! 89*a67afe4dSAndroid Build Coastguard Worker ci_shellify "$@" 90*a67afe4dSAndroid Build Coastguard Worker} 91*a67afe4dSAndroid Build Coastguard Worker 92*a67afe4dSAndroid Build Coastguard Workermain "$@" 93