]> git.saurik.com Git - bison.git/blame - src/getargs.c
Point to an official beta.
[bison.git] / src / getargs.c
CommitLineData
9f306f2a 1/* Parse command line arguments for bison.
06b00abc
AD
2 Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
3 Free Software Foundation, Inc.
3d8fc6ca 4
9f306f2a 5 This file is part of Bison, the GNU Compiler Compiler.
3d8fc6ca 6
9f306f2a
AD
7 Bison is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
3d8fc6ca 11
9f306f2a
AD
12 Bison is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
3d8fc6ca 16
9f306f2a
AD
17 You should have received a copy of the GNU General Public License
18 along with Bison; see the file COPYING. If not, write to the Free
19 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA. */
3d8fc6ca
RS
21
22#include <stdio.h>
23#include "getopt.h"
24#include "system.h"
25#include "files.h"
b0ce6046 26#include "complain.h"
ceed8467 27#include "getargs.h"
82b6d266
PB
28#include "xalloc.h"
29#include "options.h"
3d8fc6ca 30
89cab50d
AD
31int debug_flag = 0;
32int defines_flag = 0;
33int locations_flag = 0;
34int no_lines_flag = 0;
35int no_parser_flag = 0;
89cab50d
AD
36int token_table_flag = 0;
37int verbose_flag = 0;
89cab50d 38int yacc_flag = 0; /* for -y */
22c2cbc0 39int graph_flag = 0;
9bfe901c 40int trace_flag = 0;
d2729d44 41
b0ce6046 42const char *skeleton = NULL;
f6bd5427 43const char *include = NULL;
b0ce6046 44
cbd8ffc5 45extern char *program_name;
3d8fc6ca 46
9f306f2a
AD
47/*---------------------------.
48| Display the help message. |
49`---------------------------*/
e79137ac 50
4a120d45 51static void
d2729d44 52usage (FILE *stream)
cbd8ffc5 53{
9f306f2a
AD
54 /* Some efforts were made to ease the translators' task, please
55 continue. */
a0f6b076
AD
56 fputs (_("\
57GNU bison generates parsers for LALR(1) grammars.\n"), stream);
9f306f2a
AD
58 putc ('\n', stream);
59
60 fprintf (stream, _("\
61Usage: %s [OPTION]... FILE\n"), program_name);
62 putc ('\n', stream);
63
64 fputs (_("\
65If a long option shows an argument as mandatory, then it is mandatory\n\
66for the equivalent short option also. Similarly for optional arguments.\n"),
67 stream);
68 putc ('\n', stream);
69
a0f6b076 70 fputs (_("\
9f306f2a
AD
71Operation modes:\n\
72 -h, --help display this help and exit\n\
73 -V, --version output version information and exit\n\
a0f6b076 74 -y, --yacc emulate POSIX yacc\n"), stream);
9f306f2a
AD
75 putc ('\n', stream);
76
a0f6b076 77 fputs (_("\
9f306f2a 78Parser:\n\
cd5bd6ac 79 -S, --skeleton=FILE specify the skeleton to use\n\
9f306f2a 80 -t, --debug instrument the parser for debugging\n\
89cab50d 81 --locations enable locations computation\n\
9f306f2a
AD
82 -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
83 -l, --no-lines don't generate `#line' directives\n\
84 -n, --no-parser generate the tables only\n\
9f306f2a 85 -k, --token-table include a table of token names\n\
a0f6b076 86"), stream);
9f306f2a
AD
87 putc ('\n', stream);
88
a0f6b076 89 fputs (_("\
9f306f2a
AD
90Output:\n\
91 -d, --defines also produce a header file\n\
92 -v, --verbose also produce an explanation of the automaton\n\
93 -b, --file-prefix=PREFIX specify a PREFIX for output files\n\
951366c1
AD
94 -o, --output=FILE leave output to FILE\n\
95 -g, --graph also produce a VCG description of the automaton\n\
96"), stream);
9f306f2a
AD
97 putc ('\n', stream);
98
a0f6b076
AD
99 fputs (_("\
100Report bugs to <bug-bison@gnu.org>.\n"), stream);
cbd8ffc5
DM
101}
102
e79137ac
AD
103
104/*------------------------------.
105| Display the version message. |
106`------------------------------*/
107
108static void
109version (FILE *stream)
110{
111 /* Some efforts were made to ease the translators' task, please
112 continue. */
06b00abc 113 fprintf (stream, _("bison (GNU Bison) %s"), VERSION);
e79137ac 114 putc ('\n', stream);
06b00abc 115 fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stream);
e79137ac
AD
116 putc ('\n', stream);
117
06b00abc
AD
118 fprintf (stream,
119 _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2002);
e79137ac
AD
120
121 fputs (_("\
122This is free software; see the source for copying conditions. There is NO\n\
123warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
124"),
125 stream);
126}
127
128
129/*----------------------.
130| Process the options. |
131`----------------------*/
132
ae404801
AD
133/* Under DOS, there is no difference on the case. This can be
134 troublesome when looking for `.tab' etc. */
135#ifdef MSDOS
136# define AS_FILE_NAME(File) (strlwr (File), (File))
137#else
138# define AS_FILE_NAME(File) (File)
139#endif
140
3d8fc6ca 141void
d2729d44 142getargs (int argc, char *argv[])
3d8fc6ca 143{
1916f98e 144 int c;
3d8fc6ca 145
f51cb8ff 146 struct option *longopts = long_option_table_new ();
cd5bd6ac
AD
147 while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
148 switch (c)
149 {
150 case 0:
151 /* Certain long options cause getopt_long to return 0. */
152 break;
153
154 case 'y':
155 yacc_flag = 1;
156 break;
157
158 case 'h':
159 usage (stdout);
160 exit (0);
161
162 case 'V':
163 version (stdout);
164 exit (0);
165
22c2cbc0 166 case 'g':
342b8b6e 167 /* Here, the -g and --graph=FILE options are differentiated. */
22c2cbc0 168 graph_flag = 1;
ae404801 169 spec_graph_file = AS_FILE_NAME (optarg);
22c2cbc0
AD
170 break;
171
cd5bd6ac
AD
172 case 'v':
173 verbose_flag = 1;
174 break;
175
176 case 'S':
ae404801 177 skeleton = AS_FILE_NAME (optarg);
cd5bd6ac
AD
178 break;
179
f6bd5427 180 case 'I':
ae404801 181 include = AS_FILE_NAME (optarg);
f6bd5427
MA
182 break;
183
cd5bd6ac 184 case 'd':
342b8b6e 185 /* Here, the -d and --defines options are differentiated. */
cd5bd6ac 186 defines_flag = 1;
ae404801
AD
187 if (optarg)
188 spec_defines_file = AS_FILE_NAME (optarg);
cd5bd6ac
AD
189 break;
190
191 case 'l':
192 no_lines_flag = 1;
193 break;
194
195 case 'k':
196 token_table_flag = 1;
197 break;
198
199 case 'r':
62ab6972 200 fatal (_("`%s' is no longer supported"), "--raw");
cd5bd6ac
AD
201 break;
202
203 case 'n':
204 no_parser_flag = 1;
205 break;
206
207 case 't':
208 debug_flag = 1;
209 break;
210
211 case 'o':
ae404801 212 spec_outfile = AS_FILE_NAME (optarg);
cd5bd6ac
AD
213 break;
214
215 case 'b':
ae404801 216 spec_file_prefix = AS_FILE_NAME (optarg);
cd5bd6ac
AD
217 break;
218
219 case 'p':
220 spec_name_prefix = optarg;
221 break;
222
223 default:
224 fprintf (stderr, _("Try `%s --help' for more information.\n"),
225 program_name);
226 exit (1);
227 }
3d8fc6ca 228
f51cb8ff
AD
229 free (longopts);
230
3d8fc6ca
RS
231 if (optind == argc)
232 {
e79137ac
AD
233 fprintf (stderr, _("%s: no grammar file given\n"), program_name);
234 exit (1);
3d8fc6ca
RS
235 }
236 if (optind < argc - 1)
e79137ac
AD
237 fprintf (stderr, _("%s: extra arguments ignored after `%s'\n"),
238 program_name, argv[optind]);
3d8fc6ca
RS
239
240 infile = argv[optind];
241}