]> git.ipfire.org Git - thirdparty/gcc.git/blame - libiberty/getopt1.c
configure.ac: Also check if assembler supports pc-relative relocs on X86_WIN32 targets.
[thirdparty/gcc.git] / libiberty / getopt1.c
CommitLineData
6599da04 1/* getopt_long and getopt_long_only entry points for GNU getopt.
99e4078f 2 Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2005
7520c31b 3 Free Software Foundation, Inc.
6599da04 4
584932e9
DD
5 NOTE: This source is derived from an old version taken from the GNU C
6 Library (glibc).
b134508b
ILT
7
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 2, or (at your option) any
11 later version.
6599da04
JM
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b134508b 16 GNU General Public License for more details.
6599da04 17
b134508b 18 You should have received a copy of the GNU General Public License
6599da04 19 along with this program; if not, write to the Free Software
ee58dffd 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
b134508b 21 USA. */
6599da04
JM
22\f
23#ifdef HAVE_CONFIG_H
6599da04 24#include <config.h>
6599da04
JM
25#endif
26
7520c31b 27#if !defined __STDC__ || !__STDC__
6599da04
JM
28/* This is a separate conditional since some stdc systems
29 reject `defined (const)'. */
30#ifndef const
31#define const
32#endif
33#endif
34
35#include <stdio.h>
36
99e4078f
AJ
37#include "getopt.h"
38
6599da04
JM
39/* Comment out all this code if we are using the GNU C Library, and are not
40 actually compiling the library itself. This code is part of the GNU C
41 Library, but also included in many other GNU distributions. Compiling
42 and linking in this code is a waste when using the GNU C library
43 (especially if it is a shared library). Rather than having every GNU
44 program understand `configure --with-gnu-libc' and omit the object files,
45 it is simpler to just do this in the source for each such file. */
6599da04 46
b134508b 47#define GETOPT_INTERFACE_VERSION 2
7520c31b 48#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
b134508b
ILT
49#include <gnu-versions.h>
50#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
51#define ELIDE_CODE
52#endif
53#endif
54
55#ifndef ELIDE_CODE
6599da04
JM
56
57
58/* This needs to come after some library #include
59 to get __GNU_LIBRARY__ defined. */
60#ifdef __GNU_LIBRARY__
61#include <stdlib.h>
6599da04
JM
62#endif
63
64#ifndef NULL
65#define NULL 0
66#endif
67
68int
6da879de
GDR
69getopt_long (int argc, char *const *argv, const char *options,
70 const struct option *long_options, int *opt_index)
6599da04
JM
71{
72 return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
73}
74
75/* Like getopt_long, but '-' as well as '--' can indicate a long option.
76 If an option that starts with '-' (not '--') doesn't match a long option,
77 but does match a short option, it is parsed as a short option
78 instead. */
79
80int
e78410c1 81getopt_long_only (int argc, char *const *argv, const char *options,
6da879de 82 const struct option *long_options, int *opt_index)
6599da04
JM
83{
84 return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
85}
86
87
b134508b 88#endif /* Not ELIDE_CODE. */
6599da04
JM
89\f
90#ifdef TEST
91
92#include <stdio.h>
93
94int
6da879de 95main (int argc, char **argv)
6599da04
JM
96{
97 int c;
98 int digit_optind = 0;
99
100 while (1)
101 {
102 int this_option_optind = optind ? optind : 1;
103 int option_index = 0;
104 static struct option long_options[] =
105 {
106 {"add", 1, 0, 0},
107 {"append", 0, 0, 0},
108 {"delete", 1, 0, 0},
109 {"verbose", 0, 0, 0},
110 {"create", 0, 0, 0},
111 {"file", 1, 0, 0},
112 {0, 0, 0, 0}
113 };
114
115 c = getopt_long (argc, argv, "abc:d:0123456789",
116 long_options, &option_index);
b134508b 117 if (c == -1)
6599da04
JM
118 break;
119
120 switch (c)
121 {
122 case 0:
123 printf ("option %s", long_options[option_index].name);
124 if (optarg)
125 printf (" with arg %s", optarg);
126 printf ("\n");
127 break;
128
129 case '0':
130 case '1':
131 case '2':
132 case '3':
133 case '4':
134 case '5':
135 case '6':
136 case '7':
137 case '8':
138 case '9':
139 if (digit_optind != 0 && digit_optind != this_option_optind)
140 printf ("digits occur in two different argv-elements.\n");
141 digit_optind = this_option_optind;
142 printf ("option %c\n", c);
143 break;
144
145 case 'a':
146 printf ("option a\n");
147 break;
148
149 case 'b':
150 printf ("option b\n");
151 break;
152
153 case 'c':
154 printf ("option c with value `%s'\n", optarg);
155 break;
156
157 case 'd':
158 printf ("option d with value `%s'\n", optarg);
159 break;
160
161 case '?':
162 break;
163
164 default:
165 printf ("?? getopt returned character code 0%o ??\n", c);
166 }
167 }
168
169 if (optind < argc)
170 {
171 printf ("non-option ARGV-elements: ");
172 while (optind < argc)
173 printf ("%s ", argv[optind++]);
174 printf ("\n");
175 }
176
177 exit (0);
178}
179
180#endif /* TEST */