xref: /third_party/elfutils/src/arlib-argp.c (revision da0c48c4)
1da0c48c4Sopenharmony_ci/* Options common to ar and ranlib.
2da0c48c4Sopenharmony_ci   Copyright (C) 2012 Red Hat, Inc.
3da0c48c4Sopenharmony_ci   This file is part of elfutils.
4da0c48c4Sopenharmony_ci
5da0c48c4Sopenharmony_ci   This file is free software; you can redistribute it and/or modify
6da0c48c4Sopenharmony_ci   it under the terms of the GNU General Public License as published by
7da0c48c4Sopenharmony_ci   the Free Software Foundation; either version 3 of the License, or
8da0c48c4Sopenharmony_ci   (at your option) any later version.
9da0c48c4Sopenharmony_ci
10da0c48c4Sopenharmony_ci   elfutils is distributed in the hope that it will be useful, but
11da0c48c4Sopenharmony_ci   WITHOUT ANY WARRANTY; without even the implied warranty of
12da0c48c4Sopenharmony_ci   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13da0c48c4Sopenharmony_ci   GNU General Public License for more details.
14da0c48c4Sopenharmony_ci
15da0c48c4Sopenharmony_ci   You should have received a copy of the GNU General Public License
16da0c48c4Sopenharmony_ci   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci#ifdef HAVE_CONFIG_H
19da0c48c4Sopenharmony_ci# include <config.h>
20da0c48c4Sopenharmony_ci#endif
21da0c48c4Sopenharmony_ci
22da0c48c4Sopenharmony_ci#include <argp.h>
23da0c48c4Sopenharmony_ci
24da0c48c4Sopenharmony_ci#include "arlib.h"
25da0c48c4Sopenharmony_ci
26da0c48c4Sopenharmony_cibool arlib_deterministic_output = DEFAULT_AR_DETERMINISTIC;
27da0c48c4Sopenharmony_ci
28da0c48c4Sopenharmony_cistatic const struct argp_option options[] =
29da0c48c4Sopenharmony_ci  {
30da0c48c4Sopenharmony_ci    { NULL, 'D', NULL, 0,
31da0c48c4Sopenharmony_ci      N_("Use zero for uid, gid, and date in archive members."), 0 },
32da0c48c4Sopenharmony_ci    { NULL, 'U', NULL, 0,
33da0c48c4Sopenharmony_ci      N_("Use actual uid, gid, and date in archive members."), 0 },
34da0c48c4Sopenharmony_ci
35da0c48c4Sopenharmony_ci    { NULL, 0, NULL, 0, NULL, 0 }
36da0c48c4Sopenharmony_ci  };
37da0c48c4Sopenharmony_ci
38da0c48c4Sopenharmony_cistatic error_t
39da0c48c4Sopenharmony_ciparse_opt (int key, char *arg __attribute__ ((unused)),
40da0c48c4Sopenharmony_ci           struct argp_state *state __attribute__ ((unused)))
41da0c48c4Sopenharmony_ci{
42da0c48c4Sopenharmony_ci  switch (key)
43da0c48c4Sopenharmony_ci    {
44da0c48c4Sopenharmony_ci    case 'D':
45da0c48c4Sopenharmony_ci      arlib_deterministic_output = true;
46da0c48c4Sopenharmony_ci      break;
47da0c48c4Sopenharmony_ci
48da0c48c4Sopenharmony_ci    case 'U':
49da0c48c4Sopenharmony_ci      arlib_deterministic_output = false;
50da0c48c4Sopenharmony_ci      break;
51da0c48c4Sopenharmony_ci
52da0c48c4Sopenharmony_ci    default:
53da0c48c4Sopenharmony_ci      return ARGP_ERR_UNKNOWN;
54da0c48c4Sopenharmony_ci    }
55da0c48c4Sopenharmony_ci  return 0;
56da0c48c4Sopenharmony_ci}
57da0c48c4Sopenharmony_ci
58da0c48c4Sopenharmony_cistatic char *
59da0c48c4Sopenharmony_citext_for_default (const char *text)
60da0c48c4Sopenharmony_ci{
61da0c48c4Sopenharmony_ci  char *new_text;
62da0c48c4Sopenharmony_ci  if (unlikely (asprintf (&new_text, _("%s (default)"), text) < 0))
63da0c48c4Sopenharmony_ci    return (char *) text;
64da0c48c4Sopenharmony_ci  return new_text;
65da0c48c4Sopenharmony_ci}
66da0c48c4Sopenharmony_ci
67da0c48c4Sopenharmony_cistatic char *
68da0c48c4Sopenharmony_cihelp_filter (int key, const char *text, void *input __attribute__ ((unused)))
69da0c48c4Sopenharmony_ci{
70da0c48c4Sopenharmony_ci  switch (key)
71da0c48c4Sopenharmony_ci    {
72da0c48c4Sopenharmony_ci    case 'D':
73da0c48c4Sopenharmony_ci      if (DEFAULT_AR_DETERMINISTIC)
74da0c48c4Sopenharmony_ci        return text_for_default (text);
75da0c48c4Sopenharmony_ci      break;
76da0c48c4Sopenharmony_ci    case 'U':
77da0c48c4Sopenharmony_ci      if (! DEFAULT_AR_DETERMINISTIC)
78da0c48c4Sopenharmony_ci        return text_for_default (text);
79da0c48c4Sopenharmony_ci      break;
80da0c48c4Sopenharmony_ci    }
81da0c48c4Sopenharmony_ci
82da0c48c4Sopenharmony_ci  return (char *) text;
83da0c48c4Sopenharmony_ci}
84da0c48c4Sopenharmony_ci
85da0c48c4Sopenharmony_cistatic const struct argp argp =
86da0c48c4Sopenharmony_ci  {
87da0c48c4Sopenharmony_ci    options, parse_opt, NULL, NULL, NULL, help_filter, NULL
88da0c48c4Sopenharmony_ci  };
89da0c48c4Sopenharmony_ci
90da0c48c4Sopenharmony_ciconst struct argp_child arlib_argp_children[] =
91da0c48c4Sopenharmony_ci  {
92da0c48c4Sopenharmony_ci    { &argp, 0, "", 2 },
93da0c48c4Sopenharmony_ci    { NULL, 0, NULL, 0 }
94da0c48c4Sopenharmony_ci  };
95