blob: 4cc874f1cafe38bf53b1a7b403d5075920e52685 [file] [log] [blame]
#!/bin/sh
set -e
PYCRC=`dirname $0`/../pycrc.py
outdir_old="/tmp/pycrc_out"
outdir_new="/tmp/pycrc_new"
tarfile="pycrc_files.tar.gz"
usage() {
echo >&2 "usage: $0 [OPTIONS]"
echo >&2 ""
echo >&2 "with OPTIONS in"
echo >&2 " -c check the generated output"
echo >&2 " -g generate the database"
echo >&2 " -n no cleanup: don't delete the directories with the generated code"
echo >&2 " -h this help message"
}
opt_check=off
opt_no_cleanup=off
opt_generate=off
while getopts cgnh opt; do
case "$opt" in
c) opt_check=on;;
g) opt_generate=on;;
n) opt_no_cleanup=on;;
h) usage
exit 0
;;
\?) usage # unknown flag
exit 1
;;
esac
done
shift `expr $OPTIND - 1`
if [ -e "$outdir_old" ]; then
echo >&2 "Output directory $outdir_old exists!"
exit 1
fi
if [ -e "$outdir_new" ]; then
echo >&2 "Output directory $outdir_new exists!"
exit 1
fi
cleanup() {
if [ "$opt_no_cleanup" = "on" ]; then
echo "No cleanup. Please delete $outdir_old and $outdir_new when you're done"
else
rm -rf "$outdir_old" "$outdir_new"
fi
}
trap cleanup 0 1 2 3 15
generate() {
outfile="$1"
shift
$PYCRC "$@" -o "${outfile}"
sed -i -e 's/Generated on ... ... .. ..:..:.. ..../Generated on XXX XXX XX XX:XX:XX XXXX/; s/by pycrc v[0-9.]*/by pycrc vXXX/;' "${outfile}"
}
populate() {
outdir=$1
mkdir -p "$outdir"
models=`PYTHONPATH=.. python -c 'import pycrc.models as m; print(" ".join(m.CrcModels().names()))'`
for model in "undefined" $models; do
for algo in "bbb" "bbf" "tbl"; do
for cstd in c98 c99; do
if [ "$model" = "undefined" ]; then
mod_opt=
else
mod_opt="--model=${model}"
fi
generate "${outdir}/${model}_${algo}_${cstd}.h" --generate=h --algorithm=${algo} $mod_opt
generate "${outdir}/${model}_${algo}_${cstd}.c" --generate=c --algorithm=${algo} $mod_opt
done
done
done
algo=tbl
for model in crc-32; do
for slice in 4 8 16; do
for cstd in c98 c99; do
generate "${outdir}/${model}_${algo}_sb${slice}_${cstd}.h" --generate=h --algorithm=${algo} --model=${model} --slice-by ${slice}
generate "${outdir}/${model}_${algo}_sb${slice}_${cstd}.c" --generate=c --algorithm=${algo} --model=${model} --slice-by ${slice}
done
done
done
}
do_check() {
tar xzf "$tarfile" -C "`dirname $outdir_new`"
populate "$outdir_new"
diff -ru "$outdir_old" "$outdir_new"
}
if [ "$opt_check" = "on" ]; then
if [ ! -f "$tarfile" ]; then
echo >&2 "Can't find tarfile $tarfile"
exit 1
fi
do_check
fi
if [ "$opt_generate" = "on" ]; then
populate "$outdir_old"
dirname="`dirname $outdir_old`"
basename="`basename $outdir_old`"
tar czf "$tarfile" -C "$dirname" "$basename"
fi