#!/bin/sh # This is designed to compile a single package to a single binary # so it makes some assumptions about things to simplify config # to output a single binary (in a tarball) just use -o file # use --docker to output a tarball for input to docker build - set -e proc usage { echo "Usage: -o file" exit 1 } test $Argc = 0 && usage while [ $# -gt 0 ] { global flag := $1 matchstr $flag { -o { test $Argc -eq 1 && usage global out := $2 mkdir -p $[dirname $2] shift } -l* { global LIBS := ""$LIBS $1"" shift } * { echo "Unknown option $1" exit 1 } } shift } test -z $out && usage global package := $[basename $out] global dir := ""/src/$package"" mkdir -p $dir # untar input tar xf - -C $dir shell { cd $dir global CFILES := $[find . -name '*.c] cc -static -O2 -Wall -Werror -o ../../$out $CFILES $LIBS } tar cf - $out exit 0 (CommandList children: [ (C {(set)} {(-e)}) (FuncDef name: usage body: (BraceGroup children: [(C {(echo)} {(DQ ("Usage: -o file"))}) (C {(exit)} {(1)})] spids: [26] ) spids: [22 25] ) (AndOr children: [ (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(Lit_Other "=")} {(0)} {(Lit_Other "]")}) (C {(usage)}) ] op_id: Op_DAmp ) (While cond: [(C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(-gt)} {(0)} {(Lit_Other "]")})] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:flag) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [73] ) ] spids: [73] ) (Case to_match: {(DQ ($ VSub_Name "$flag"))} arms: [ (case_arm pat_list: [{(-o)}] action: [ (AndOr children: [ (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(-eq)} {(1)} {(Lit_Other "]")}) (C {(usage)}) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:out) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [107] ) ] spids: [107] ) (C {(mkdir)} {(-p)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Number "$2")})] ) left_token: spids: [118 122] ) ) } ) (C {(shift)}) ] spids: [88 89 129 -1] ) (case_arm pat_list: [{(-l) (Lit_Other "*")}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:LIBS) op: Equal rhs: {(DQ ($ VSub_Name "$LIBS") (" ") ($ VSub_Number "$1"))} spids: [137] ) ] spids: [137] ) (C {(shift)}) ] spids: [132 134 148 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (C {(echo)} {(DQ ("Unknown option ") ($ VSub_Number "$1"))}) (C {(exit)} {(1)}) ] spids: [151 152 -1 168] ) ] spids: [79 85 168] ) (C {(shift)}) ] spids: [70 173] ) ) (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$out"))} {(Lit_Other "]")}) (C {(usage)}) ] op_id: Op_DAmp ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:package) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(basename)} {(DQ ($ VSub_Name "$out"))})]) left_token: spids: [192 198] ) } spids: [191] ) ] spids: [191] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:dir) op: Equal rhs: {(DQ (/src/) ($ VSub_Name "$package"))} spids: [201] ) ] spids: [201] ) (C {(mkdir)} {(-p)} {($ VSub_Name "$dir")}) (C {(tar)} {(xf)} {(-)} {(-C)} {($ VSub_Name "$dir")}) (Subshell child: (CommandList children: [ (C {(cd)} {($ VSub_Name "$dir")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CFILES) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(find)} {(.)} {(-name)} {(SQ <"*.c">)})] ) left_token: spids: [238 248] ) } spids: [237] ) ] spids: [237] ) (C {(cc)} {(-static)} {(-O2)} {(-Wall)} {(-Werror)} {(-o)} {(../../) ($ VSub_Name "$out")} {($ VSub_Name "$CFILES")} {($ VSub_Name "$LIBS")} ) ] ) spids: [229 270] ) (C {(tar)} {(cf)} {(-)} {($ VSub_Name "$out")}) (C {(exit)} {(0)}) ] )