tiny_libmaker: more robust arguments interpretation
commit100f94be99ef06fb168850da528492b00e7520dc
authorAvi Halachmi (:avih) <avihpit@yahoo.com>
Sun, 12 Jun 2016 11:51:29 +0000 (12 14:51 +0300)
committerAvi Halachmi (:avih) <avihpit@yahoo.com>
Sun, 19 Jun 2016 11:43:46 +0000 (19 14:43 +0300)
tree2f3705fa318d68a964300989cb1ffb9136a9072c
parent1ca685f887310b5cbdc415cdfc3a578dbc8d82d8
tiny_libmaker: more robust arguments interpretation

- Syntax is now much closer to gnu ar, but still supports whatever was
  supported before, with the following exceptions (which gnu ar has too):
  - lib is now mandatory (was optional and defaulted to ar_test.a before).
  - Path cannot start with '-' (but ./-myfile.o is OK).
- Unlike gnu ar, modes are still optional (as before).
- Now supports also (like gnu ar):
  - First argument as options doesn't have to start with '-', later options do.
  - Now supports mode v (verbose) with same output format as gnu ar.
  - Any names for lib/objs (were limited to .a/.o - broke cmake on windows).
  - Now explicitly fail on options which would be destructive for the user.
  - Now doesn't get confused by options between file arguments.
- Still ignores other unknown options - as before.
- Now doesn't read out-of-bounds if an option is one char.

- As a result, cmake for windows can now use tiny_libmaker as ar, and
  configure can also detect tiny_libmaker as a valid ar (both couldn't before).

Ignoring all options could previously cause to misinterpret the mode in a
destructive way, e.g. if the user wanted to do something with an existing
archive (such as p - print, or x - extract, etc), then it would instead just
delete (re-create) the archive.

Modes which can be destructive if ignored now explicitly fail. These include
[habdioptxN]. Note that 'h' can be ignored, but this way we also implicitly
print the usage for -h/--help.

The .a/.o name limitations previously resulted in complete failure on some
cases, such as cmake on windows which uses <filename>.obj and <libname>.lib .

Fixed: e.g. 'tiny_libmaker r x.a x.o' was reading out of bounds [-1] for 'r'.
win32/tools/tiny_libmaker.c