I'm having some difficulty getting specs up to spec.
1. gcobol --help produces much less than promised
2. -foo=arg doesn't work
3. -exec-charset becomes -e xec-charset
I suspect there are knobs I haven't turned. This work is in
preparation for a much larger effort to support -Werror.
gcobol --help produces much less than promised:
$ gcobol --help | awk '/Options specific/,/^$/ { if( /^ +-/
) {print; n++}} END{ print n, "options"}' -main option uses the first
PROGRAM of filename as the entry point for -no_main
-findicator-column
-ffixed-form
-ffree-form
-fmax-errors nerror
-fflex-debug, -fyacc-debug
7 options
Notably absent is -dialect, but there are many others.
I can explain that, and I cannot. The text comes from
gcobolspec.cc::lang_specific_driver()
Static text is output in answer to "case OPT__help:". But is that
supposed to be necessary. Someone, maybe me, inserted a comment,
/* Let gcc.cc handle this, as it has a really
cool facility for handling --help and --verbose --help. */
What is supposed to work? There are allusions in gccint.info about
"help text" being generated, but there's no "help" entry in the index.
Perhaps related, as I read gccint.info, there's nothing special I need
to do to get support for -option=arg, but it seems there must be.
This works:
$ gcobol -oo failures/jkl/bob.cbl -dialect mf -v 2>&1 |
sed /mf/q Driving: (15)
[ 0] 2292 /home/jklowden/projects/3rd/gcc/unicode/build/gcc/gcobol
[ 1] 429 -B/home/jklowden/projects/3rd/gcc/unicode/build/gcc
[ 2] 2145 -oo
[ 3] 2090 -main=failures/jkl/bob.cbl
[ 4] 2293 failures/jkl/bob.cbl
[ 5] 995 -dialect mf
This does not:
$ gcobol -oo failures/jkl/bob.cbl -dialect=mf
gcobol: error: Unrecognized COBOL dialect name: ?=mf?
gcobol: note: valid arguments to ?-dialect? are: gcc gnu ibm mf; did
you mean ?mf??
Finally, my initial attempt to handle -exec-charset came to tears.
Specs now has:
[...]
{"@cobol",
"cobol1 %i %(cc1_options) "
"%{D*} %{E} %{I*} %{M} %{fmax-errors*} %{fsyntax-only*} "
"%{fcobol-exceptions*} "
"%{copyext} "
"%{exec-charset*} "
"%{exec-national-charset*} "
"%{fstatic-call} %{fdefaultbyte} "
"%{ffixed-form} %{ffree-form} %{indicator-column*} "
"%{preprocess} "
"%{dialect} "
"%{include} "
"%{nomain} "
"%{!fsyntax-only:%(invoke_as)} "
, 0, 0, 0},
and in lang.opt I added
exec-charset
Cobol Joined Separate Var(cobol_charset)
; Documented in c.opt
While it's possible that lang_specific_driver() is gumming up the
works, it isn't being handed the right stuff:
(gdb) p decoded_options[3]
$3 = {
opt_index = 1005,
warn_message = 0x0,
arg = 0xfffffffff549 "xec-charset",
orig_option_with_args_text = 0x7f9300 "-exec-charset",
canonical_option = {0x667c80 "-e", 0xfffffffff549 "xec-charset", 0x0,
0x0}, canonical_option_num_elements = 2,
value = 1,
mask = 0,
errors = 0
}
It looks like the option is "-e" with the argument "xec-charset". [1]
I don't see what I am doing to cause that.
If this is just a matter of undocumented magic, I could fix that if I
knew what it was. :-)
--jkl
[1] That was the trick troff used back in the day. To let the user say
troff -man
meaning, use the "man" macro package, the system actually had a '-m'
option that took a 'an' argument.