Home | History | Annotate | Line # | Download | only in tests
      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