diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rwxr-xr-x | ship/bin/punani | 3 | ||||
| -rwxr-xr-x | ship/build | 81 | ||||
| -rwxr-xr-x | ship/deploy | 6 | ||||
| -rw-r--r-- | ship/lib/punani | 2 | 
5 files changed, 85 insertions, 8 deletions
@@ -28,3 +28,4 @@ a.out  /ovh/soapi/SOAPpy  /Reaktor/IRC/irclib.py  /Reaktor/public_commands/* +/ship/out diff --git a/ship/bin/punani b/ship/bin/punani index 1e3fab87..99a5a813 100755 --- a/ship/bin/punani +++ b/ship/bin/punani @@ -1,4 +1,3 @@  #!/bin/sh -# include core -# include punani +#@include punani  punani "$@" diff --git a/ship/build b/ship/build new file mode 100755 index 00000000..6c26e6f3 --- /dev/null +++ b/ship/build @@ -0,0 +1,81 @@ +#! /bin/sh +set -euf + +## SYNOPSIS +# build compile SRCFILE DSTFILE +# build deps SRCFILE +build() { +  case "$1" in +    compile) build_compile "$2" "$3";; +    deps) build_deps "$2";; +    *) echo "build: $1: bad command" >&2; return 23;; +  esac +} + +## build directives +build_include_directive='#@include \([0-9A-Za-z]\+\)' + +## usage: build_compile SRCFILE DSTFILE +build_compile() { +  cp "$1" "$2" + +  while needs_compilation "$2"; do +    script="$(make_sedscript_maker_shellscript "$2" | sh)" +    sed -n "$script" "$2" >"$2.tmp" +    mv "$2.tmp" "$2" +  done + +  chmod +x "$2" +} + +## usage: needs_compilation SRCFILE +# Returns true if SRCFILE contains compilation directives. +needs_compilation() { +  grep -q "^$build_include_directive$" "$1" +} + +## usage: make_sedscript_maker_shellscript SRCFILE +# Print a shellscript that creates a sedscript that resolves all the build +# directives in SRCFILE. +make_sedscript_maker_shellscript() { +  echo 'set -euf' +  deps="$(build_deps "$1")" +  for lib in $deps; do +    echo "_build_include_$(basename $lib)=$lib" +  done +  nl -b a -s ' ' "$1" | +  sed ' +    s:^ *:: +    s:^\([0-9]\+\) '"$build_include_directive"'$:\1a\\\\\ +# BEGIN \2\ +      \1r\$_build_include_\2\ +      \1a\\\\\ +# END \2: +    s:^\([0-9]\+\) .*:\1p: +   +    1s:^:echo ": +    $s:$:": +  ' +} + +## usage: build_deps SRCFILE +build_deps() { +  for libname in $(sed -n 's:^'"$build_include_directive"'$:\1:p' "$1"); do +    build_resolve "$libname" +  done +} + +## usage: build_resolve LIBNAME +build_resolve() { +  echo "$BUILD_PATH" | tr : \\n | +    xargs -I: printf '%s/%s\n' : "$1" | +    xargs -I: ls -d : 2>/dev/null | +    head -n 1 | +    grep . || +  { +    echo "build resolve: $1: library not found" >&2 +    return 23 +  } +} + +build "$@" diff --git a/ship/deploy b/ship/deploy index 5c282398..0f3e5219 100755 --- a/ship/deploy +++ b/ship/deploy @@ -4,11 +4,7 @@ cd $(dirname $0)  bindir=$PWD/bin/  libdir=$PWD/lib/  outdir=$PWD/out/ -# Hill-Billy style package builder  for file in `ls -1 $bindir`;do -  # cat every lib and the file itself afterwards into outfile -  find $libdir -type f -exec cat '{}' \; > $outdir/$file -  cat $bindir/$file >> $outdir/$file +  BUILD_PATH=$libdir ./build compile bin/$file out/$file    chmod 755 $outdir/$file  done - diff --git a/ship/lib/punani b/ship/lib/punani index beaee27c..e4a5a5e9 100644 --- a/ship/lib/punani +++ b/ship/lib/punani @@ -1,5 +1,5 @@  #!/bin/sh -#include core +#@include core  ## begin punani DB  _punanidb_pacman_=  | 
