33 lines
1.1 KiB
Forth
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
|