/* ========================= Extracting strings. ========================== */
void
-extract_ruby (const char *real_filename, const char *logical_filename,
+extract_ruby (const char *found_in_dir, const char *real_filename,
+ const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp)
{
argv[i++] = xasprintf ("--add-comments=%s", comment_tag);
}
- argv[i++] = real_filename;
+ argv[i++] = logical_filename;
argv[i] = NULL;
free (command);
}
- child = create_pipe_in (progname, progname, argv, NULL,
+ child = create_pipe_in (progname, progname, argv, found_in_dir,
DEV_NULL, false, true, true, fd);
fp = fdopen (fd[0], "r");
{ "Ruby", NULL, extract_ruby, \
&flag_table_ruby, &formatstring_ruby, NULL }, \
-extern void extract_ruby (const char *real_filename,
+extern void extract_ruby (const char *found_in_dir, const char *real_filename,
const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp);
const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp);
-typedef void (*extract_from_file_func) (const char *real_filename,
+typedef void (*extract_from_file_func) (const char *found_in_dir,
+ const char *real_filename,
const char *logical_filename,
flag_context_list_table_ty *flag_table,
msgdomain_list_ty *mdlp);
/* xgettext_find_file and xgettext_open look up a file, taking into account
the --directory options.
- xgettext_find_file merely returns the file name. This function is useful
- for parsers implemented as separate programs.
+ xgettext_find_file merely returns the file name and the directory in which
+ it was found. This function is useful for parsers implemented as separate
+ programs.
xgettext_open returns the open file stream. This function is useful for
built-in parsers. */
static void
xgettext_find_file (const char *fn,
- char **logical_file_name_p, char **real_file_name_p)
+ char **logical_file_name_p,
+ const char **found_in_dir_p,
+ char **real_file_name_p)
{
char *new_name;
+ const char *found_in_dir;
char *logical_file_name;
struct stat statbuf;
+ found_in_dir = NULL;
+
/* We cannot handle "-" here. "/dev/fd/0" is not portable, and it cannot
be opened multiple times. */
if (IS_RELATIVE_FILE_NAME (fn))
new_name = xconcatenated_filename (dir, fn, NULL);
if (stat (new_name, &statbuf) == 0)
- break;
+ {
+ found_in_dir = dir;
+ break;
+ }
if (errno != ENOENT)
error (EXIT_FAILURE, errno,
}
*logical_file_name_p = logical_file_name;
+ *found_in_dir_p = found_in_dir;
*real_file_name_p = new_name;
}
}
else
{
- xgettext_find_file (file_name, &logical_file_name, &real_file_name);
+ const char *found_in_dir;
+ xgettext_find_file (file_name, &logical_file_name,
+ &found_in_dir, &real_file_name);
- extractor.extract_from_file (real_file_name, logical_file_name,
+ extractor.extract_from_file (found_in_dir, real_file_name,
+ logical_file_name,
extractor.flag_table, mdlp);
}
free (logical_file_name);
recode-sr-latin-1 recode-sr-latin-2 \
xgettext-2 xgettext-3 xgettext-4 xgettext-5 xgettext-6 \
xgettext-7 xgettext-8 xgettext-9 xgettext-10 xgettext-11 xgettext-12 \
- xgettext-13 xgettext-14 xgettext-15 \
+ xgettext-13 xgettext-14 xgettext-15 xgettext-16 \
xgettext-appdata-1 \
xgettext-awk-1 xgettext-awk-2 \
xgettext-c-2 xgettext-c-3 xgettext-c-4 xgettext-c-5 xgettext-c-6 \
--- /dev/null
+#!/bin/sh
+. "${srcdir=.}/init.sh"; path_prepend_ . ../src
+
+# Test of --directory option, with multiple directories and multiple languages.
+
+(rxgettext --version) >/dev/null 2>/dev/null \
+ || { echo "Skipping test: rxgettext not found"; Exit 77; }
+
+mkdir c-src1 c-src2 sh-src1 sh-src2 ruby-src1 ruby-src2
+
+cat <<\EOF > c-src1/a.c
+gettext("some C message");
+EOF
+
+cat <<\EOF > c-src2/b.c
+gettext("another C message");
+EOF
+
+cat <<\EOF > sh-src1/c.sh
+gettext "some Shell message"
+EOF
+
+cat <<\EOF > sh-src2/d.sh
+gettext "another Shell message"
+EOF
+
+cat <<\EOF > ruby-src1/e.rb
+gettext("some Ruby message");
+EOF
+
+cat <<\EOF > ruby-src2/f.rb
+gettext("another Ruby message");
+EOF
+
+: ${XGETTEXT=xgettext}
+${XGETTEXT} -o xg-16.tmp \
+ -D c-src1 -D c-src2 -D sh-src1 -D sh-src2 -D ruby-src1 -D ruby-src2 \
+ a.c b.c c.sh d.sh e.rb f.rb 2>xg-16.err
+test $? = 0 || { cat xg-16.err; Exit 1; }
+func_filter_POT_Creation_Date xg-16.tmp xg-16.pot
+
+cat <<\EOF > xg-16.ok
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: a.c:1
+msgid "some C message"
+msgstr ""
+
+#: b.c:1
+msgid "another C message"
+msgstr ""
+
+#: c.sh:1
+msgid "some Shell message"
+msgstr ""
+
+#: d.sh:1
+msgid "another Shell message"
+msgstr ""
+
+#: e.rb:1
+msgid "some Ruby message"
+msgstr ""
+
+#: f.rb:1
+msgid "another Ruby message"
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} xg-16.ok xg-16.pot
+result=$?
+
+exit $result