getopt-pfx-ext.h 2.71 KB
Newer Older
Paul Eggert's avatar
Paul Eggert committed
1
/* getopt (GNU extensions) gnulib wrapper header.
Paul Eggert's avatar
Paul Eggert committed
2
   Copyright (C) 1989-2019 Free Software Foundation, Inc.
Paul Eggert's avatar
Paul Eggert committed
3 4 5 6
   This file is part of gnulib.
   Unlike most of the getopt implementation, it is NOT shared
   with the GNU C Library.

7
   This file is free software; you can redistribute it and/or modify it
Paul Eggert's avatar
Paul Eggert committed
8 9 10 11
   under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 3 of
   the License, or (at your option) any later version.

12
   This file is distributed in the hope that it will be useful, but
Paul Eggert's avatar
Paul Eggert committed
13 14 15 16 17 18
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public
   License along with gnulib; if not, see
Paul Eggert's avatar
Paul Eggert committed
19
   <https://www.gnu.org/licenses/>.  */
Paul Eggert's avatar
Paul Eggert committed
20 21 22 23 24 25 26 27 28 29

#ifndef _GETOPT_PFX_EXT_H
#define _GETOPT_PFX_EXT_H 1

/* This header should not be used directly; include getopt.h instead.
   It does not have a protective #error, because the guard macro for
   getopt.h in gnulib is not fixed.  */

/* Standalone applications should #define __GETOPT_PREFIX to an
   identifier that prefixes the external functions and variables
Paul Eggert's avatar
Paul Eggert committed
30
   defined in getopt-core.h and getopt-ext.h.  Systematically
Paul Eggert's avatar
Paul Eggert committed
31 32 33 34 35 36 37 38 39 40 41 42
   rename identifiers so that they do not collide with the system
   functions and variables.  Renaming avoids problems with some
   compilers and linkers.  */
#ifdef __GETOPT_PREFIX
# ifndef __GETOPT_ID
#  define __GETOPT_CONCAT(x, y) x ## y
#  define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
#  define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
# endif
# undef getopt_long
# undef getopt_long_only
# undef option
Paul Eggert's avatar
Paul Eggert committed
43
# undef _getopt_internal
Paul Eggert's avatar
Paul Eggert committed
44 45 46
# define getopt_long __GETOPT_ID (getopt_long)
# define getopt_long_only __GETOPT_ID (getopt_long_only)
# define option __GETOPT_ID (option)
Paul Eggert's avatar
Paul Eggert committed
47
# define _getopt_internal __GETOPT_ID (getopt_internal)
Paul Eggert's avatar
Paul Eggert committed
48 49 50 51 52

/* The system's getopt.h may have already included getopt-ext.h to
   declare the unprefixed identifiers.  Undef _GETOPT_EXT_H so that
   getopt-ext.h declares them with prefixes.  */
# undef _GETOPT_EXT_H
Paul Eggert's avatar
Paul Eggert committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#endif

/* Standalone applications get correct prototypes for getopt_long and
   getopt_long_only; they declare "char **argv".  For backward
   compatibility with old applications, if __GETOPT_PREFIX is not
   defined, we supply GNU-libc-compatible, but incorrect, prototypes
   using "char *const *argv".  (GNU libc is stuck with the incorrect
   prototypes, as they are baked into older versions of LSB.)  */
#ifndef __getopt_argv_const
# if defined __GETOPT_PREFIX
#  define __getopt_argv_const /* empty */
# else
#  define __getopt_argv_const const
# endif
#endif

Paul Eggert's avatar
Paul Eggert committed
69
#include <getopt-ext.h>
Paul Eggert's avatar
Paul Eggert committed
70

Paul Eggert's avatar
Paul Eggert committed
71
#endif /* _GETOPT_PFX_EXT_H */