]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
xgettext may now set the package name in the POT file.
authorBruno Haible <bruno@clisp.org>
Mon, 1 Oct 2007 00:50:54 +0000 (00:50 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:15:07 +0000 (12:15 +0200)
gettext-tools/src/ChangeLog
gettext-tools/src/msginit.c
gettext-tools/src/xgettext.c

index de01dbc9ea11b11778b772edc5f8033878d3405e..b74a8716ab28ff8776a7d21674076fb4feea4c78 100644 (file)
@@ -1,3 +1,14 @@
+2007-09-30  Bruno Haible  <bruno@clisp.org>
+
+       * xgettext.c (package_name, package_version): New variables.
+       (long_options): Add --package-name, --package-version.
+       (main): Handle options --package-name, --package-version.
+       (usage): Document them.
+       (construct_header): Use package_name if present.
+       * msginit.c (project_id_version): Take a header argument. Return the
+       old value if already present.
+       (fields): Update.
+
 2007-09-30  Bruno Haible  <bruno@clisp.org>
 
        * message.h (format_type): New enum value 'format_kde'.
index 5cd1e7f138e3ba3bc9ba1b2e6aec58acbc817728..940311b103a944c38541404de1daa9dfb4912114 100644 (file)
@@ -872,8 +872,9 @@ failed:
 
 /* Construct the value for the Project-Id-Version field.  */
 static const char *
-project_id_version ()
+project_id_version (const char *header)
 {
+  const char *old_field;
   const char *gettextlibdir;
   char *prog;
   char *argv[4];
@@ -885,6 +886,12 @@ project_id_version ()
   size_t linelen;
   int exitstatus;
 
+  /* Return the old value if present, assuming it was already filled in by
+     xgettext.  */
+  old_field = get_field (header, "Project-Id-Version");
+  if (old_field != NULL && strcmp (old_field, "PACKAGE VERSION") != 0)
+    return old_field;
+
   gettextlibdir = getenv ("GETTEXTLIBDIR");
   if (gettextlibdir == NULL || gettextlibdir[0] == '\0')
     gettextlibdir = relocate (LIBDIR "/gettext");
@@ -1284,7 +1291,7 @@ static struct
 }
 fields[] =
   {
-    { "Project-Id-Version", project_id_version, NULL },
+    { "Project-Id-Version", NULL, project_id_version },
     { "PO-Revision-Date", NULL, po_revision_date },
     { "Last-Translator", last_translator, NULL },
     { "Language-Team", language_team, NULL },
index b34282f64470b275814b4be4978bbb649cde4a0f..e6c72cbc1f392ba93f0217e3c8695b834bd58b3d 100644 (file)
@@ -115,6 +115,12 @@ static int force_po;
 /* Copyright holder of the output file and the translations.  */
 static const char *copyright_holder = "THE PACKAGE'S COPYRIGHT HOLDER";
 
+/* Package name.  */
+static const char *package_name = NULL;
+
+/* Package version.  */
+static const char *package_version = NULL;
+
 /* Email address or URL for reports of bugs in msgids.  */
 static const char *msgid_bugs_address = NULL;
 
@@ -215,6 +221,8 @@ static const struct option long_options[] =
   { "omit-header", no_argument, &xgettext_omit_header, 1 },
   { "output", required_argument, NULL, 'o' },
   { "output-dir", required_argument, NULL, 'p' },
+  { "package-name", required_argument, NULL, CHAR_MAX + 12 },
+  { "package-version", required_argument, NULL, CHAR_MAX + 13 },
   { "properties-output", no_argument, NULL, CHAR_MAX + 6 },
   { "qt", no_argument, NULL, CHAR_MAX + 9 },
   { "sort-by-file", no_argument, NULL, 'F' },
@@ -504,6 +512,12 @@ main (int argc, char *argv[])
       case CHAR_MAX + 11:      /* --boost */
        recognize_format_boost = true;
        break;
+      case CHAR_MAX + 12:      /* --package-name */
+       package_name = optarg;
+       break;
+      case CHAR_MAX + 13:      /* --package-version */
+       package_version = optarg;
+       break;
       default:
        usage (EXIT_FAILURE);
        /* NOTREACHED */
@@ -844,6 +858,10 @@ Language specific options:\n"));
       printf (_("\
                                 (only language C++)\n"));
       printf (_("\
+      --kde                   recognize KDE 4 format strings\n"));
+      printf (_("\
+                                (only language C++)\n"));
+      printf (_("\
       --boost                 recognize Boost format strings\n"));
       printf (_("\
                                 (only language C++)\n"));
@@ -886,6 +904,10 @@ Output details:\n"));
       printf (_("\
       --foreign-user          omit FSF copyright in output for foreign user\n"));
       printf (_("\
+      --package-name=PACKAGE  set package name in output\n"));
+      printf (_("\
+      --package-version=VERSION  set package version in output\n"));
+      printf (_("\
       --msgid-bugs-address=EMAIL@ADDRESS  set report address for msgid bugs\n"));
       printf (_("\
   -m, --msgstr-prefix[=STRING]  use STRING or \"\" as prefix for msgstr entries\n"));
@@ -2785,12 +2807,23 @@ arglist_parser_done (struct arglist_parser *ap, int argnum)
 static message_ty *
 construct_header ()
 {
+  char *project_id_version;
   time_t now;
   char *timestring;
   message_ty *mp;
   char *msgstr;
   static lex_pos_ty pos = { __FILE__, __LINE__ };
 
+  if (package_name != NULL)
+    {
+      if (package_version != NULL)
+       project_id_version = xasprintf ("%s %s", package_name, package_version);
+      else
+       project_id_version = xasprintf ("%s", package_name);
+    }
+  else
+    project_id_version = xstrdup ("PACKAGE VERSION");
+
   if (msgid_bugs_address != NULL && msgid_bugs_address[0] == '\0')
     multiline_warning (xasprintf (_("warning: ")),
                       xstrdup (_("\
@@ -2804,7 +2837,7 @@ specify an --msgid-bugs-address command line option.\n\
   timestring = po_strftime (&now);
 
   msgstr = xasprintf ("\
-Project-Id-Version: PACKAGE VERSION\n\
+Project-Id-Version: %s\n\
 Report-Msgid-Bugs-To: %s\n\
 POT-Creation-Date: %s\n\
 PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n\
@@ -2813,9 +2846,11 @@ Language-Team: LANGUAGE <LL@li.org>\n\
 MIME-Version: 1.0\n\
 Content-Type: text/plain; charset=CHARSET\n\
 Content-Transfer-Encoding: 8bit\n",
+                     project_id_version,
                      msgid_bugs_address != NULL ? msgid_bugs_address : "",
                      timestring);
   free (timestring);
+  free (project_id_version);
 
   mp = message_alloc (NULL, "", NULL, msgstr, strlen (msgstr) + 1, &pos);