1252884aeSStefan Eßer#! /bin/sh 2252884aeSStefan Eßer# 33aa99676SStefan Eßer# SPDX-License-Identifier: BSD-2-Clause 4252884aeSStefan Eßer# 5*a970610aSStefan Eßer# Copyright (c) 2018-2024 Gavin D. Howard and contributors. 6252884aeSStefan Eßer# 7252884aeSStefan Eßer# Redistribution and use in source and binary forms, with or without 8252884aeSStefan Eßer# modification, are permitted provided that the following conditions are met: 9252884aeSStefan Eßer# 10252884aeSStefan Eßer# * Redistributions of source code must retain the above copyright notice, this 11252884aeSStefan Eßer# list of conditions and the following disclaimer. 12252884aeSStefan Eßer# 13252884aeSStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice, 14252884aeSStefan Eßer# this list of conditions and the following disclaimer in the documentation 15252884aeSStefan Eßer# and/or other materials provided with the distribution. 16252884aeSStefan Eßer# 17252884aeSStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18252884aeSStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19252884aeSStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20252884aeSStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21252884aeSStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22252884aeSStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23252884aeSStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24252884aeSStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25252884aeSStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26252884aeSStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27252884aeSStefan Eßer# POSSIBILITY OF SUCH DAMAGE. 28252884aeSStefan Eßer# 29252884aeSStefan Eßer 30252884aeSStefan Eßerexport LANG=C 31252884aeSStefan Eßerexport LC_CTYPE=C 32252884aeSStefan Eßer 33252884aeSStefan Eßerprogname=${0##*/} 34252884aeSStefan Eßer 3578bc019dSStefan Eßerscript="$0" 3678bc019dSStefan Eßerscriptdir=$(dirname "$script") 3778bc019dSStefan Eßer. "$scriptdir/../scripts/functions.sh" 3878bc019dSStefan Eßer 394fca8e0fSStefan Eßer# Just print the usage and exit with an error. This can receive a message to 404fca8e0fSStefan Eßer# print. 414fca8e0fSStefan Eßer# @param 1 A message to print. 424fca8e0fSStefan Eßerusage() { 434fca8e0fSStefan Eßer if [ $# -eq 1 ]; then 444fca8e0fSStefan Eßer printf '%s\n\n' "$1" 454fca8e0fSStefan Eßer fi 464fca8e0fSStefan Eßer printf 'usage: %s input output exclude name [label [define [remove_tabs]]]\n' "$progname" 474fca8e0fSStefan Eßer exit 1 484fca8e0fSStefan Eßer} 494fca8e0fSStefan Eßer 5044d4804dSStefan Eßer# See strgen.c comment on main() for what these mean. Note, however, that this 5144d4804dSStefan Eßer# script generates a string literal, not a char array. To understand the 5244d4804dSStefan Eßer# consequences of that, see manuals/development.md#strgenc. 5350696a6eSStefan Eßerif [ $# -lt 3 ]; then 544fca8e0fSStefan Eßer usage "Not enough arguments" 55252884aeSStefan Eßerfi 56252884aeSStefan Eßer 57252884aeSStefan Eßerinput="$1" 584fca8e0fSStefan Eßercheck_file_arg "$input" 59252884aeSStefan Eßeroutput="$2" 6078bc019dSStefan Eßerexclude="$3" 6178bc019dSStefan Eßername="$4" 6278bc019dSStefan Eßerlabel="$5" 6378bc019dSStefan Eßerdefine="$6" 6478bc019dSStefan Eßerremove_tabs="$7" 65103d7cdfSStefan Eßerif [ "$remove_tabs" != "" ]; then 664fca8e0fSStefan Eßer check_bool_arg "$remove_tabs" 67103d7cdfSStefan Eßerfi 68252884aeSStefan Eßer 69d101cdd6SStefan Eßertmpinput=$(mktemp -t "${input##*/}_XXXXXX") 7078bc019dSStefan Eßer 7178bc019dSStefan Eßerif [ "$exclude" -ne 0 ]; then 7278bc019dSStefan Eßer filter_text "$input" "$tmpinput" "E" 7378bc019dSStefan Eßerelse 7478bc019dSStefan Eßer filter_text "$input" "$tmpinput" "A" 7578bc019dSStefan Eßerfi 7678bc019dSStefan Eßer 7778bc019dSStefan Eßerexec < "$tmpinput" 78252884aeSStefan Eßerexec > "$output" 79252884aeSStefan Eßer 8078bc019dSStefan Eßerrm -f "$tmpinput" 8178bc019dSStefan Eßer 82252884aeSStefan Eßerif [ -n "$label" ]; then 83252884aeSStefan Eßer nameline="const char *${label} = \"${input}\";" 8450696a6eSStefan Eßer labelexternline="extern const char *${label};" 85252884aeSStefan Eßerfi 86252884aeSStefan Eßer 87252884aeSStefan Eßerif [ -n "$define" ]; then 88252884aeSStefan Eßer condstart="#if ${define}" 89252884aeSStefan Eßer condend="#endif" 90252884aeSStefan Eßerfi 91252884aeSStefan Eßer 92252884aeSStefan Eßerif [ -n "$remove_tabs" ]; then 93252884aeSStefan Eßer if [ "$remove_tabs" -ne 0 ]; then 94252884aeSStefan Eßer remtabsexpr='s: ::g;' 95252884aeSStefan Eßer fi 96252884aeSStefan Eßerfi 97252884aeSStefan Eßer 98252884aeSStefan Eßercat<<EOF 99*a970610aSStefan Eßer// Copyright (c) 2018-2024 Gavin D. Howard and contributors. 100252884aeSStefan Eßer// Licensed under the 2-clause BSD license. 101252884aeSStefan Eßer// *** AUTOMATICALLY GENERATED FROM ${input}. DO NOT MODIFY. *** 102252884aeSStefan Eßer 103252884aeSStefan Eßer${condstart} 10450696a6eSStefan Eßer$labelexternline 10550696a6eSStefan Eßer 10650696a6eSStefan Eßerextern const char $name[]; 107252884aeSStefan Eßer 108252884aeSStefan Eßer$nameline 109252884aeSStefan Eßer 110252884aeSStefan Eßerconst char ${name}[] = 111252884aeSStefan Eßer$(sed -e "$remtabsexpr " -e '1,/^$/d; s:\\n:\\\\n:g; s:":\\":g; s:^:":; s:$:\\n":') 112252884aeSStefan Eßer; 113252884aeSStefan Eßer${condend} 114252884aeSStefan EßerEOF 11578bc019dSStefan Eßer 11678bc019dSStefan Eßer#if [ "$exclude" -ne 0 ]; then 11778bc019dSStefan Eßer #rm -rf "$input" 11878bc019dSStefan Eßer#fi 119