From eb90a60afe0ee5aa6c4e5716946d4735747a857f Mon Sep 17 00:00:00 2001 From: pierre Date: Wed, 18 Apr 2012 10:31:29 +0000 Subject: [PATCH] New test for sysnr.inc system error numbers git-svn-id: trunk@20914 - --- .gitattributes | 1 + rtl/unix/scripts/check_errno.sh | 129 ++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100755 rtl/unix/scripts/check_errno.sh diff --git a/.gitattributes b/.gitattributes index 0d1f7d0820..04abd496c1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8375,6 +8375,7 @@ rtl/unix/oscdeclh.inc svneol=native#text/plain rtl/unix/ports.pp svneol=native#text/plain rtl/unix/printer.pp svneol=native#text/plain rtl/unix/scripts/README svneol=native#text/plain +rtl/unix/scripts/check_errno.sh svneol=native#text/plain rtl/unix/scripts/check_sys.sh svneol=native#text/plain rtl/unix/serial.pp svneol=native#text/plain rtl/unix/settimeo.inc svneol=native#text/plain diff --git a/rtl/unix/scripts/check_errno.sh b/rtl/unix/scripts/check_errno.sh new file mode 100755 index 0000000000..0411b1bab4 --- /dev/null +++ b/rtl/unix/scripts/check_errno.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env bash + +# Small script to test fpc to system error numbers + +if [ "$1" == "verbose" ] ; then + verbose=1 + echo "Being verbose" + shift +else + verbose=0 +fi + +# Location of error number in system header + +errno_header="/usr/include/asm-generic/errno-base.h /usr/include/asm-generic/errno.h" +errno_include=./errno.inc + +# Sustitution made to pass from fpc syscall number +# to system define +fpc_errno_prefix=ESysE +errno_prefix=E + +# Test C file to grab all loaded headers +cat > test-errno.c < + +int +main () +{ + return 0; +} +EOF + +# Default C compiler is gcc +# Can be overwritten by setting CC variable +# But I don't know if other compilers also generate +# .i files with --save-temps option +if [ "$CC" == "" ] ; then + CC=gcc +fi + +# Use gcc with --save-temps option to create .i file +$CC --save-temps -o test-errno ./test-errno.c +# list of errno.h headers listed +errno_headers=` sed -n "s:.*\"\(.*\.h\)\".*:\1:p" test-errno.i |sort | uniq` +echo "Headers found are \"$errno_headers\"" + +if [ "$errno_headers" != "" ] ; then + errno_header="$errno_headers" +fi + + +# You should only need to change the variables above + +sed -n "s:^[ \t]*${fpc_errno_prefix}\\([_a-zA-Z0-9]*\\)[ \t]*=[ \t]*\\([0-9]*\\).*:check_errno_number ${errno_prefix}\1 \2:p" ${errno_include} > check_errno_list.sh +sed -n "s:#define[ \t]*${errno_prefix}\\([_a-zA-Z0-9]*\\)[ \t][ \t]*\\([0-9]*\\).*:check_reverse_errno_number ${fpc_errno_prefix}\1 \2:p" ${errno_header} > check_reverse_errno_list.sh + +function check_errno_number () +{ + sys=$1 + value=$2 + if [ $verbose -ne 0 ] ; then + echo Testing $sys value $value + fi + # Remember value of this constant + eval ${sys}=${value} + + found=`sed -n "/#define[ \t][ \t]*${sys}[^A-Za-z0-9_]/p" ${errno_header}` + val=`sed -n "s:#define[ \t][ \t]*${sys}[^A-Za-z0-9_][^A-Za-z0-9_]*\([0-9]*\).*:\1:p" ${errno_header}` + extval=`sed -n "s:#define[ \t][ \t]*${sys}[^A-Za-z0-9_][^A-Za-z0-9_]*\([0-9A-Za-z_]*\).*:\1:p" ${errno_header}` + if [ $verbose -ne 0 ] ; then + echo Test for $sys found \"${found}\" \"${value}\" \"${val}\" + fi + if [ "${val}" == "${value}" ] ; then + if [ $verbose -ne 0 ] ; then + echo ${sys} value ${val} is correct + fi + else + if [ "${val}" == "" ] ; then + foundvalue=`sed -n "/#define.*[^A-Za-z0-9_]${value}$/p" ${errno_header}` + if [ "${foundvalue}" == "" ] ; then + foundvalue=`sed -n "s:\/\* ${value} is compa: ${value} is compa:p" ${errno_header}` + fi + fi + if [ "$extval" != "" ] ; then + eval indirectval=\$$extval + echo "indirectval =\"$indirectval\"" + if [ "$indirectval" != "$value" ] ; then + echo problem for ${sys} expected ${value}, line is \"${found}\", val found is \"${indirectval}\" + else + echo "$sys is defined as $extval which is $indirectval as expected $value" + fi + else + problem for ${sys} expected ${value}, line is \"${found}\", val found is \"${val}\" + fi + fi +} + +addtoerrno=0 +errnonew=./errno-new.inc + +function check_reverse_errno_number () +{ + errname=$1 + errvalue=$2 + found=`grep -i -w $1 ${errno_include}` + if [ "${found}" == "" ] ; then + echo "Error ${errname}, value ${errvalue}, not in ${errno_include} file" + if [ $addtoerrno -eq 0 ] ; then + addtoerrno=1 + echo "{ List of missing system error number found in $errno_header }" > $errnonew + fi + echo " $errname = $errvalue;" >> $errnonew + fi +} + +set -f +echo "Checking all entries of ${errno_include} file" +source ./check_errno_list.sh + +echo "Checking all defines from \"$errno_header\"" +source ./check_reverse_errno_list.sh + +if [ $addtoerrno -eq 1 ] ; then + echo " Missing error number found" + echo " New values are in \"$errnonew\" + echo You might want to add these lines to \"$errno\"" +fi +