=== modified file 'bin/fsb' --- bin/fsb 2013-05-21 21:47:48 +0000 +++ bin/fsb 2013-05-20 09:14:50 +0000 @@ -97,7 +97,7 @@ fi die() { -(($#)) && fsb_error "$@" + (($#)) && fsb_error "$@" exit 1 } @@ -127,10 +127,10 @@ # build functions typeset -g build_dir build_dir_base -typeset -ga build_stack -target_info() { +build_target_new() { local -a info_vars + local -A info info_vars=( FSB_INFO_BASE # base build directory name passed up to calling stage FSB_INFO_DIR # directory for building this stage @@ -139,71 +139,22 @@ FSB_INFO_DEPEND # build this stage first and then clone it's directory ) typeset -g $info_vars - $1 info || die "$1 info failed" - if (($FSB_INFO_SKIP)); then - target_info $FSB_INFO_DEPEND - return - fi - - local param stack_pos info_name=TARGET_INFO_${1#fsb_target_} - local -A info + local param for param in $info_vars; do info[${param#FSB_INFO_}=${(P)param} done - info[FUNC]=$1 - build_stack+=$info_name - stack_pos=$#build_stack - - if [[ $info[BASE] == *'%s'* || $info[DIR] == *'%s'* ]]; then - target_info $info[DEPEND] - build_dir_base=${${info[BASE]}/%s/${build_dir_base}} - info[DIR]=${${info[DIR]}/%s/${build_dir_base}} + if [[ $FSB_INFO_BASE == *'%s'* ]]; then else - build_dir_base=${info[BASE]} - build_dir_check ${info[DIR]} $1 - local ret=$? - if (( $ret == 100 )) ; then - target_info $info[DEPEND] - elif (( $ret )) ; then - die "build_dir_check failed" + if [[ $FSB_INFO_DIR == *'%s'* ]]; then + FSB_INFO_DIR=${FSB_INFO_DIR/%s/${FSB_INFO_BASE}} + build_dir_check $FSB_INFO_DIR $1 && return 0 + [[ $? -eq 100 ]] || die "build_dir_check failed" fi - build_dir_base=${info[BASE]} - fi - local k v - typeset -gA ${info_name} - for k v in ${(kv)info}; do - ${info_name}[${k}]=$v - done -} - -target_stack_build() { - local -A info - local k v - for k v in ${(kvP)build_stack[${1:-1}]}; do - info[$k]=$v - done - - build_dir=$info[DIR] - build_dir_check $info[DIR] $info[FUNC] && return 0 - [[ $? -eq 100 ]] || die "build_dir_check failed" - - if [[ -n $info[DEPEND] ]]; then - target_stack_build $(( ${1:-1} + 1 )) - fsb_stage_clone $build_dir $info[DIR] - else - fsb_stage_init $info[DIR] - fi - build_dir=$info[DIR] - $info[FUNC] build || die "$info[FUNC] build failed" -} - -build_target() { - (($+fsb_targets[${1}])) || die "no such target: $1" - target_info $1 - target_stack_build -} -# typeset -ga build_dir_stack + fi +} + +typeset -ga build_dir_stack typeset -g build_dir build_dir_done build_dir_check() { @@ -221,25 +172,25 @@ return 100 } -# build_dir_push() { -# [[ -n $build_dir ]] && build_dir_stack+=$build_dir -# build_dir=$1 -# [[ -d $1:h ]] || mkdir -p $1:h || die "could not mkdir $1:h for stage $1:t" -# # [[ -d $1 ]] || fsb_stage_init $1 || die "failed to create stage directory: $1" -# } +build_dir_push() { + [[ -n $build_dir ]] && build_dir_stack+=$build_dir + build_dir=$1 + [[ -d $1:h ]] || mkdir -p $1:h || die "could not mkdir $1:h for stage $1:t" + # [[ -d $1 ]] || fsb_stage_init $1 || die "failed to create stage directory: $1" +} -# build_target() { -# (($+fsb_targets[${1}])) || die "no such target: $1" -# $fsb_targets[${1}] || die "build of target $1 failed" -# [[ -d $build_dir ]] || die "'$build_dir' is not valid stage directory, target $1 failed" -# grep -qFe $1 $build_dir/.fsb_done || print -r - $1 >> $build_dir/.fsb_done -# if (( $#build_dir_stack )); then -# fsb_stage_clone $build_dir $build_dir_stack[-1] -# # pop from stack -# build_dir=$build_dir_stack[-1] -# build_dir_stack=( $build_dir_stack[1,-2] ) -# fi -# } +build_target() { + (($+fsb_targets[${1}])) || die "no such target: $1" + $fsb_targets[${1}] || die "build of target $1 failed" + [[ -d $build_dir ]] || die "'$build_dir' is not valid stage directory, target $1 failed" + grep -qFe $1 $build_dir/.fsb_done || print -r - $1 >> $build_dir/.fsb_done + if (( $#build_dir_stack )); then + fsb_stage_clone $build_dir $build_dir_stack[-1] + # pop from stack + build_dir=$build_dir_stack[-1] + build_dir_stack=( $build_dir_stack[1,-2] ) + fi +} # run! load_functions