diff options
Diffstat (limited to 'ship/build')
| -rwxr-xr-x | ship/build | 75 | 
1 files changed, 36 insertions, 39 deletions
| @@ -16,61 +16,58 @@ build() {  build_info_directive='#@info'  build_include_directive='#@include \([0-9A-Za-z]\+\)' +input_parser="\ +s:^ *\([0-9]\+\) "$build_info_directive"$:build_info \1: +s:^ *\([0-9]\+\) "$build_include_directive"$:build_include \1 \2: +t +s:^ *\([0-9]\+\) .*:echo \1p:" + +## usage: build_include LINENO LIBNAME +build_include() { cat<<EOF +$1a\\ +# begin $2 +$1r$(build_resolve $2) +$1a\\ +# end $2 +EOF +} + +## usage: build_info LINENO +build_info() { cat<<EOF +$1a\\ +# this file was generated by //ship/build\\ +#   date: $(date -u --rfc-3339=s)\\ +#   version: $(git rev-parse HEAD) +EOF +} +  ## usage: build_compile SRCFILE DSTFILE  build_compile() { -  cp "$1" "$2" +  srcfile="$(cat "$1")" -  while needs_compilation "$2"; do -    script="$(make_sedscript_maker_shellscript "$2" | sh)" -    sed -n "$script" "$2" >"$2.tmp" -    mv "$2.tmp" "$2" +  while needs_compilation "$srcfile"; do +    script="$(make_sedscript_maker_shellscript "$srcfile")" +    srcfile="$(echo "$srcfile" | sed -n "$script")"    done +  echo "$srcfile" > "$2"    chmod +x "$2"  } -## usage: needs_compilation SRCFILE +## usage: needs_compilation SHELLSCRIPT  # Returns true if SRCFILE contains compilation directives.  needs_compilation() { -  grep -q "^\\($build_include_directive\\|$build_info_directive\\)$" "$1" +  echo "$1" | +      grep -q "^\\($build_include_directive\\|$build_info_directive\\)$"  }  ## 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' - -  echo "_build_info='$( -    echo "# This file was generated by //ship/build\\" -    echo "#   Date: $(date -u --rfc-3339=s)\\" -    echo "#   Git-Commit: $(git show --pretty=oneline | awk '{print$1}')" -  )'" - -  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_info_directive"'$:\1a\\\\\ -$_build_info\ -      : - -    s:^\([0-9]\+\) '"$build_include_directive"'$:\1a\\\\\ -# BEGIN \2\ -      \1r\$_build_include_\2\ -      \1a\\\\\ -# END \2: - -    s:^\([0-9]\+\) .*:\1p: -   -    1s:^:echo ": -    $s:$:": -  ' +  sedscript_generator="$(echo "$1" | nl -b a -s ' ' | sed "$input_parser")" +  sedscript="$(eval "$sedscript_generator")" +  echo "$sedscript"  }  ## usage: build_deps SRCFILE | 
