|| ! isdigit ((unsigned char) argv[i + 1][0])))
argv[i] = (char *) "--shared";
+ /* Because we permit long options to start with a single dash, and
+ we have a --library option, and the -l option is conventionally
+ used with an immediately following argument, we can have bad
+ results of somebody tries to use -l with a library whose name
+ happens to start with "ibrary", as in -li. We avoid problems by
+ simply turning -l into --library. This means that users will
+ have to use two dashes in order to use --library, which is OK
+ since that's how it is documented.
+
+ FIXME: It's possible that this problem can arise for other short
+ options as well, although the user does always have the recourse
+ of adding a space between the option and the argument. */
+ for (i = 1; i < argc; i++)
+ {
+ if (argv[i][0] == '-'
+ && argv[i][1] == 'l'
+ && argv[i][2] != '\0')
+ {
+ char *n;
+
+ n = (char *) xmalloc (strlen (argv[i]) + 20);
+ sprintf (n, "--library=%s", argv[i] + 2);
+ argv[i] = n;
+ }
+ }
+
last_optind = -1;
while (1)
{
- /* getopt_long_only is like getopt_long, but '-' as well as '--' can
- indicate a long option. */
int longind;
int optc;
last_optind = optind;
}
+ /* getopt_long_only is like getopt_long, but '-' as well as '--'
+ can indicate a long option. */
optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
if (optc == -1)