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