1#! /bin/sh 2. "${srcdir=.}/init.sh"; path_prepend_ . ../src 3 4# Test recognition of GCC internal format strings. 5 6cat <<\EOF > f-gi-1.data 7# Valid: no argument 8"abc%%" 9# Valid: no argument 10"abc%<" 11# Valid: no argument 12"abc%>" 13# Valid: no argument 14"abc%'" 15# Valid: no argument 16"abc%m" 17# Valid: one character argument 18"abc%c" 19# Valid: one string argument 20"abc%s" 21# Valid: one integer argument 22"abc%i" 23# Valid: one integer argument 24"abc%d" 25# Valid: one integer argument 26"abc%o" 27# Valid: one integer argument 28"abc%u" 29# Valid: one integer argument 30"abc%x" 31# Valid: one integer and one string argument 32"abc%.*s" 33# Valid: one pointer argument 34"abc%p" 35# Valid: one pointer argument 36"abc%H" 37# Valid: one pointer argument 38"%J" 39# Valid: %J not at start 40"abc%J" 41# Valid: %J with flags 42"%qJ" 43# Valid: %K with flags 44"%qK" 45# Valid: one pointer argument 46"abc%D" 47# Valid: one pointer argument 48"abc%F" 49# Valid: one pointer argument 50"abc%T" 51# Valid: one pointer argument 52"abc%A" 53# Valid: one pointer argument 54"abc%C" 55# Valid: one pointer argument 56"abc%E" 57# Valid: one pointer argument 58"abc%L" 59# Valid: one pointer argument 60"abc%O" 61# Valid: one pointer argument 62"abc%P" 63# Valid: one pointer argument 64"abc%Q" 65# Valid: one pointer argument 66"abc%V" 67# Valid: one argument with flags 68"abc%qdef" 69# Valid: one argument with flags 70"abc%+#Ag" 71# Valid: one argument with size specifier 72"abc%li" 73# Valid: one argument with size specifier 74"abc%lli" 75# Invalid: one argument with invalid size specifier 76"abc%llli" 77# Valid: one argument with size specifier 78"abc%wi" 79# Invalid: unterminated 80"abc%" 81# Invalid: unknown format specifier 82"abc%y" 83# Invalid: precision with non-string 84"abc%.*c" 85# Invalid: twice precision 86"abc%.*.*s" 87# Valid: three arguments 88"abc%d%u%u" 89# Valid: a numbered argument 90"abc%1$d" 91# Invalid: zero 92"abc%0$d" 93# Valid: two-digit numbered arguments 94"abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz" 95# Invalid: unterminated number 96"abc%1" 97# Invalid: flags before number 98"abc%+1$d" 99# Valid: three arguments, two with same number 100"abc%1$x,%2$c,%1$u" 101# Invalid: argument with conflicting types 102"abc%1$x,%2$c,%1$s" 103# Valid: no conflict 104"abc%1$x,%2$c,%1$u" 105# Invalid: mixing of numbered and unnumbered arguments 106"abc%d%2$x" 107# Valid: numbered argument with constant precision 108"abc%1$.9s" 109# Invalid: mixing of numbered and unnumbered arguments 110"abc%1$.*s" 111# Valid: missing non-final argument 112"abc%2$x%3$s" 113# Valid: permutation 114"abc%2$ddef%1$d" 115# Valid: multiple uses of same argument 116"abc%2$xdef%1$sghi%2$x" 117# Valid: one argument with precision 118"abc%2$#.*1$s" 119# Invalid: non-string argument with precision 120"abc%2$#.*1$d" 121# Invalid: one argument with width 122"abc%2$#*1$s" 123# Invalid: one argument with width and precision 124"abc%3$*2$.*1$s" 125# Invalid: zero 126"abc%1$#.*0$s" 127EOF 128 129: ${XGETTEXT=xgettext} 130n=0 131while read comment; do 132 read string 133 n=`expr $n + 1` 134 cat <<EOF > f-gi-1-$n.in 135gettext(${string}); 136EOF 137 ${XGETTEXT} -L GCC-source -o f-gi-1-$n.po f-gi-1-$n.in || Exit 1 138 test -f f-gi-1-$n.po || Exit 1 139 fail= 140 if echo "$comment" | grep 'Valid:' > /dev/null; then 141 if grep gcc-internal-format f-gi-1-$n.po > /dev/null; then 142 : 143 else 144 fail=yes 145 fi 146 else 147 if grep gcc-internal-format f-gi-1-$n.po > /dev/null; then 148 fail=yes 149 else 150 : 151 fi 152 fi 153 if test -n "$fail"; then 154 echo "Format string recognition error:" 1>&2 155 cat f-gi-1-$n.in 1>&2 156 echo "Got:" 1>&2 157 cat f-gi-1-$n.po 1>&2 158 Exit 1 159 fi 160 rm -f f-gi-1-$n.in f-gi-1-$n.po 161done < f-gi-1.data 162 163Exit 0 164