Add "wuffs help foo" for the command line tool
Updates #62
diff --git a/cmd/wuffs/gen.go b/cmd/wuffs/gen.go
index 522f22b..bcb738c 100644
--- a/cmd/wuffs/gen.go
+++ b/cmd/wuffs/gen.go
@@ -37,7 +37,12 @@
func doGenlib(wuffsRoot string, args []string) error { return doGenGenlib(wuffsRoot, args, true) }
func doGenGenlib(wuffsRoot string, args []string, genlib bool) error {
- flags := flag.NewFlagSet("gen", flag.ExitOnError)
+ flagSetName := `"wuffs gen <flags> std/pkg1 std/pkg2 etc"`
+ if genlib {
+ flagSetName = `"wuffs genlib <flags> std/pkg1 std/pkg2 etc"`
+ }
+
+ flags := flag.NewFlagSet(flagSetName, flag.ExitOnError)
genlinenumFlag := flags.Bool("genlinenum", cf.GenlinenumDefault, cf.GenlinenumUsage)
langsFlag := flags.String("langs", langsDefault, langsUsage)
skipgendepsFlag := flags.Bool("skipgendeps", skipgendepsDefault, skipgendepsUsage)
diff --git a/cmd/wuffs/main.go b/cmd/wuffs/main.go
index c768e00..e0a433c 100644
--- a/cmd/wuffs/main.go
+++ b/cmd/wuffs/main.go
@@ -52,6 +52,8 @@
gen generate code for packages and dependencies
genlib generate software libraries
test test packages
+
+Use "wuffs help <command>" for more information about a command.
`)
}
@@ -76,6 +78,13 @@
return c.do(wuffsRoot, args[1:])
}
}
+ if (len(args) == 2) && (args[0] == "help") {
+ for _, c := range commands {
+ if args[1] == c.name {
+ return c.do(wuffsRoot, []string{"-help"})
+ }
+ }
+ }
}
usage()
os.Exit(1)
diff --git a/cmd/wuffs/test.go b/cmd/wuffs/test.go
index 23efe45..f67166e 100644
--- a/cmd/wuffs/test.go
+++ b/cmd/wuffs/test.go
@@ -29,16 +29,26 @@
func doTest(wuffsRoot string, args []string) error { return doBenchTest(wuffsRoot, args, false) }
func doBenchTest(wuffsRoot string, args []string, bench bool) error {
- flags := flag.NewFlagSet("test", flag.ExitOnError)
+ flagSetName := `"wuffs test <flags> std/pkg1 std/pkg2 etc"`
+ if bench {
+ flagSetName = `"wuffs bench <flags> std/pkg1 std/pkg2 etc"`
+ }
+
+ flags := flag.NewFlagSet(flagSetName, flag.ExitOnError)
ccompilersFlag := flags.String("ccompilers", cf.CcompilersDefault, cf.CcompilersUsage)
focusFlag := flags.String("focus", cf.FocusDefault, cf.FocusUsage)
- iterscaleFlag := flags.Int("iterscale", cf.IterscaleDefault, cf.IterscaleUsage)
langsFlag := flags.String("langs", langsDefault, langsUsage)
mimicFlag := flags.Bool("mimic", cf.MimicDefault, cf.MimicUsage)
- repsFlag := flags.Int("reps", cf.RepsDefault, cf.RepsUsage)
skipgenFlag := flags.Bool("skipgen", skipgenDefault, skipgenUsage)
skipgendepsFlag := flags.Bool("skipgendeps", skipgendepsDefault, skipgendepsUsage)
+ iterscaleFlag := (*int)(nil)
+ repsFlag := (*int)(nil)
+ if bench {
+ iterscaleFlag = flags.Int("iterscale", cf.IterscaleDefault, cf.IterscaleUsage)
+ repsFlag = flags.Int("reps", cf.RepsDefault, cf.RepsUsage)
+ }
+
if err := flags.Parse(args); err != nil {
return err
}
@@ -53,13 +63,15 @@
if !cf.IsAlphaNumericIsh(*focusFlag) {
return fmt.Errorf("bad -focus flag value %q", *focusFlag)
}
- if *iterscaleFlag < cf.IterscaleMin || cf.IterscaleMax < *iterscaleFlag {
- return fmt.Errorf("bad -iterscale flag value %d, outside the range [%d ..= %d]",
- *iterscaleFlag, cf.IterscaleMin, cf.IterscaleMax)
- }
- if *repsFlag < cf.RepsMin || cf.RepsMax < *repsFlag {
- return fmt.Errorf("bad -reps flag value %d, outside the range [%d ..= %d]",
- *repsFlag, cf.RepsMin, cf.RepsMax)
+ if bench {
+ if *iterscaleFlag < cf.IterscaleMin || cf.IterscaleMax < *iterscaleFlag {
+ return fmt.Errorf("bad -iterscale flag value %d, outside the range [%d ..= %d]",
+ *iterscaleFlag, cf.IterscaleMin, cf.IterscaleMax)
+ }
+ if *repsFlag < cf.RepsMin || cf.RepsMax < *repsFlag {
+ return fmt.Errorf("bad -reps flag value %d, outside the range [%d ..= %d]",
+ *repsFlag, cf.RepsMin, cf.RepsMax)
+ }
}
args = flags.Args()