Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/bc/gen/strgen.sh
39481 views
1
#! /bin/sh
2
#
3
# SPDX-License-Identifier: BSD-2-Clause
4
#
5
# Copyright (c) 2018-2025 Gavin D. Howard and contributors.
6
#
7
# Redistribution and use in source and binary forms, with or without
8
# modification, are permitted provided that the following conditions are met:
9
#
10
# * Redistributions of source code must retain the above copyright notice, this
11
# list of conditions and the following disclaimer.
12
#
13
# * Redistributions in binary form must reproduce the above copyright notice,
14
# this list of conditions and the following disclaimer in the documentation
15
# and/or other materials provided with the distribution.
16
#
17
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
30
export LANG=C
31
export LC_CTYPE=C
32
33
progname=${0##*/}
34
35
script="$0"
36
scriptdir=$(dirname "$script")
37
. "$scriptdir/../scripts/functions.sh"
38
39
# Just print the usage and exit with an error. This can receive a message to
40
# print.
41
# @param 1 A message to print.
42
usage() {
43
if [ $# -eq 1 ]; then
44
printf '%s\n\n' "$1"
45
fi
46
printf 'usage: %s input output exclude name [label [define [remove_tabs]]]\n' "$progname"
47
exit 1
48
}
49
50
# See strgen.c comment on main() for what these mean. Note, however, that this
51
# script generates a string literal, not a char array. To understand the
52
# consequences of that, see manuals/development.md#strgenc.
53
if [ $# -lt 3 ]; then
54
usage "Not enough arguments"
55
fi
56
57
input="$1"
58
check_file_arg "$input"
59
output="$2"
60
exclude="$3"
61
name="$4"
62
label="$5"
63
define="$6"
64
remove_tabs="$7"
65
if [ "$remove_tabs" != "" ]; then
66
check_bool_arg "$remove_tabs"
67
fi
68
69
tmpinput=$(mktemp -t "${input##*/}_XXXXXX")
70
71
if [ "$exclude" -ne 0 ]; then
72
filter_text "$input" "$tmpinput" "E"
73
else
74
filter_text "$input" "$tmpinput" "A"
75
fi
76
77
exec < "$tmpinput"
78
exec > "$output"
79
80
rm -f "$tmpinput"
81
82
if [ -n "$label" ]; then
83
nameline="const char *${label} = \"${input}\";"
84
labelexternline="extern const char *${label};"
85
fi
86
87
if [ -n "$define" ]; then
88
condstart="#if ${define}"
89
condend="#endif"
90
fi
91
92
if [ -n "$remove_tabs" ]; then
93
if [ "$remove_tabs" -ne 0 ]; then
94
remtabsexpr='s: ::g;'
95
fi
96
fi
97
98
cat<<EOF
99
// Copyright (c) 2018-2025 Gavin D. Howard and contributors.
100
// Licensed under the 2-clause BSD license.
101
// *** AUTOMATICALLY GENERATED FROM ${input}. DO NOT MODIFY. ***
102
103
${condstart}
104
$labelexternline
105
106
extern const char $name[];
107
108
$nameline
109
110
const char ${name}[] =
111
$(sed -e "$remtabsexpr " -e '1,/^$/d; s:\\n:\\\\n:g; s:":\\":g; s:^:":; s:$:\\n":')
112
;
113
${condend}
114
EOF
115
116
#if [ "$exclude" -ne 0 ]; then
117
#rm -rf "$input"
118
#fi
119
120