1 #! /bin/sh 2 3 # Test checking of GCC internal format strings. 4 5 tmpfiles="" 6 trap 'rm -fr $tmpfiles' 1 2 3 15 7 8 tmpfiles="$tmpfiles f-gi-2.data" 9 cat <<\EOF > f-gi-2.data 10 # Valid: %% doesn't count 11 msgid "abc%%def" 12 msgstr "xyz" 13 # Valid: %< doesn't count 14 msgid "abc%<def" 15 msgstr "xyz" 16 # Valid: %> doesn't count 17 msgid "abc%>def" 18 msgstr "xyz" 19 # Valid: %' doesn't count 20 msgid "abc%'def" 21 msgstr "xyz" 22 # Invalid: %m consumes err_no 23 msgid "abc%mdef" 24 msgstr "xyz" 25 # Invalid: %m consumes err_no 26 msgid "abc" 27 msgstr "xyz%muvw" 28 # Invalid: invalid msgstr 29 msgid "abc%%def" 30 msgstr "xyz%" 31 # Valid: same arguments 32 msgid "abc%s%Hdef" 33 msgstr "xyz%s%H" 34 # Valid: same arguments, with different flags 35 msgid "abc%s%Hdef" 36 msgstr "xyz%qs%qH" 37 # Valid: same arguments, with different widths 38 msgid "abc%.*sdef" 39 msgstr "xyz%i%s" 40 # Valid: same arguments but in numbered syntax 41 msgid "abc%s%ddef" 42 msgstr "xyz%1$s%2$d" 43 # Valid: permutation 44 msgid "abc%s%d%cdef" 45 msgstr "xyz%3$c%2$d%1$s" 46 # Valid: permutation with width 47 msgid "abc%c%.*sdef" 48 msgstr "xyz%3$.*2$s%1$c" 49 # Invalid: too few arguments 50 msgid "abc%sdef%u" 51 msgstr "xyz%s" 52 # Invalid: too many arguments 53 msgid "abc%udef" 54 msgstr "xyz%uvw%c" 55 # Valid: same numbered arguments, with different widths 56 msgid "abc%2$5s%1$4s" 57 msgstr "xyz%2$4s%1$5s" 58 # Invalid: missing argument 59 msgid "abc%2$sdef%1$u" 60 msgstr "xyz%1$u" 61 # Invalid: missing argument 62 msgid "abc%1$sdef%2$u" 63 msgstr "xyz%2$u" 64 # Invalid: added argument 65 msgid "abc%1$udef" 66 msgstr "xyz%1$uvw%2$c" 67 # Valid: type compatibility 68 msgid "abc%i" 69 msgstr "xyz%d" 70 # Valid: type compatibility 71 msgid "abc%o" 72 msgstr "xyz%u" 73 # Valid: type compatibility 74 msgid "abc%u" 75 msgstr "xyz%x" 76 # Invalid: type incompatibility 77 msgid "abc%c" 78 msgstr "xyz%s" 79 # Invalid: type incompatibility 80 msgid "abc%c" 81 msgstr "xyz%i" 82 # Invalid: type incompatibility 83 msgid "abc%c" 84 msgstr "xyz%u" 85 # Invalid: type incompatibility 86 msgid "abc%c" 87 msgstr "xyz%p" 88 # Invalid: type incompatibility 89 msgid "abc%c" 90 msgstr "xyz%H" 91 # Invalid: type incompatibility 92 msgid "abc%c" 93 msgstr "xyz%D" 94 # Invalid: type incompatibility 95 msgid "abc%c" 96 msgstr "xyz%F" 97 # Invalid: type incompatibility 98 msgid "abc%c" 99 msgstr "xyz%T" 100 # Invalid: type incompatibility 101 msgid "abc%c" 102 msgstr "xyz%A" 103 # Invalid: type incompatibility 104 msgid "abc%c" 105 msgstr "xyz%C" 106 # Invalid: type incompatibility 107 msgid "abc%c" 108 msgstr "xyz%E" 109 # Invalid: type incompatibility 110 msgid "abc%c" 111 msgstr "xyz%L" 112 # Invalid: type incompatibility 113 msgid "abc%c" 114 msgstr "xyz%O" 115 # Invalid: type incompatibility 116 msgid "abc%c" 117 msgstr "xyz%P" 118 # Invalid: type incompatibility 119 msgid "abc%c" 120 msgstr "xyz%Q" 121 # Invalid: type incompatibility 122 msgid "abc%c" 123 msgstr "xyz%V" 124 # Invalid: type incompatibility 125 msgid "abc%s" 126 msgstr "xyz%i" 127 # Invalid: type incompatibility 128 msgid "abc%s" 129 msgstr "xyz%u" 130 # Invalid: type incompatibility 131 msgid "abc%s" 132 msgstr "xyz%p" 133 # Invalid: type incompatibility 134 msgid "abc%s" 135 msgstr "xyz%H" 136 # Invalid: type incompatibility 137 msgid "abc%s" 138 msgstr "xyz%D" 139 # Invalid: type incompatibility 140 msgid "abc%s" 141 msgstr "xyz%F" 142 # Invalid: type incompatibility 143 msgid "abc%s" 144 msgstr "xyz%T" 145 # Invalid: type incompatibility 146 msgid "abc%s" 147 msgstr "xyz%A" 148 # Invalid: type incompatibility 149 msgid "abc%s" 150 msgstr "xyz%C" 151 # Invalid: type incompatibility 152 msgid "abc%s" 153 msgstr "xyz%E" 154 # Invalid: type incompatibility 155 msgid "abc%s" 156 msgstr "xyz%L" 157 # Invalid: type incompatibility 158 msgid "abc%s" 159 msgstr "xyz%O" 160 # Invalid: type incompatibility 161 msgid "abc%s" 162 msgstr "xyz%P" 163 # Invalid: type incompatibility 164 msgid "abc%s" 165 msgstr "xyz%Q" 166 # Invalid: type incompatibility 167 msgid "abc%s" 168 msgstr "xyz%V" 169 # Invalid: type incompatibility 170 msgid "abc%i" 171 msgstr "xyz%u" 172 # Invalid: type incompatibility 173 msgid "abc%i" 174 msgstr "xyz%p" 175 # Invalid: type incompatibility 176 msgid "abc%i" 177 msgstr "xyz%H" 178 # Invalid: type incompatibility 179 msgid "abc%i" 180 msgstr "xyz%D" 181 # Invalid: type incompatibility 182 msgid "abc%i" 183 msgstr "xyz%F" 184 # Invalid: type incompatibility 185 msgid "abc%i" 186 msgstr "xyz%T" 187 # Invalid: type incompatibility 188 msgid "abc%i" 189 msgstr "xyz%A" 190 # Invalid: type incompatibility 191 msgid "abc%i" 192 msgstr "xyz%C" 193 # Invalid: type incompatibility 194 msgid "abc%i" 195 msgstr "xyz%E" 196 # Invalid: type incompatibility 197 msgid "abc%i" 198 msgstr "xyz%L" 199 # Invalid: type incompatibility 200 msgid "abc%i" 201 msgstr "xyz%O" 202 # Invalid: type incompatibility 203 msgid "abc%i" 204 msgstr "xyz%P" 205 # Invalid: type incompatibility 206 msgid "abc%i" 207 msgstr "xyz%Q" 208 # Invalid: type incompatibility 209 msgid "abc%i" 210 msgstr "xyz%V" 211 # Invalid: type incompatibility 212 msgid "abc%u" 213 msgstr "xyz%p" 214 # Invalid: type incompatibility 215 msgid "abc%u" 216 msgstr "xyz%H" 217 # Invalid: type incompatibility 218 msgid "abc%u" 219 msgstr "xyz%D" 220 # Invalid: type incompatibility 221 msgid "abc%u" 222 msgstr "xyz%F" 223 # Invalid: type incompatibility 224 msgid "abc%u" 225 msgstr "xyz%T" 226 # Invalid: type incompatibility 227 msgid "abc%u" 228 msgstr "xyz%A" 229 # Invalid: type incompatibility 230 msgid "abc%u" 231 msgstr "xyz%C" 232 # Invalid: type incompatibility 233 msgid "abc%u" 234 msgstr "xyz%E" 235 # Invalid: type incompatibility 236 msgid "abc%u" 237 msgstr "xyz%L" 238 # Invalid: type incompatibility 239 msgid "abc%u" 240 msgstr "xyz%O" 241 # Invalid: type incompatibility 242 msgid "abc%u" 243 msgstr "xyz%P" 244 # Invalid: type incompatibility 245 msgid "abc%u" 246 msgstr "xyz%Q" 247 # Invalid: type incompatibility 248 msgid "abc%u" 249 msgstr "xyz%V" 250 # Invalid: type incompatibility 251 msgid "abc%p" 252 msgstr "xyz%H" 253 # Invalid: type incompatibility 254 msgid "abc%p" 255 msgstr "xyz%D" 256 # Invalid: type incompatibility 257 msgid "abc%p" 258 msgstr "xyz%F" 259 # Invalid: type incompatibility 260 msgid "abc%p" 261 msgstr "xyz%T" 262 # Invalid: type incompatibility 263 msgid "abc%p" 264 msgstr "xyz%A" 265 # Invalid: type incompatibility 266 msgid "abc%p" 267 msgstr "xyz%C" 268 # Invalid: type incompatibility 269 msgid "abc%p" 270 msgstr "xyz%E" 271 # Invalid: type incompatibility 272 msgid "abc%p" 273 msgstr "xyz%L" 274 # Invalid: type incompatibility 275 msgid "abc%p" 276 msgstr "xyz%O" 277 # Invalid: type incompatibility 278 msgid "abc%p" 279 msgstr "xyz%P" 280 # Invalid: type incompatibility 281 msgid "abc%p" 282 msgstr "xyz%Q" 283 # Invalid: type incompatibility 284 msgid "abc%p" 285 msgstr "xyz%V" 286 # Invalid: type incompatibility 287 msgid "abc%H" 288 msgstr "xyz%D" 289 # Invalid: type incompatibility 290 msgid "abc%H" 291 msgstr "xyz%F" 292 # Invalid: type incompatibility 293 msgid "abc%H" 294 msgstr "xyz%T" 295 # Invalid: type incompatibility 296 msgid "abc%H" 297 msgstr "xyz%A" 298 # Invalid: type incompatibility 299 msgid "abc%H" 300 msgstr "xyz%C" 301 # Invalid: type incompatibility 302 msgid "abc%H" 303 msgstr "xyz%E" 304 # Invalid: type incompatibility 305 msgid "abc%H" 306 msgstr "xyz%L" 307 # Invalid: type incompatibility 308 msgid "abc%H" 309 msgstr "xyz%O" 310 # Invalid: type incompatibility 311 msgid "abc%H" 312 msgstr "xyz%P" 313 # Invalid: type incompatibility 314 msgid "abc%H" 315 msgstr "xyz%Q" 316 # Invalid: type incompatibility 317 msgid "abc%H" 318 msgstr "xyz%V" 319 # Invalid: type incompatibility 320 msgid "abc%D" 321 msgstr "xyz%F" 322 # Invalid: type incompatibility 323 msgid "abc%D" 324 msgstr "xyz%T" 325 # Invalid: type incompatibility 326 msgid "abc%D" 327 msgstr "xyz%A" 328 # Invalid: type incompatibility 329 msgid "abc%D" 330 msgstr "xyz%C" 331 # Invalid: type incompatibility 332 msgid "abc%D" 333 msgstr "xyz%E" 334 # Invalid: type incompatibility 335 msgid "abc%D" 336 msgstr "xyz%L" 337 # Invalid: type incompatibility 338 msgid "abc%D" 339 msgstr "xyz%O" 340 # Invalid: type incompatibility 341 msgid "abc%D" 342 msgstr "xyz%P" 343 # Invalid: type incompatibility 344 msgid "abc%D" 345 msgstr "xyz%Q" 346 # Invalid: type incompatibility 347 msgid "abc%D" 348 msgstr "xyz%V" 349 # Invalid: type incompatibility 350 msgid "abc%F" 351 msgstr "xyz%T" 352 # Invalid: type incompatibility 353 msgid "abc%F" 354 msgstr "xyz%A" 355 # Invalid: type incompatibility 356 msgid "abc%F" 357 msgstr "xyz%C" 358 # Invalid: type incompatibility 359 msgid "abc%F" 360 msgstr "xyz%E" 361 # Invalid: type incompatibility 362 msgid "abc%F" 363 msgstr "xyz%L" 364 # Invalid: type incompatibility 365 msgid "abc%F" 366 msgstr "xyz%O" 367 # Invalid: type incompatibility 368 msgid "abc%F" 369 msgstr "xyz%P" 370 # Invalid: type incompatibility 371 msgid "abc%F" 372 msgstr "xyz%Q" 373 # Invalid: type incompatibility 374 msgid "abc%F" 375 msgstr "xyz%V" 376 # Invalid: type incompatibility 377 msgid "abc%T" 378 msgstr "xyz%A" 379 # Invalid: type incompatibility 380 msgid "abc%T" 381 msgstr "xyz%C" 382 # Invalid: type incompatibility 383 msgid "abc%T" 384 msgstr "xyz%E" 385 # Invalid: type incompatibility 386 msgid "abc%T" 387 msgstr "xyz%L" 388 # Invalid: type incompatibility 389 msgid "abc%T" 390 msgstr "xyz%O" 391 # Invalid: type incompatibility 392 msgid "abc%T" 393 msgstr "xyz%P" 394 # Invalid: type incompatibility 395 msgid "abc%T" 396 msgstr "xyz%Q" 397 # Invalid: type incompatibility 398 msgid "abc%T" 399 msgstr "xyz%V" 400 # Invalid: type incompatibility 401 msgid "abc%A" 402 msgstr "xyz%C" 403 # Invalid: type incompatibility 404 msgid "abc%A" 405 msgstr "xyz%E" 406 # Invalid: type incompatibility 407 msgid "abc%A" 408 msgstr "xyz%L" 409 # Invalid: type incompatibility 410 msgid "abc%A" 411 msgstr "xyz%O" 412 # Invalid: type incompatibility 413 msgid "abc%A" 414 msgstr "xyz%P" 415 # Invalid: type incompatibility 416 msgid "abc%A" 417 msgstr "xyz%Q" 418 # Invalid: type incompatibility 419 msgid "abc%A" 420 msgstr "xyz%V" 421 # Invalid: type incompatibility 422 msgid "abc%C" 423 msgstr "xyz%E" 424 # Invalid: type incompatibility 425 msgid "abc%C" 426 msgstr "xyz%L" 427 # Invalid: type incompatibility 428 msgid "abc%C" 429 msgstr "xyz%O" 430 # Invalid: type incompatibility 431 msgid "abc%C" 432 msgstr "xyz%P" 433 # Invalid: type incompatibility 434 msgid "abc%C" 435 msgstr "xyz%Q" 436 # Invalid: type incompatibility 437 msgid "abc%C" 438 msgstr "xyz%V" 439 # Invalid: type incompatibility 440 msgid "abc%E" 441 msgstr "xyz%L" 442 # Invalid: type incompatibility 443 msgid "abc%E" 444 msgstr "xyz%O" 445 # Invalid: type incompatibility 446 msgid "abc%E" 447 msgstr "xyz%P" 448 # Invalid: type incompatibility 449 msgid "abc%E" 450 msgstr "xyz%Q" 451 # Invalid: type incompatibility 452 msgid "abc%E" 453 msgstr "xyz%V" 454 # Invalid: type incompatibility 455 msgid "abc%L" 456 msgstr "xyz%O" 457 # Invalid: type incompatibility 458 msgid "abc%L" 459 msgstr "xyz%P" 460 # Invalid: type incompatibility 461 msgid "abc%L" 462 msgstr "xyz%Q" 463 # Invalid: type incompatibility 464 msgid "abc%L" 465 msgstr "xyz%V" 466 # Invalid: type incompatibility 467 msgid "abc%O" 468 msgstr "xyz%P" 469 # Invalid: type incompatibility 470 msgid "abc%O" 471 msgstr "xyz%Q" 472 # Invalid: type incompatibility 473 msgid "abc%O" 474 msgstr "xyz%V" 475 # Invalid: type incompatibility 476 msgid "abc%P" 477 msgstr "xyz%Q" 478 # Invalid: type incompatibility 479 msgid "abc%P" 480 msgstr "xyz%V" 481 # Invalid: type incompatibility 482 msgid "abc%Q" 483 msgstr "xyz%V" 484 # Invalid: type incompatibility due to size 485 msgid "abc%i" 486 msgstr "xyz%li" 487 # Invalid: type incompatibility due to size 488 msgid "abc%i" 489 msgstr "xyz%lli" 490 # Invalid: type incompatibility due to size 491 msgid "abc%i" 492 msgstr "xyz%wi" 493 # Invalid: type incompatibility due to size 494 msgid "abc%li" 495 msgstr "xyz%lli" 496 # Invalid: type incompatibility due to size 497 msgid "abc%li" 498 msgstr "xyz%wi" 499 # Invalid: type incompatibility due to size 500 msgid "abc%lli" 501 msgstr "xyz%wi" 502 # Invalid: type incompatibility for width 503 msgid "abc%.*s" 504 msgstr "xyz%u%s" 505 EOF 506 507 : ${MSGFMT=msgfmt} 508 n=0 509 while read comment; do 510 read msgid_line 511 read msgstr_line 512 n=`expr $n + 1` 513 tmpfiles="$tmpfiles f-gi-2-$n.po f-gi-2-$n.mo" 514 cat <<EOF > f-gi-2-$n.po 515 #, gcc-internal-format 516 ${msgid_line} 517 ${msgstr_line} 518 EOF 519 fail= 520 if echo "$comment" | grep 'Valid:' > /dev/null; then 521 if ${MSGFMT} --check-format -o f-gi-2-$n.mo f-gi-2-$n.po; then 522 : 523 else 524 fail=yes 525 fi 526 else 527 ${MSGFMT} --check-format -o f-gi-2-$n.mo f-gi-2-$n.po 2> /dev/null 528 if test $? = 1; then 529 : 530 else 531 fail=yes 532 fi 533 fi 534 if test -n "$fail"; then 535 echo "Format string checking error:" 1>&2 536 cat f-gi-2-$n.po 1>&2 537 exit 1 538 fi 539 rm -f f-gi-2-$n.po f-gi-2-$n.mo 540 done < f-gi-2.data 541 542 rm -fr $tmpfiles 543 544 exit 0 545