(command.CommandList children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName PROJROOT))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Require environment var PROJROOT'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) terminator: <Id.Op_Semi _> ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ] ops: [<Id.Op_DPipe _>] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' -> Checking Version'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'version_parts='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'version_parts='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'version_parts='> name:version_parts) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-i>} {<version>} {($ Id.VSub_DollarName PROJROOT) <'/Changes'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <head> more_env: [] words: [{<head>} {<-n>} {<1>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-ne>} { (SQ < 's/Version *\\([0-9]*\\)\\.\\([0-9]*\\)\\.\\([0-9]*\\)[^0-9]*\\([-0-9]*\\)/\\1 \\2 \\3 \\4/p' > ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.Simple blame_tok: <read> more_env: [] words: [{<read>} {<major>} {<minor>} {<release>} {<date>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<END>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [($ Id.VSub_DollarName version_parts) <'\n'>] ) ) ] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'extra='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra='> name:extra) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName major))} {<-o>} {<-z>} {(DQ ($ Id.VSub_DollarName date))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'Can\'t get version from ./Changes'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [96 117] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <' Changes version is '> ($ Id.VSub_DollarName major) <.> ($ Id.VSub_DollarName minor) <.> ($ Id.VSub_DollarName release) <' ('> ($ Id.VSub_DollarName date) <')'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-d>} {(DQ ($ Id.VSub_DollarName PROJROOT) <'/.git'>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <export> more_env: [] words: [ {<export>} {<Id.Lit_VarLike 'GIT_DIR='> (DQ ($ Id.VSub_DollarName PROJROOT) <'/.git'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <export> more_env: [] words: [ {<export>} {<Id.Lit_VarLike 'GIT_WORK_TREE='> (DQ ($ Id.VSub_DollarName PROJROOT))} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'head_hash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'head_hash='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'head_hash='> name:head_hash) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<log>} {<-n>} {<1>} {<--format> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <h> } ] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'tag_hash='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'tag_hash='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'tag_hash='> name:tag_hash) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<log>} {<-n>} {<1>} {<--format> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <h> } {<v> ($ Id.VSub_DollarName major) <.> ($ Id.VSub_DollarName minor) <.> ($ Id.VSub_DollarName release) } {<-->} ] redirects: [ (Redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'git_dirty='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'git_dirty='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'git_dirty='> name:git_dirty) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<status>} {<--porcelain>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <wc> more_env: [] words: [{<wc>} {<-l>}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName git_dirty))} {<-gt>} {<0>} {<-o>} {(DQ ($ Id.VSub_DollarName tag_hash))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName head_hash))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' Git state differs from ./Changes'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'extra='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra='> name:extra) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName head_hash))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'date='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'date='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'date='> name:date) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<log>} {<-n>} {<1>} {<--format> <Id.Lit_Equals '='> <format> <Id.Lit_Colon ':'> <Id.Lit_Other '%'> <ci> } ] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/ /T/;s/ //'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName git_dirty))} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'extra='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'extra='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'extra='> name:extra) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName extra) <'+changes'>)} ) ] redirects: [] ) (command.Sentence child: (command.ShAssignment left: <Id.Lit_VarLike 'date='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'date='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'date='> name:date) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <date> more_env: [] words: [{<date>} {(DQ <'+%Y-%m-%dT%H:%M:%S'>)}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) } ) ] redirects: [] ) terminator: <Id.Op_Semi _> ) ] spids: [332 347] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [254 282] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [154 168] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Sentence child: (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <' Version is '> ($ Id.VSub_DollarName major) <' '> ($ Id.VSub_DollarName minor) <' '> ($ Id.VSub_DollarName release) <' '> ($ Id.VSub_DollarName extra) <' '> ($ Id.VSub_DollarName date) ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName extra))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'suffix='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suffix='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suffix='> name:suffix) op: assign_op.Equal rhs: {(DQ <-> ($ Id.VSub_DollarName extra))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'suffix='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'suffix='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'suffix='> name:suffix) op: assign_op.Equal rhs: {(SQ )} ) ] redirects: [] ) ] ops: [<Id.Op_DAmp _> <Id.Op_DPipe _>] ) terminator: <Id.Op_Semi _> ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <' -> Regenerating Version.c'>)}] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<END>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'/* Generated by build-version.sh */\n'> <'\n'> <'const int CGLVER_Major='> ($ Id.VSub_DollarName major) <';\n'> <'const int CGLVER_Minor='> ($ Id.VSub_DollarName minor) <';\n'> <'const int CGLVER_Release='> ($ Id.VSub_DollarName release) <';\n'> <'const char* CGLVER_Extra='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName extra) <Id.Right_DoubleQuote '"'> <';\n'> <'const char* CGLVER_Date='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName date) <Id.Right_DoubleQuote '"'> <';\n'> <'const char* CGLVER_String='> <Id.Right_DoubleQuote '"'> ($ Id.VSub_DollarName major) <.> ($ Id.VSub_DollarName minor) <.> ($ Id.VSub_DollarName release) ($ Id.VSub_DollarName suffix) <Id.Right_DoubleQuote '"'> <';\n'> <'\n'> ] ) ) ] do_fork: T ) ] )