summaryrefslogtreecommitdiffstats
path: root/ship
diff options
context:
space:
mode:
authorlassulus <lassulus@googlemail.com>2013-11-06 16:04:04 +0100
committerlassulus <lassulus@googlemail.com>2013-11-06 16:04:04 +0100
commit7cbc22526a141801b7386385a87bcbf48b5c5c88 (patch)
tree320401b62031d92fbf1e92dfbfeec69fd362edfe /ship
parente979fa57f3fe8115c2a78c9e8d4584806a3e954e (diff)
parent45709c38567ba57101967f050d9e686d2e3d8fea (diff)
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'ship')
-rwxr-xr-xship/build46
-rwxr-xr-xship/deploy11
2 files changed, 25 insertions, 32 deletions
diff --git a/ship/build b/ship/build
index 10fc4345..d0302d7e 100755
--- a/ship/build
+++ b/ship/build
@@ -6,13 +6,13 @@ set -euf
# [debug=true] build deps SRCFILE...
build() {
- # usage_pattern is used to extract build directive declarations.
- usage_pattern='## usage: \(.*\) -> \([^ ]\+\) \(.*\)'
-
- script='s/^'"$usage_pattern"'$/\2_directive='"'"'\1'"'"'/p' \
- setf build_x_directive_loader '$(sed -n "$script" "$%s")' 0
- eval "$build_x_directive_loader"
+ ## Load macro definitions.
+ defmacro_pattern='## usage: \(.*\) -> \([^ ]\+\) \(.*\)'
+ script='s/^'"$defmacro_pattern"'$/macro_\2='"'"'\1'"'"'/p' \
+ setf defmacros '$(sed -n "$script" "$%s")' 0
+ eval "$defmacros"
+ ## Dispatch.
case "$1" in
compile) build_compile "$2" "$3";;
deps) shift; build_deps "$@";;
@@ -42,22 +42,22 @@ EOF
## usage: build_compile SRCFILE DSTFILE
build_compile() {
- script='s/^'"$usage_pattern"'$/\2_directive/p' \
- setf build_directives '$(sed -n "$script" "$%s")' 0
+ script='s/^'"$defmacro_pattern"'$/macro_\2/p' \
+ setf macro_names '$(sed -n "$script" "$%s")' 0
+
+ setf unexpanded_macros_pattern \
+ '$(make_unexpanded_macros_pattern $%s)' macro_names
script='
- s/^'"$usage_pattern"'$/s:^ *\\([0-9]\\+\\) \1$:\2 \3:/p
+ s/^'"$defmacro_pattern"'$/s:^ *\\([0-9]\\+\\) \1$:\2 \3:/p
$a\
- t\
- s:^ *\\([0-9]\\+\\) .*:echo \\1p:
+t;s:^ *\\([0-9]\\+\\) .*:echo \\1p:
' \
setf input_parser '$(sed -n "$script" "$%s")' 0
- setf incomplete_pattern '$(make_incomplete_pattern $%s)' build_directives
-
SRCFILE="$1" setf src '$(cat "$%s")' SRCFILE
- while needs_compilation "$src" "$incomplete_pattern"; do
+ while echo "$src" | grep -q "$unexpanded_macros_pattern"; do
setf sedgen '$(echo "$%s" | nl -b a -s \ | sed "$%s")' src input_parser
setf sedscript '$(eval "$%s")' sedgen
setf src '$(echo "$%s" | sed -n "$%s")' src sedscript
@@ -67,19 +67,13 @@ build_compile() {
chmod +x "$2"
}
-## usage: needs_compilation SHELLSCRIPT PATTERN
-# Returns true if SRCFILE contains compilation directives.
-needs_compilation() {
- echo "$1" | grep -q "$2"
-}
-
## usage: build_deps SRCFILE...
-# Print all the dependencies of SRCFILE... (in alphabetic order) to stdout.
+# Print all the dependencies of SRCFILE... to stdout. (alphabetic order)
build_deps() {
while test $# -gt 0; do
deps="$(
for f; do
- for d in $(sed -n 's:^'"$build_include_directive"'$:\1:p' "$f"); do
+ for d in $(sed -n 's:^'"$macro_include"'$:\1:p' "$f"); do
build_resolve $d
done
done
@@ -104,11 +98,11 @@ build_resolve() {
}
}
-## usage: make_incomplete_pattern BUILD_DIRECTIVES...
-make_incomplete_pattern() {
+## usage: make_unexpanded_macros_pattern BUILD_DIRECTIVES...
+make_unexpanded_macros_pattern() {
echo "^\\($(
- for directive; do
- eval echo \"\$$directive\"
+ for macro; do
+ eval echo \"\$$macro\"
done |
tr \\n \| |
sed 's/|/\\|/'
diff --git a/ship/deploy b/ship/deploy
index 0f3e5219..411f8eec 100755
--- a/ship/deploy
+++ b/ship/deploy
@@ -1,10 +1,9 @@
#!/bin/sh
-set -x
+set -xeuf
cd $(dirname $0)
-bindir=$PWD/bin/
-libdir=$PWD/lib/
-outdir=$PWD/out/
+bindir=$PWD/bin
+libdir=$PWD/lib
+outdir=$PWD/out
for file in `ls -1 $bindir`;do
- BUILD_PATH=$libdir ./build compile bin/$file out/$file
- chmod 755 $outdir/$file
+ BUILD_PATH=$libdir ./build compile $bindir/$file $outdir/$file
done