Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

#! /bin/sh

# Tests for the general string extraction facilities of the Perl backend
# (with option --extract-all).
                                                                                
tmpfiles=""
trap 'rm -fr $tmpfiles' 1 2 3 15

tmpfiles="$tmpfiles xg-pl-4.pl"
cat <<\EOPERL > xg-pl-4.pl
use strict;

# A double quoted string.
print "'Your command, please?', asked the waiter.\n";
# A double quoted string with interpolations.
my $polite = 'please';
print "'Your recommendation, $polite?', answered the guest.\n";
# A reference.
my $ref1 = \$polite;
my $ref2 = \$ref1;
my $ref3 = \$ref2;
print "Yes, $$$$ref3!\n";
# The qq operator and some of the more esoteric string interpolation
# features of Perl.
print (qq {\uU\lp \LaNd\E \ldo\lWn, \Uoh\E, yeah\Q!!!\E\\!\n});
# The q operator.
print q<E-Mail: <no@spam.org>.  >;
# Should not be found.
{ $polite =~ qr?le? }

# List interpolation.
print "Your Perl include path starts with '$INC[0]' and it " .
      "ends with '$INC[-1]'.  $#INC directories are searched.\n";
# Here documents.
print <<EOF, <<'EOF';
Line 1\nLine 2
EOF
Line 1\nStill line 1
EOF
# Perl code inside strings.
sub hello_func { return 'Hello' };
print "@{[hello_func]} world!\n";
# Backticks.
print `ls $0`;
print qx;ls $0;;

if (!defined($size = -s $filename)) {
  # The above s is part of the function -s, not 
  # the substitution operator!    
}

# The rest requires a Unicode aware Perl.
require 5.006;
print "\U\x70\LO\154\x{69}\x{004E}a \Q\lRu\LLeS\E\041\n";
# FIXME: The following should actually produce 'Polina4ka' in cyrillic letters.
#print "\u\x{43f}\L\x{41E}\x{43b}\x{418}\E\x{43d}" .
#      "\x{430}\x{447}\x{43a}\x{430}\n";
EOPERL

tmpfiles="$tmpfiles xg-pl-4.pot"
: ${XGETTEXT=xgettext}
LC_MESSAGES=C LC_ALL= \
${XGETTEXT} -a --omit-header --no-location -o xg-pl-4.pot xg-pl-4.pl
test $? = 0 || { rm -fr $tmpfiles; exit 1; }

tmpfiles="$tmpfiles xg-pl-4.ok"
cat <<\EOF > xg-pl-4.ok
msgid "'Your command, please?', asked the waiter.\n"
msgstr ""

msgid "please"
msgstr ""

msgid "'Your recommendation, $polite?', answered the guest.\n"
msgstr ""

msgid "Yes, $$$$ref3!\n"
msgstr ""

msgid "Up and down, OH, yeah\\!\\!\\!\\!\n"
msgstr ""

msgid "E-Mail: <no@spam.org>.  "
msgstr ""

msgid ""
"Your Perl include path starts with '$INC[0]' and it ends with '$INC[-1]'.  "
"$#INC directories are searched.\n"
msgstr ""

msgid ""
"Line 1\n"
"Line 2\n"
msgstr ""

msgid "Line 1\\nStill line 1\n"
msgstr ""

msgid "Hello"
msgstr ""

msgid "@{[hello_func]} world!\n"
msgstr ""

msgid "ls $0"
msgstr ""

msgid "Polina rules!\n"
msgstr ""
EOF

: ${DIFF=diff}
${DIFF} xg-pl-4.ok xg-pl-4.pot
result=$?

rm -fr $tmpfiles

exit $result