(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TMP) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Name TMP> suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {<Id.Lit_Slash /> <tmp>} ) ) } spids: [40] ) ] ) (C {<readonly>} {<TMP>}) (command.ShFunction name: log body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$0') <': '> ($ Id.VSub_At '$@'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})] ) ] ) ) (command.ShFunction name: die body: (command.BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$0') <' ERROR: '> ($ Id.VSub_At '$@'))}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ) (command.ShFunction name: show_help body: (command.BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 127 stdin_parts: [ <'Usage: ./configure [OPTION]\n'> <'\n'> <'Detects system settings before a build of Oil.\n'> <'\n'> <' --prefix Prefix for the bin/ directory [/usr/local]\n'> <' --with-readline Fail unless readline is available.\n'> <" --without-readline Don't compile with readline, even if it's available.\n"> <"\t\t The shell won't have any interactive features.\n"> ] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_prefix) op: assign_op.Equal rhs: {(SQ </usr/local>)} spids: [140] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_with_readline) op: assign_op.Equal rhs: {(SQ )} spids: [145] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_without_readline) op: assign_op.Equal rhs: {(SQ )} spids: [152] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(SQ )}] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [177 179 185 -1] ) (case_arm pat_list: [{<--help>}] action: [ (C {<show_help>}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<0>} ) ] spids: [188 189 204 -1] ) (case_arm pat_list: [{<--with-readline>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_with_readline) op: assign_op.Equal rhs: {<1>} spids: [212] ) ] ) ] spids: [208 209 216 -1] ) (case_arm pat_list: [{<--without-readline>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_without_readline) op: assign_op.Equal rhs: {<1>} spids: [224] ) ] ) ] spids: [220 221 228 -1] ) (case_arm pat_list: [{<--prefix> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_prefix) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Other ':'>} {(SQ <'--prefix=\\(.*\\)'>)} ) ] ) ) } spids: [246] ) ] ) ] spids: [240 243 262 -1] ) (case_arm pat_list: [{<--prefix>}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_Pound '$#')} {<-eq>} {<1>}) terminator: <Id.Op_Semi _> ) ] action: [(C {<die>} {(DQ <'--prefix requires an argument'>)})] spids: [269 280] ) ] ) (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FLAG_prefix) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [296] ) ] ) ] spids: [265 266 300 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<die>} {(DQ <"Invalid argument '"> ($ Id.VSub_Number '$1') <"'">)})] spids: [303 304 316 -1] ) ] ) (C {<shift>}) ] ) ) (command.ShFunction name: cc_quiet body: (command.BraceGroup children: [ (command.Simple words: [{<cc>} {(DQ ($ Id.VSub_At '$@'))} {<-o>} {</dev/null>}] redirects: [ (redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{</dev/null>}) (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>}) ] ) ] ) ) (command.ShFunction name: cc_or_die body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<cc>} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TMP') </cc.log>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<log>} {(DQ <"Error running 'cc "> ($ Id.VSub_At '$@') <"':">)}) (C {<cat>} {($ Id.VSub_DollarName '$TMP') </cc.log>}) (C {<die>} {(DQ <'Fatal compile error running feature test'>)}) ] spids: [366 384] ) ] ) ] ) ) (command.ShFunction name: cc_statement body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'pp_var='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'prog='> (DQ ($ Id.VSub_Number '$2'))}) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TMP') </cc_statement.c>} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 456 stdin_parts: [<'int main() {\n'> <' '> ($ Id.VSub_DollarName '$prog') <'\n'> <'}\n'>] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<cc_quiet>} {($ Id.VSub_DollarName '$TMP') </cc_statement.c>}) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <'#define '> ($ Id.VSub_DollarName '$pp_var') <' 1'>)}) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<0>} ) ] spids: [462 470] ) ] else_action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})] ) ] ) ) (command.ShFunction name: detect_readline body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<cc_quiet>} {<build/detect-readline.c>} {<-l>} {<readline>}) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(SQ <'HAVE_READLINE=1'>)})] spids: [510 521] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {(DQ ($ Id.VSub_DollarName '$FLAG_with_readline'))} {<Id.Lit_Equals '='>} {<1>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<die>} {(SQ <'readline was not detected on the system (--with-readline passed).'>)} ) ] spids: [534 547] ) ] ) (C {<echo>} {(SQ <'HAVE_READLINE='>)}) ] ) ] ) ) (command.ShFunction name: detect_and_echo_vars body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<test>} {(DQ ($ Id.VSub_DollarName '$FLAG_without_readline'))} {<Id.Lit_Equals '='>} {<1>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(SQ <'HAVE_READLINE='>)})] spids: [579 592] ) ] else_action: [(C {<detect_readline>})] ) (C {<echo>} {(DQ <'PREFIX='> ($ Id.VSub_DollarName '$FLAG_prefix'))}) ] ) ) (command.ShFunction name: cc_print_expr body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'c_expr='> (DQ ($ Id.VSub_Number '$1'))}) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TMP') </print_expr.c>} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 661 stdin_parts: [ <'#include <stdio.h>\n'> <'#include <sys/types.h> /* size_t, pid_t */\n'> <'\n'> <'int main() {\n'> <' printf('> <Id.Right_DoubleQuote '"'> <'%lu'> <Id.Right_DoubleQuote '"'> <', '> ($ Id.VSub_DollarName '$c_expr') <');\n'> <'}\n'> ] ) ] ) (C {<cc_or_die>} {<-o>} {($ Id.VSub_DollarName '$TMP') </print_expr>} {($ Id.VSub_DollarName '$TMP') </print_expr.c>} ) (command.Simple words: [{($ Id.VSub_DollarName '$TMP') </print_expr>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TMP') </print_expr.out>} ) ] ) ] ) ) (command.ShFunction name: check_sizeof body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'pp_var='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'c_type='> (DQ ($ Id.VSub_Number '$2'))}) (C {<local>} {<Id.Lit_VarLike 'min_bytes='> (DQ ($ Id.VSub_Number '$3'))}) (C {<cc_print_expr>} {(DQ <'sizeof('> ($ Id.VSub_DollarName '$c_type') <')'>)}) (C {<local>} {<actual_bytes>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual_bytes) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<cat>} {($ Id.VSub_DollarName '$TMP') </print_expr.out>})] ) ) } spids: [771] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<test>} {<-n>} {(DQ ($ Id.VSub_DollarName '$min_bytes'))}) (C {<test>} {(DQ ($ Id.VSub_DollarName '$actual_bytes'))} {<-lt>} {(DQ ($ Id.VSub_DollarName '$min_bytes'))} ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<die>} { (DQ <'sizeof('> ($ Id.VSub_DollarName '$c_type') <') should be at least '> ($ Id.VSub_DollarName '$min_bytes') <'; got '> ($ Id.VSub_DollarName '$actual_bytes') ) } ) ] spids: [781 806] ) ] ) (C {<echo>} { (DQ <'#define '> ($ Id.VSub_DollarName '$pp_var') <' '> ($ Id.VSub_DollarName '$actual_bytes') ) } ) ] ) ) (command.ShFunction name: detect_c_language body: (command.BraceGroup children: [ (C {<check_sizeof>} {<SIZEOF_INT>} {(SQ <int>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_LONG>} {(SQ <long>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_VOID_P>} {(SQ <'void *'>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_SHORT>} {(SQ <short>)} {<2>}) (C {<check_sizeof>} {<SIZEOF_FLOAT>} {(SQ <float>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_DOUBLE>} {(SQ <double>)} {<8>}) (C {<check_sizeof>} {<SIZEOF_SIZE_T>} {(SQ <size_t>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_FPOS_T>} {(SQ <fpos_t>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_PID_T>} {(SQ <pid_t>)} {<4>}) (C {<check_sizeof>} {<SIZEOF_OFF_T>} {(SQ <off_t>)} {(SQ )}) (C {<check_sizeof>} {<SIZEOF_TIME_T>} {(SQ <time_t>)} {(SQ )}) (command.If arms: [ (if_arm cond: [ (C {<cc_statement>} {<HAVE_LONG_LONG>} {(SQ <'long long x; x = (long long)0;'>)}) ] action: [(C {<check_sizeof>} {<SIZEOF_LONG_LONG>} {(SQ <'long long'>)} {<8>})] spids: [995 1006] ) ] ) (command.If arms: [ (if_arm cond: [ (C {<cc_statement>} {<HAVE_LONG_DOUBLE>} {(SQ <'long double x; x = (long double)0;'>)} ) ] action: [(C {<check_sizeof>} {<SIZEOF_LONG_DOUBLE>} {(SQ <'long double'>)} {<8>})] spids: [1023 1034] ) ] ) (command.If arms: [ (if_arm cond: [(C {<cc_statement>} {<HAVE_C99_BOOL>} {(SQ <'_Bool x; x = (_Bool)0;'>)})] action: [(C {<check_sizeof>} {<SIZEOF__BOOL>} {(SQ <_Bool>)} {<1>})] spids: [1052 1063] ) ] ) (C {<echo>} {(SQ <'#define HAVE_WCHAR_H 1'>)}) (C {<echo>} {(SQ <'#define SIZEOF_WCHAR_T 4'>)}) (command.Simple words: [{<cat>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$TMP') </detect_va_list.c>} ) (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 1144 stdin_parts: [ <'#include <stdarg.h> /* C89 */\n'> <'int main() {\n'> <' va_list list1, list2;\n'> <' list1 = list2;\n'> <'}\n'> ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<cc_quiet>} {($ Id.VSub_DollarName '$TMP') </detect_va_list.c>}) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(SQ )})] spids: [1146 1154] ) ] else_action: [(C {<echo>} {(SQ <'#define VA_LIST_IS_ARRAY 1'>)})] ) ] ) ) (command.ShFunction name: main body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {<cc_quiet>} {<build/detect-cc.c>})] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [(C {<die>} {(DQ <"Couldn't compile a basic C program (cc not installed?)">)})] spids: [1197 1206] ) ] ) (C {<mkdir>} {<-p>} {<_build>}) (C {<local>} {<Id.Lit_VarLike 'sh_out='> <_build/detected-config.sh>}) (C {<local>} {<Id.Lit_VarLike 'c_out='> <_build/detected-config.h>}) (command.Simple words: [{<detect_and_echo_vars>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$sh_out')} ) ] ) (command.Simple words: [{<detect_c_language>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {($ Id.VSub_DollarName '$c_out')} ) ] ) (C {<log>} { (DQ <'Wrote '> ($ Id.VSub_DollarName '$sh_out') <' and '> ($ Id.VSub_DollarName '$c_out') ) } ) ] ) ) (command.ShFunction name: unittest body: (command.BraceGroup children: [ (C {<cc_print_expr>} {(SQ <'sizeof(int)'>)}) (C {<local>} {<actual>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:actual) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<cat>} {($ Id.VSub_DollarName '$TMP') </print_expr.out>})] ) ) } spids: [1294] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<test>} {(DQ ($ Id.VSub_DollarName '$actual'))} {<Id.Lit_Equals '='>} {<4>}) (C {<die>} {(DQ <'Expected 4, got '> ($ Id.VSub_DollarName '$actual'))}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<check_sizeof>} {<SIZEOF_INT>} {(SQ <int>)} {<4>}) (C {<die>} {(DQ <FAILED>)}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<cc_statement>} {<HAVE_INT>} {(SQ <'int x = (int)0;'>)}) (C {<die>} {(DQ <FAILED>)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<cc_statement>} {<HAVE_FOO>} {(SQ <'foo x = (foo)0;'>)}) (C {<die>} {(DQ <'Expected to fail'>)}) ] ) ] ) ) (C {<main>} {(DQ ($ Id.VSub_At '$@'))}) ] )