2020-12-28 10:33:13 +02:00

33 lines
1.1 KiB
Forth

module Cmdline
type Cmdline = {
Inputs: string list
Output: string
Roots: string list
}
let private exeName = System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName
let private usage () =
printfn "usage: %s inputfile [inputfile2..] outputfile :keepclass [:keepclass2..]" exeName
printfn "Merges one or more input JARs into one output JAR, while pruning unreferenced classes."
None
let private parseArgsList (args: string list) =
let (classes, args) = args |> List.partition (fun arg -> arg.Length > 1 && arg.StartsWith ":")
let (files, args) = args |> List.partition (fun arg -> arg.Length > 0 && not (arg.StartsWith ":"))
if files.Length >= 2 && classes.Length >= 1 && args.Length = 0
then Some { Inputs = List.take (files.Length - 1) files
Output = List.last files
Roots = classes |> List.map (fun arg -> arg.Substring 1)
}
else usage()
let print format =
Printf.ksprintf (fun msg -> printfn "%s: %s" exeName msg) format
let parse args =
if isNull args then usage ()
else Array.toList args |> parseArgsList