summaryrefslogtreecommitdiffstats
path: root/ship
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2013-11-13 00:48:05 +0100
committermakefu <github@syntax-fehler.de>2013-11-13 00:48:05 +0100
commit41f20813f3de8df1cc8074e5d18692388bd6f482 (patch)
tree1e5e276ce06046f2aba47647cf303251482435f3 /ship
parentf09880150c6a309ce15931a8e2d52ebf054a115a (diff)
parent0be9d62c78c27ea73691cb0a58779c319d5f9355 (diff)
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'ship')
-rwxr-xr-xship/build67
-rw-r--r--ship/lib/_punani_db40
-rw-r--r--ship/lib/punani45
3 files changed, 104 insertions, 48 deletions
diff --git a/ship/build b/ship/build
index 7755253d..bd26482d 100755
--- a/ship/build
+++ b/ship/build
@@ -20,14 +20,24 @@ build() {
esac
}
-## usage: #@include \([0-9A-Za-z]\+\) -> build_include \1 \2
-build_include() { cat<<EOF
+###
+### macros
+###
+
+## usage: #@include \([0-9A-Za-z_]\+\) -> build_include \1 \2
+build_include() {
+ if buildcache_has "#@include:$2"; then
+ printf '%da\\\n##include %s: already done\n' $1 $2
+ else
+ buildcache_add "#@include:$2"
+ cat<<EOF
$1a\\
# begin $2
$1r$(build_resolve $2)
$1a\\
# end $2
EOF
+ fi
}
## usage: #@info -> build_info \1
@@ -39,6 +49,10 @@ $1a\\
EOF
}
+###
+### main subroutines
+###
+
## usage: build_compile SRCFILE DSTFILE
build_compile() {
@@ -57,12 +71,16 @@ t;s:^ *\\([0-9]\\+\\) .*:echo \\1p:
SRCFILE="$1" setf src '$(cat "$%s")' SRCFILE
+ buildcache_initialize "$2"
+
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
done
+ buildcache_finalize
+
echo "$src" > "$2"
chmod +x "$2"
}
@@ -85,6 +103,10 @@ build_deps() {
done | sort | uniq
}
+###
+### misc utilities
+###
+
## usage: build_resolve LIBNAME
build_resolve() {
echo "$BUILD_PATH" | tr : \\n |
@@ -115,11 +137,48 @@ setf() {
eval "$1=$value_script"
- if test "${debug-false}" = true; then
+ if is_debug_mode; then
eval 'echo "$1=\"$value_script\""'
eval 'echo "'"\$$1"'"' | nl -b a
fi >&2
}
-## main
+## usage: is_debug_mode
+is_debug_mode() {
+ test "${debug-false}" = true
+}
+
+###
+### buildcache utilities
+###
+
+## usage: buildcache_initialize DESTFILE
+buildcache_initialize() {
+ buildcache="$1.buildcache"
+ cat /dev/null > "$buildcache"
+}
+
+## usage: buildcache_finalize
+buildcache_finalize() {
+ if is_debug_mode; then
+ rm "$buildcache"
+ fi
+}
+
+## usage: buildcache_has BRE
+# Check if buildcache contains a line matching BRE.
+buildcache_has() {
+ grep -q "^$1\$" "$buildcache"
+}
+
+## usage: buildcache_add LINE
+# Add LINE to buildcache.
+buildcache_add() {
+ echo "$1" >> "$buildcache"
+}
+
+###
+### main invocation
+###
+
build "$@"
diff --git a/ship/lib/_punani_db b/ship/lib/_punani_db
new file mode 100644
index 00000000..9812aff7
--- /dev/null
+++ b/ship/lib/_punani_db
@@ -0,0 +1,40 @@
+_punanidb_pacman_=
+_punanidb_yum_=
+_punanidb_aptget_=
+
+_punanidb_pacman_git=git
+_punanidb_yum_git=git
+_punanidb_aptget_git=git-core
+
+_punanidb_pacman_python2=python2
+_punanidb_yum_python2=python
+_punanidb_aptget_python2=python
+
+_punanidb_pacman_python3=python
+_punanidb_aptget_python3=python3
+
+_punanidb_pacman_hostname=inetutils
+_punanidb_aptget_hostname=hostname
+
+_punanidb_pacman_hostname=inetutils
+_punanidb_aptget_hostname=hostname
+
+_punanidb_pacman_make=make
+_punanidb_yum_make=make
+_punanidb_aptget_make=make
+
+_punanidb_pacman_tinc=tinc
+_punanidb_yum_tinc=tinc
+_punanidb_aptget_tinc=tinc
+
+_punanidb_pacman_tor=tor
+_punanidb_yum_tor=tor
+_punanidb_aptget_tor=tor
+
+_punanidb_pacman_nano=nano
+_punanidb_yum_nano=nano
+_punanidb_aptget_nano=nano
+
+_punanidb_pacman_vim=vim
+_punanidb_yum_vim=vim-enhanced
+_punanidb_aptget_vim=vim
diff --git a/ship/lib/punani b/ship/lib/punani
index c4f7f013..c07763a4 100644
--- a/ship/lib/punani
+++ b/ship/lib/punani
@@ -1,48 +1,5 @@
#@include core
-
-## begin punani DB
-_punanidb_pacman_=
-_punanidb_yum_=
-_punanidb_aptget_=
-
-_punanidb_pacman_git=git
-_punanidb_yum_git=git
-_punanidb_aptget_git=git-core
-
-_punanidb_pacman_python2=python2
-_punanidb_yum_python2=python
-_punanidb_aptget_python2=python
-
-_punanidb_pacman_python3=python
-_punanidb_aptget_python3=python3
-
-_punanidb_pacman_hostname=inetutils
-_punanidb_aptget_hostname=hostname
-
-_punanidb_pacman_hostname=inetutils
-_punanidb_aptget_hostname=hostname
-
-_punanidb_pacman_make=make
-_punanidb_yum_make=make
-_punanidb_aptget_make=make
-
-_punanidb_pacman_tinc=tinc
-_punanidb_yum_tinc=tinc
-_punanidb_aptget_tinc=tinc
-
-_punanidb_pacman_tor=tor
-_punanidb_yum_tor=tor
-_punanidb_aptget_tor=tor
-
-_punanidb_pacman_nano=nano
-_punanidb_yum_nano=nano
-_punanidb_aptget_nano=nano
-
-_punanidb_pacman_vim=vim
-_punanidb_yum_vim=vim-enhanced
-_punanidb_aptget_vim=vim
-
-## end punani DB
+#@include _punani_db
_punani_resolve_package(){
: ${PACKER?PACKER is not set,bailing out}