(List (FunctionDef __require_tool_version_compare [] (Subshell (List (Com {[LIT_CHARS set]} {[LIT_OTHER "+"] [LIT_CHARS e]} ) (= scope= flags=0 words=[] bindings=[('awk_strverscmp', {[SQ d2) exit 2\n"> ]})]) (Com {[LIT_CHARS awk]} {[DQ [VarSub awk_strverscmp]]} {[LIT_VAR_LIKE "v1="] [DQ [VarSub 1]] =} {[LIT_VAR_LIKE "v2="] [DQ [VarSub 2]] =} {[LIT_CHARS /dev/null]} ) (Case to_match={[VarSub ?]}, pat_word_list=[[{[LIT_CHARS 1]}], [{[LIT_CHARS 0]}], [{[LIT_CHARS 2]}]] (Com {[LIT_CHARS echo]} {[SQ ]} ) (Com {[LIT_CHARS echo]} {[SQ ">]} ) ) ) ) ) (FunctionDef __require_tool_fatal [] (List (Com {[LIT_CHARS echo]} {[VarSub @]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/stderr]} "> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (FunctionDef require_tool [] (List (= scope= flags=0 words=[] bindings=[('envvar_name', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub 1]}) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]}) )]})]) (= scope= flags=0 words=[] bindings=[('tool', {[ComSub (AndOr OP_OR_IF (Com {[LIT_CHARS printenv]} {[VarSub envvar_name]}) (Com {[LIT_CHARS echo]} {[VarSub 1]}) )]})]) (= scope= flags=0 words=[] bindings=[('version', {[ComSub (Pipeline (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2)]{[VarSub tool]} {[LIT_CHARS --version]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[SQ ]}) )]})]) (If (Com {[LIT_CHARS test]} {[LIT_CHARS x] [DQ [VarSub version]]} {[LIT_DBRACKET_LIKE "="]} {[LIT_CHARS x]} ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub tool][LIT_CHARS " is required"]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/stderr]} "> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) (Case to_match={[ComSub (Com {[LIT_CHARS __require_tool_version_compare]} {[DQ [VarSub 2]]} {[DQ [VarSub version]]})]}, pat_word_list=[[{[SQ ">]}]] (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 1][LIT_CHARS " "][VarSub 2][LIT_CHARS " or better is required: this is "][VarSub tool][LIT_CHARS " "][VarSub version]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/stderr]} "> 1), > ) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) ) (FunctionDef usage [] (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "NAME\n"][LIT_CHARS " require_tool.sh - Ensure version of a tool is greater than the one expected\n"][LIT_CHARS "\n"][LIT_CHARS "SYNOPSYS\n"][LIT_CHARS " require_tool.sh [ -h ]\n"][LIT_CHARS " [ --help ]\n"][LIT_CHARS " [ TOOL MIN_VERSION ]\n"][LIT_CHARS "\n"][LIT_CHARS "DESCRIPTION\n"][LIT_CHARS " TOOL is the name or path of the program to check. If the name is specified, its\n"][LIT_CHARS " path is deduced from PATH environment variable. If environment variable TOOL\n"][LIT_CHARS " (in upper-case characters) is defined, considers its value as path to the tool.\n"][LIT_CHARS "\n"][LIT_CHARS " MIN_VERSION is a string representing the minimum required version.\n"][LIT_CHARS "\n"][LIT_CHARS "BEHAVIOR\n"][LIT_CHARS " * locate path to the program.\n"][LIT_CHARS " * execute "][LIT_OTHER "$"][LIT_CHARS " TOOL_PATH --version\n"][LIT_CHARS " * extract version from standard output.\n"][LIT_CHARS " * compare this version to the expected one.\n"][LIT_CHARS "\n"][LIT_CHARS "OPTIONS\n"][LIT_CHARS " -h --help\n"][LIT_CHARS " Display this message and exit 0\n"][LIT_CHARS "\n"][LIT_CHARS "ERRORS\n"][LIT_CHARS " if program is not found or its version is prior to expected version,\n"][LIT_CHARS " a message is written to error output.\n"][LIT_CHARS "\n"][LIT_CHARS "EXIT VALUE\n"][LIT_CHARS " returns 0 if program version if greater equals than expected version,\n"][LIT_CHARS " returns 1 otherwise.\n"][LIT_CHARS "\n"][LIT_CHARS "EXAMPLE\n"][LIT_CHARS " "][LIT_OTHER "$"][LIT_CHARS " require_tool.sh emacs 23\n"][LIT_CHARS " "][LIT_OTHER "$"][LIT_CHARS " CC=g++ require_tool.sh cc 4.6\n"][LIT_CHARS " "][LIT_OTHER "$"][LIT_CHARS " require_tool.sh zsh 4.5\n"][LIT_CHARS "\n"]]} 0), > ) ) (For arg [{[VarSub @]}]) (Case to_match={[VarSub arg]}, pat_word_list=[[{[LIT_CHARS -h]}, {[LIT_CHARS --help]}]] (List (Com {[LIT_CHARS usage]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 2]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "ERROR: expecting 2 parameters. Please see option --help"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS require_tool]} {[VarSub @]} ) )