/* goredo -- djb's redo implementation on pure Go Copyright (C) 2020-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package main import ( "flag" "fmt" "os" ) const ( Version = "1.19.0" Warranty = `Copyright (C) 2020-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .` ) func usage(cmd string) { var d string switch cmd { case CmdNameRedo: d = `Usage: redo [-j X] [-k] [-s] [-x|-xx] [options] [target ...] Forcefully and *sequentially* build specified targets. If no targets specified, then use "all" one.` case CmdNameRedoIfchange: d = `Usage: redo-ifchange [-j X] [-k] [-s] [-x|-xx] target [...] Build specified targets in parallel, if they are changed. Record them as dependencies for current target.` case CmdNameRedoIfcreate: d = `Usage: redo-ifcreate target [...] Record ifcreate dependency for current target. Unusable outside .do.` case CmdNameRedoAlways: d = `Usage: redo-always Always build current target. Unusable outside .do.` case CmdNameRedoCleanup: d = `Usage: redo-cleanup [-n] {full,log,tmp} [...] Remove either all goredo's related temporary files, or kept stderr logs, or everything (including .redo directories) related.` case CmdNameRedoLog: d = `Usage: redo-log [-c] [-r] target [ | tai64nlocal ] Display kept target's stderr with TAI64N timestamped lines. Only the last build is kept. You must enable stderr keeping with either -logs, or REDO_LOGS=1. -c option show the exact command invoked, start and finish time. -r option recursively and linearly show also all deeper redo calls and their logs.` case CmdNameRedoDot: d = `Usage: redo-dot target [...] Write dependency DOT graph to stdout.` case CmdNameRedoStamp: d = `Usage: redo-stamp < [$3] Record stamp dependency for current target. Unusable outside .do. Stamp dependency does not play any role, as all targets are hashed anyway.` case CmdNameRedoWhichdo: d = `Usage: redo-whichdo target Display .do search paths for specified target. Exits successfully if the last .do in output if the found existing one.` case CmdNameRedoTargets: d = `Usage: redo-targets [target ...] List all currently known targets.` case CmdNameRedoSources: d = `Usage: redo-sources [target ...] List all currently known source files.` case CmdNameRedoOOD: d = `Usage: redo-ood [target ...] List all currently known out-of-date targets.` case CmdNameRedoAffects: d = `Usage: redo-affects target [...] List all targets that will be affected by changing the specified ones.` default: d = `Usage: goredo -symlinks goredo expects to be called through the symbolic link to it. Available commands: redo, redo-affects, redo-always, redo-cleanup, redo-dot, redo-ifchange, redo-ifcreate, redo-log, redo-ood, redo-sources, redo-stamp, redo-targets, redo-whichdo.` } fmt.Fprintf(os.Stderr, "%s\n\nCommon options:\n", d) flag.PrintDefaults() fmt.Fprintln(os.Stderr, ` Additional environment variables: NO_COLOR -- disable messages colouring REDO_TOP_DIR -- do not search for .do above that directory (it can contain .redo/top as an alternative)`) if cmd == CmdNameRedo || cmd == CmdNameRedoIfchange { fmt.Fprintln(os.Stderr, ` REDO_NO_SYNC -- disable files/directories explicit filesystem syncing REDO_INODE_NO_TRUST -- do not trust inode information (except for size) and always check file's hash REDO_MAKE -- bmake/gmake/none(default) jobserver protocol compatibility`) } }