GNUnet  0.20.0
gnunet-config.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2012-2021 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
27 #include "platform.h"
28 #include "gnunet_util_lib.h"
29 
30 
36 static char *backend_check;
37 
38 
42 static int cflags;
43 
47 static int is_experimental;
48 
49 
53 static int libs;
54 
55 
59 static int prefix;
60 
61 
74 static void
75 run (void *cls,
76  char *const *args,
77  const char *cfgfile,
78  const struct GNUNET_CONFIGURATION_Handle *cfg)
79 {
80  struct GNUNET_CONFIGURATION_ConfigSettings *cs = cls;
81 
82  if (1 == is_experimental)
83  {
84 #ifdef GNUNET_EXPERIMENTAL
85  cs->global_ret = 0;
86 #else
87  cs->global_ret = 1;
88 #endif
89  return;
90  }
91  if (1 == cflags || 1 == libs || 1 == prefix)
92  {
95 
96  if (1 == cflags)
97  {
98  fprintf (stdout, "-I%sinclude\n", prefixdir);
99  }
100  if (1 == libs)
101  {
102  fprintf (stdout, "-L%s -lgnunetutil\n", libdir);
103  }
104  if (1 == prefix)
105  {
106  fprintf (stdout, "%s\n", prefixdir);
107  }
108  cs->global_ret = 0;
109  GNUNET_free (prefixdir);
110  GNUNET_free (libdir);
111  return;
112  }
113  if (NULL != backend_check)
114  {
115  char *name;
116 
118  "libgnunet_plugin_%s",
119  backend_check);
120  cs->global_ret = (GNUNET_OK ==
121  GNUNET_PLUGIN_test (name)) ? 0 : 77;
122  GNUNET_free (name);
123  return;
124  }
126  args,
127  cfgfile,
128  cfg);
129 }
130 
131 
139 int
140 main (int argc,
141  char *const *argv)
142 {
145  .global_ret = EXIT_SUCCESS
146  };
150  'b',
151  "supported-backend",
152  "BACKEND",
153  gettext_noop (
154  "test if the current installation supports the specified BACKEND"),
155  &backend_check)),
157  'C',
158  "cflags",
159  gettext_noop (
160  "Provide an appropriate value for CFLAGS to applications building on top of GNUnet"),
161  &cflags),
163  'E',
164  "is-experimental",
165  gettext_noop ("Is this an experimental build of GNUnet"),
166  &is_experimental),
168  'j',
169  "libs",
170  gettext_noop (
171  "Provide an appropriate value for LIBS to applications building on top of GNUnet"),
172  &libs),
174  'p',
175  "prefix",
176  gettext_noop (
177  "Provide the path under which GNUnet was installed"),
178  &prefix),
181  };
183 
184  if (GNUNET_OK !=
185  GNUNET_STRINGS_get_utf8_args (argc, argv,
186  &argc, &argv))
187  return EXIT_FAILURE;
188  ret =
189  GNUNET_PROGRAM_run (argc,
190  argv,
191  "gnunet-config [OPTIONS]",
192  gettext_noop ("Manipulate GNUnet configuration files"),
193  options,
194  &run,
195  &cs);
196  GNUNET_free_nz ((void *) argv);
198  if (GNUNET_NO == ret)
199  return 0;
200  if (GNUNET_SYSERR == ret)
201  return EXIT_INVALIDARGUMENT;
202  return cs.global_ret;
203 }
204 
205 
206 /* end of gnunet-config.c */
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
#define gettext_noop(String)
Definition: gettext.h:70
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
static int libs
If printing the value of LIBS has been requested.
Definition: gnunet-config.c:53
static char * backend_check
Backend to check if the respective plugin is loadable.
Definition: gnunet-config.c:36
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Print each option in a given section.
Definition: gnunet-config.c:75
static int cflags
If printing the value of CFLAGS has been requested.
Definition: gnunet-config.c:42
static int is_experimental
Check if this is an experimental build.
Definition: gnunet-config.c:47
int main(int argc, char *const *argv)
Program to manipulate configuration files.
static int prefix
If printing the value of PREFIX has been requested.
Definition: gnunet-config.c:59
#define GNUNET_CONFIGURATION_CONFIG_OPTIONS(cs)
Macro that expands to a set of GNUNET-getopt directives to initialize a struct GNUNET_CONFIGURATION_C...
void GNUNET_CONFIGURATION_config_settings_free(struct GNUNET_CONFIGURATION_ConfigSettings *cs)
Free resources associated with cs.
void GNUNET_CONFIGURATION_config_tool_run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Main task to run to perform operations typical for gnunet-config as per the configuration settings gi...
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_exclusive(struct GNUNET_GETOPT_CommandLineOption opt)
Make the given option mutually exclusive with other options.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_string(char shortName, const char *name, const char *argumentHelp, const char *description, char **str)
Allow user to specify a string.
#define GNUNET_UTIL_VERSION
Version of the API (for entire gnunetutil.so library).
Definition: gnunet_common.h:96
GNUNET_GenericReturnValue
Named constants for return values.
@ GNUNET_OK
@ GNUNET_NO
@ GNUNET_SYSERR
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.
#define GNUNET_free_nz(ptr)
Wrapper around free.
char * GNUNET_OS_installation_get_path(enum GNUNET_OS_InstallationPathKind dirkind)
Get the path to a specific GNUnet installation directory or, with GNUNET_OS_IPK_SELF_PREFIX,...
@ GNUNET_OS_IPK_LIBDIR
Return the directory where libraries are installed.
@ GNUNET_OS_IPK_PREFIX
Return the "PREFIX" directory given to configure.
enum GNUNET_GenericReturnValue GNUNET_PLUGIN_test(const char *library_name)
Test if a plugin exists.
Definition: plugin.c:168
enum GNUNET_GenericReturnValue GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration,...
Definition: program.c:400
enum GNUNET_GenericReturnValue GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1222
#define EXIT_INVALIDARGUMENT
Definition: platform.h:253
const char * name
Closure for GNUNET_CONFIGURATION_config_tool_run() with settings for what should be done with the con...
int global_ret
Return value from the operation, to be returned from 'main'.
unsigned int api_version
Must be set to the API version, i.e.
Definition of a command line option.