There are some ugly bits of code that need refactoring:
After introducing common options, the command line arguments are effectively parsed twice. This can be done better! Maybe even generalise the flag parsing code to avoid repetition.
The initialisation -- particularly OS detection -- routine is a bit horrible. It also relies on global state (see above), which could be done better/not required at all.
The dependency detection/checking functions could be improved a bit, in terms of abstraction.
There are some ugly bits of code that need refactoring:
After introducing common options, the command line arguments are effectively parsed twice. This can be done better! Maybe even generalise the flag parsing code to avoid repetition.
The initialisation -- particularly OS detection -- routine is a bit horrible. It also relies on global state (see above), which could be done better/not required at all.
The dependency detection/checking functions could be improved a bit, in terms of abstraction.