From 50a7031007698590494e87b65f398672d978bd19 Mon Sep 17 00:00:00 2001 From: George Koehler Date: Sun, 29 Oct 2017 22:00:43 -0400 Subject: [PATCH] Don't use '-' in option string to getopt(). @dram reported a build failure in FreeBSD at https://github.com/davidgiven/ack/issues/1#issuecomment-273668299 Linux manual for getopt(3) says: > If the first character of optstring is '-', then each nonoption > argv-element is handled as if it were the argument of an option with > character code 1.... > > The use of '+' and '-' in optstring is a GNU extension. GNU/Linux and OpenBSD handle '-' in this special way, but FreeBSD seems not to. If '-' is not special, then em_ego can't find its input file, so the build must fail. This commit stops using '-' in both em_b and em_ego, but doesn't change mcg. Also fix em_ego -O3 to not act like -O4. --- lang/b/compiler/b0.c | 16 ++++++++++++---- util/ego/em_ego/em_ego.c | 16 ++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lang/b/compiler/b0.c b/lang/b/compiler/b0.c index 7ae35239b..2bf936805 100644 --- a/lang/b/compiler/b0.c +++ b/lang/b/compiler/b0.c @@ -34,12 +34,19 @@ init(char *s, int val) np->offset = val; } +static void +usage(void) +{ + error("Usage: em_b [-w wordsize] [-B modulename] [-i inputfile] [-o outputfile]"); + exit(1); +} + int main(int argc, char *argv[]) { for (;;) { - int opt = getopt(argc, argv, "-w:B:i:o:"); + int opt = getopt(argc, argv, "w:B:i:o:"); if (opt == -1) break; @@ -66,11 +73,12 @@ main(int argc, char *argv[]) } break; - derfault: - error("Usage: em_b [-w wordsize] [-B modulename] [-i inputfile] [-o outputfile]"); - exit(1); + default: + usage(); } } + if (optind < argc) + usage(); init("auto", AUTO); init("extrn", EXTERN); diff --git a/util/ego/em_ego/em_ego.c b/util/ego/em_ego/em_ego.c index 36d64561f..eb177116a 100644 --- a/util/ego/em_ego/em_ego.c +++ b/util/ego/em_ego/em_ego.c @@ -346,7 +346,7 @@ int main(int argc, char* argv[]) opterr = 0; for (;;) { - int opt = getopt(argc, argv, "-M:P:O:vt"); + int opt = getopt(argc, argv, "M:P:O:vt"); if (opt == -1) break; @@ -364,17 +364,14 @@ int main(int argc, char* argv[]) { int o = atoi(optarg); if (o <= 2) - break; - if (o <= 3) + Ophase = &O2phases[0]; + else if (o == 3) Ophase = &O3phases[0]; - Ophase = &O4phases[0]; + else + Ophase = &O4phases[0]; break; } - case 1: - add_file(optarg); - break; - case 't': keeptemps = 1; goto addopt; @@ -390,6 +387,9 @@ int main(int argc, char* argv[]) } } + for (i = optind; i < argc; i++) + add_file(argv[i]); + phase_args[nphase_args] = 0; if (nuphases) Ophase = uphases; -- 2.34.1