LCOV - code coverage report
Current view: top level - gl - version-etc.c (source / functions) Hit Total Coverage
Test: GNU SASL Lines: 20 62 32.3 %
Date: 2012-05-28 Functions: 3 5 60.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 7 21 33.3 %

           Branch data     Line data    Source code
       1                 :            : /* Print --version and bug-reporting information in a consistent format.
       2                 :            :    Copyright (C) 1999-2012 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 = 2012 };
      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         [ +  - ]:          3 :   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.9