You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.6 KiB
88 lines
1.6 KiB
#!/bin/sh |
|
|
|
INFILE=$1 |
|
|
|
if [ "X${INFILE}" = "X" ] |
|
then |
|
echo "Usage: $0 abispec" |
|
exit 1 |
|
fi |
|
|
|
if [ ! -f "${INFILE}" ] |
|
then |
|
echo "$0: ${INFILE}: not found" |
|
exit 1 |
|
fi |
|
|
|
ABI=abi.c |
|
HEADER=abi.lh |
|
|
|
|
|
# This is pretty evil. We use sed to produce shell commands which set |
|
# variables which contain 8-character chunks of the sha1 hash. |
|
# eval takes care of defining them in the current shell, rather than in |
|
# a subshell. |
|
for VER in `sha1 -n ${INFILE} | sed 's/\(........\)\(........\)\(........\)\(........\)\(........\).*$/ABIVER1=\1 ABIVER2=\2 ABIVER3=\3 ABIVER4=\4 ABIVER5=\5/'` |
|
do |
|
eval ${VER} |
|
done |
|
|
|
|
|
FNCOUNT=0 |
|
|
|
do_function() |
|
{ |
|
echo " vm_intfn_${ARG1}," >>${ABI} |
|
echo "fndefint ${ARG1} ${FNCOUNT};" >>${HEADER} |
|
FNCOUNT=$((${FNCOUNT}+1)) |
|
} |
|
|
|
do_function_v() |
|
{ |
|
echo " vm_intfn_${ARG1}," >>${ABI} |
|
echo "fndefint_v ${ARG1} ${FNCOUNT};" >>${HEADER} |
|
FNCOUNT=$((${FNCOUNT}+1)) |
|
} |
|
|
|
cat <<EOF >${ABI} |
|
/* abi.c */ |
|
/* autogenerated - do not edit */ |
|
|
|
#include "abi.h" |
|
|
|
const long vm_abiversion1 = 0x${ABIVER1}; |
|
const long vm_abiversion2 = 0x${ABIVER2}; |
|
const long vm_abiversion3 = 0x${ABIVER3}; |
|
const long vm_abiversion4 = 0x${ABIVER4}; |
|
const long vm_abiversion5 = 0x${ABIVER5}; |
|
|
|
vm_intfn vm_intfn_table[] = { |
|
EOF |
|
|
|
cat <<EOF >${HEADER} |
|
/* abi.lh */ |
|
/* autogenerated - do not edit */ |
|
|
|
constant __abiversion1 0x${ABIVER1}; |
|
constant __abiversion2 0x${ABIVER2}; |
|
constant __abiversion3 0x${ABIVER3}; |
|
constant __abiversion4 0x${ABIVER4}; |
|
constant __abiversion5 0x${ABIVER5}; |
|
|
|
EOF |
|
|
|
while read TYPE ARG1 ARG2 |
|
do |
|
case "$TYPE" in |
|
function) do_function |
|
;; |
|
function_v) do_function_v |
|
;; |
|
esac |
|
done <${INFILE} |
|
|
|
cat <<EOF >>${ABI} |
|
}; |
|
|
|
const int vm_intfn_size = sizeof(vm_intfn_table) / sizeof(vm_intfn); |
|
EOF
|
|
|