0001 #if os(Linux)
0002 import Glibc
0003 #else
0004 import Darwin.libc
0005 #endif
0006
0007
0008 extension CommandType {
0010 @noreturn public func run(version:String? = nil) {
0012 let parser = ArgumentParser(arguments: Process.arguments)
0013
0014 if parser.hasOption("version") && !parser.hasOption("help") {
0015 if let version = version {
0016 print(version)
0017 exit(0)
0018 }
0019 }
0020
0021 let executableName = parser.shift()!
0023 do {
0024 try run(parser)
0025 } catch let error as Help {
0026 let help = error.reraise("$ \(executableName)")
0027 fputs("\(help)\n", stderr)
0028 exit(1)
0029 } catch GroupError.NoCommand(let path, let group) {
0030 var usage = "$ \(executableName)"
0031 if let path = path {
0032 usage += " \(path)"
0033 }
0034 let help = Help([], command: usage, group: group)
0035 fputs("\(help)\n", stderr)
0036 exit(1)
0037 } catch let error as UsageError {
0038 fputs("\(error)\n", stderr)
0039 exit(1)
0040 } catch {
0041 fputs("\(error)\n", stderr)
0042 exit(1)
0043 }
0044
0045 exit(0)
0046 }
0047 }
0048