LCOV - code coverage report
Current view: top level - gl - version-etc.c (source / functions) Hit Total Coverage
Test: GNU Libidn Lines: 20 62 32.3 %
Date: 2016-07-20 19:34:35 Functions: 3 5 60.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* Print --version and bug-reporting information in a consistent format.
       2             :    Copyright (C) 1999-2016 Free Software Foundation, Inc.
       3             : 
       4             :    This program is free software: you can redistribute it and/or modify
       5             :    it under the terms of the GNU General Public License as published by
       6             :    the Free Software Foundation; either version 3 of the License, or
       7             :    (at your option) any later version.
       8             : 
       9             :    This program is distributed in the hope that it will be useful,
      10             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      12             :    GNU General Public License for more details.
      13             : 
      14             :    You should have received a copy of the GNU General Public License
      15             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
      16             : 
      17             : /* Written by Jim Meyering. */
      18             : 
      19             : #include <config.h>
      20             : 
      21             : /* Specification.  */
      22             : #include "version-etc.h"
      23             : 
      24             : #include <stdarg.h>
      25             : #include <stdio.h>
      26             : #include <stdlib.h>
      27             : 
      28             : #if USE_UNLOCKED_IO
      29             : # include "unlocked-io.h"
      30             : #endif
      31             : 
      32             : #include "gettext.h"
      33             : #define _(msgid) gettext (msgid)
      34             : 
      35             : /* If you use AM_INIT_AUTOMAKE's no-define option,
      36             :    PACKAGE is not defined.  Use PACKAGE_TARNAME instead.  */
      37             : #if ! defined PACKAGE && defined PACKAGE_TARNAME
      38             : # define PACKAGE PACKAGE_TARNAME
      39             : #endif
      40             : 
      41             : enum { COPYRIGHT_YEAR = 2016 };
      42             : 
      43             : /* The three functions below display the --version information the
      44             :    standard way.
      45             : 
      46             :    If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
      47             :    the program.  The formats are therefore:
      48             : 
      49             :    PACKAGE VERSION
      50             : 
      51             :    or
      52             : 
      53             :    COMMAND_NAME (PACKAGE) VERSION.
      54             : 
      55             :    The functions differ in the way they are passed author names. */
      56             : 
      57             : /* Display the --version information the standard way.
      58             : 
      59             :    Author names are given in the array AUTHORS. N_AUTHORS is the
      60             :    number of elements in the array. */
      61             : void
      62           1 : version_etc_arn (FILE *stream,
      63             :                  const char *command_name, const char *package,
      64             :                  const char *version,
      65             :                  const char * const * authors, size_t n_authors)
      66             : {
      67           1 :   if (command_name)
      68           1 :     fprintf (stream, "%s (%s) %s\n", command_name, package, version);
      69             :   else
      70           0 :     fprintf (stream, "%s %s\n", package, version);
      71             : 
      72             : #ifdef PACKAGE_PACKAGER
      73             : # ifdef PACKAGE_PACKAGER_VERSION
      74             :   fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER,
      75             :            PACKAGE_PACKAGER_VERSION);
      76             : # else
      77             :   fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER);
      78             : # endif
      79             : #endif
      80             : 
      81             :   /* TRANSLATORS: Translate "(C)" to the copyright symbol
      82             :      (C-in-a-circle), if this symbol is available in the user's
      83             :      locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
      84           1 :   fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
      85             : 
      86           1 :   fputs (_("\
      87             : \n\
      88             : License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\
      89             : This is free software: you are free to change and redistribute it.\n\
      90             : There is NO WARRANTY, to the extent permitted by law.\n\
      91             : \n\
      92             : "),
      93             :          stream);
      94             : 
      95           1 :   switch (n_authors)
      96             :     {
      97             :     case 0:
      98             :       /* The caller must provide at least one author name.  */
      99           0 :       abort ();
     100             :     case 1:
     101             :       /* TRANSLATORS: %s denotes an author name.  */
     102           0 :       fprintf (stream, _("Written by %s.\n"), authors[0]);
     103           0 :       break;
     104             :     case 2:
     105             :       /* TRANSLATORS: Each %s denotes an author name.  */
     106           1 :       fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]);
     107           1 :       break;
     108             :     case 3:
     109             :       /* TRANSLATORS: Each %s denotes an author name.  */
     110           0 :       fprintf (stream, _("Written by %s, %s, and %s.\n"),
     111           0 :                authors[0], authors[1], authors[2]);
     112           0 :       break;
     113             :     case 4:
     114             :       /* TRANSLATORS: Each %s denotes an author name.
     115             :          You can use line breaks, estimating that each author name occupies
     116             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     117           0 :       fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"),
     118           0 :                authors[0], authors[1], authors[2], authors[3]);
     119           0 :       break;
     120             :     case 5:
     121             :       /* TRANSLATORS: Each %s denotes an author name.
     122             :          You can use line breaks, estimating that each author name occupies
     123             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     124           0 :       fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"),
     125           0 :                authors[0], authors[1], authors[2], authors[3], authors[4]);
     126           0 :       break;
     127             :     case 6:
     128             :       /* TRANSLATORS: Each %s denotes an author name.
     129             :          You can use line breaks, estimating that each author name occupies
     130             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     131           0 :       fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
     132           0 :                authors[0], authors[1], authors[2], authors[3], authors[4],
     133           0 :                authors[5]);
     134           0 :       break;
     135             :     case 7:
     136             :       /* TRANSLATORS: Each %s denotes an author name.
     137             :          You can use line breaks, estimating that each author name occupies
     138             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     139           0 :       fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
     140           0 :                authors[0], authors[1], authors[2], authors[3], authors[4],
     141           0 :                authors[5], authors[6]);
     142           0 :       break;
     143             :     case 8:
     144             :       /* TRANSLATORS: Each %s denotes an author name.
     145             :          You can use line breaks, estimating that each author name occupies
     146             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     147           0 :       fprintf (stream, _("\
     148             : Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
     149           0 :                 authors[0], authors[1], authors[2], authors[3], authors[4],
     150           0 :                 authors[5], authors[6], authors[7]);
     151           0 :       break;
     152             :     case 9:
     153             :       /* TRANSLATORS: Each %s denotes an author name.
     154             :          You can use line breaks, estimating that each author name occupies
     155             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     156           0 :       fprintf (stream, _("\
     157             : Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
     158           0 :                authors[0], authors[1], authors[2], authors[3], authors[4],
     159           0 :                authors[5], authors[6], authors[7], authors[8]);
     160           0 :       break;
     161             :     default:
     162             :       /* 10 or more authors.  Use an abbreviation, since the human reader
     163             :          will probably not want to read the entire list anyway.  */
     164             :       /* TRANSLATORS: Each %s denotes an author name.
     165             :          You can use line breaks, estimating that each author name occupies
     166             :          ca. 16 screen columns and that a screen line has ca. 80 columns.  */
     167           0 :       fprintf (stream, _("\
     168             : Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
     169           0 :                 authors[0], authors[1], authors[2], authors[3], authors[4],
     170           0 :                 authors[5], authors[6], authors[7], authors[8]);
     171           0 :       break;
     172             :     }
     173           1 : }
     174             : 
     175             : /* Display the --version information the standard way.  See the initial
     176             :    comment to this module, for more information.
     177             : 
     178             :    Author names are given in the NULL-terminated array AUTHORS. */
     179             : void
     180           0 : version_etc_ar (FILE *stream,
     181             :                 const char *command_name, const char *package,
     182             :                 const char *version, const char * const * authors)
     183             : {
     184             :   size_t n_authors;
     185             : 
     186           0 :   for (n_authors = 0; authors[n_authors]; n_authors++)
     187             :     ;
     188           0 :   version_etc_arn (stream, command_name, package, version, authors, n_authors);
     189           0 : }
     190             : 
     191             : /* Display the --version information the standard way.  See the initial
     192             :    comment to this module, for more information.
     193             : 
     194             :    Author names are given in the NULL-terminated va_list AUTHORS. */
     195             : void
     196           1 : version_etc_va (FILE *stream,
     197             :                 const char *command_name, const char *package,
     198             :                 const char *version, va_list authors)
     199             : {
     200             :   size_t n_authors;
     201             :   const char *authtab[10];
     202             : 
     203           4 :   for (n_authors = 0;
     204             :        n_authors < 10
     205           3 :          && (authtab[n_authors] = va_arg (authors, const char *)) != NULL;
     206           2 :        n_authors++)
     207             :     ;
     208           1 :   version_etc_arn (stream, command_name, package, version,
     209             :                    authtab, n_authors);
     210           1 : }
     211             : 
     212             : 
     213             : /* Display the --version information the standard way.
     214             : 
     215             :    If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
     216             :    the program.  The formats are therefore:
     217             : 
     218             :    PACKAGE VERSION
     219             : 
     220             :    or
     221             : 
     222             :    COMMAND_NAME (PACKAGE) VERSION.
     223             : 
     224             :    The authors names are passed as separate arguments, with an additional
     225             :    NULL argument at the end.  */
     226             : void
     227           1 : version_etc (FILE *stream,
     228             :              const char *command_name, const char *package,
     229             :              const char *version, /* const char *author1, ...*/ ...)
     230             : {
     231             :   va_list authors;
     232             : 
     233           1 :   va_start (authors, version);
     234           1 :   version_etc_va (stream, command_name, package, version, authors);
     235           1 :   va_end (authors);
     236           1 : }
     237             : 
     238             : void
     239           0 : emit_bug_reporting_address (void)
     240             : {
     241             :   /* TRANSLATORS: The placeholder indicates the bug-reporting address
     242             :      for this package.  Please add _another line_ saying
     243             :      "Report translation bugs to <...>\n" with the address for translation
     244             :      bugs (typically your translation team's web or email address).  */
     245           0 :   printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT);
     246             : #ifdef PACKAGE_PACKAGER_BUG_REPORTS
     247             :   printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER,
     248             :           PACKAGE_PACKAGER_BUG_REPORTS);
     249             : #endif
     250             : #ifdef PACKAGE_URL
     251           0 :   printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
     252             : #else
     253             :   printf (_("%s home page: <http://www.gnu.org/software/%s/>\n"),
     254             :           PACKAGE_NAME, PACKAGE);
     255             : #endif
     256           0 :   fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"),
     257             :          stdout);
     258           0 : }

Generated by: LCOV version 1.11