forked from kiss-community/repo
134 lines
3.0 KiB
Bash
Executable File
134 lines
3.0 KiB
Bash
Executable File
#!/bin/sh -eu
|
|
|
|
# Run `sed -e 's|}$|},|' -e 's|,.*[A-Z]$|&,|' -e 's|, |, |g'` on the perl
|
|
# output for an accurate diff
|
|
|
|
exec > "$2"
|
|
|
|
cat << EOF
|
|
/* THIS IS A GENERATED FILE */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef BUILTINS_H
|
|
#include "builtins.h"
|
|
#endif /* BUILTINS_H */
|
|
|
|
EOF
|
|
|
|
tolower()
|
|
{
|
|
tr '[:upper:]' '[:lower:]' << EOF
|
|
$1
|
|
EOF
|
|
}
|
|
|
|
count()
|
|
{
|
|
tr -dc "$2" << EOF | wc -m
|
|
$1
|
|
EOF
|
|
}
|
|
|
|
while read -r attr typ val; do
|
|
case $attr in
|
|
''|\#*|BEGINDATA) continue
|
|
esac
|
|
|
|
case $typ in
|
|
CK_*) printf 'static const %s %s = %s;\n' "$typ" "$(tolower "$val")" "$val";
|
|
esac
|
|
done < "$1" | sort -u
|
|
|
|
cnt=0
|
|
while read -r attr typ val; do
|
|
case $attr in
|
|
''|\#*|BEGINDATA) continue ;;
|
|
CKA_CLASS)
|
|
[ "$cnt" -eq 0 ] || printf '\n};\n'
|
|
printf 'static const CK_ATTRIBUTE_TYPE nss_builtins_types_%d [] = {\n' \
|
|
"$((cnt += 1))"
|
|
;;
|
|
esac
|
|
|
|
case $attr in CKA_*)
|
|
printf ' %s,' "$attr"
|
|
esac
|
|
done < "$1"
|
|
printf '\n};\n'
|
|
|
|
cnt=0
|
|
is_multiline_octal=0
|
|
datasz=0
|
|
while read -r attr typ val; do
|
|
case $attr in
|
|
''|\#*|BEGINDATA) continue ;;
|
|
CKA_CLASS)
|
|
[ "$cnt" -eq 0 ] || printf '};\n'
|
|
printf 'static const NSSItem nss_builtins_items_%d [] = {\n' \
|
|
"$((cnt += 1))"
|
|
;;
|
|
esac
|
|
|
|
if [ "$is_multiline_octal" = 1 ]; then
|
|
case $attr in
|
|
END)
|
|
printf ', (PRUint32)%d },\n' "$datasz"
|
|
is_multiline_octal=0
|
|
datasz=0
|
|
;;
|
|
*)
|
|
printf '"%s"\n' "$attr"
|
|
: $((datasz += $(count "$attr" '\')))
|
|
;;
|
|
esac
|
|
continue
|
|
fi
|
|
|
|
case $typ in
|
|
UTF8)
|
|
strsz="$(printf '%s' "$val" | wc -c)"
|
|
: $((strsz -= 2)) # ""
|
|
: $((strsz += 1)) # \0
|
|
printf ' { (void *)%s, (PRUint32)%d },\n' \
|
|
"$val" "$strsz"
|
|
;;
|
|
MULTILINE_OCTAL)
|
|
is_multiline_octal=1
|
|
datasz=0
|
|
printf ' { (void *)'
|
|
;;
|
|
*)
|
|
printf ' { (void *)&%s, (PRUint32)sizeof(%s) },\n' \
|
|
"$(tolower "$val")" "$typ"
|
|
;;
|
|
esac
|
|
done < "$1"
|
|
printf '};\n'
|
|
|
|
printf "\nbuiltinsInternalObject\nnss_builtins_data[] = {\n";
|
|
|
|
cnt=0
|
|
objsize=0
|
|
while read -r attr typ val; do
|
|
case $attr in
|
|
''|\#*|BEGINDATA) continue ;;
|
|
CKA_CLASS)
|
|
[ "$cnt" = 0 ] || printf " { %d, nss_builtins_types_%d, nss_builtins_items_%d, {NULL} },\n" \
|
|
"$objsize" "$cnt" "$cnt"
|
|
objsize=0
|
|
: $((cnt += 1))
|
|
;;
|
|
esac
|
|
|
|
case $attr in CKA_*)
|
|
: $((objsize += 1))
|
|
esac
|
|
done < "$1"
|
|
printf " { %d, nss_builtins_types_%d, nss_builtins_items_%d, {NULL} },\n" \
|
|
"$objsize" "$cnt" "$cnt"
|
|
printf '};\n'
|
|
|
|
printf 'const PRUint32\nnss_builtins_nObjects = %d;\n' "$cnt"
|