git.fiddlerwoaroof.com
Raw Blame History
# -*- mode: sh; sh-shell: zsh;-*-
#zmodload zsh/zprof
PLUGIN_DIR="${PLUGIN_DIR:-$HOME/.zsh.d}"

local script_depends loaded_depends
typeset -A script_depends
typeset -A loaded_depends
get_depends() {
    awk -F: '$0=="###" || $1 != "#" { exit } $1="depends-on" {print $3}' "$1"
}

build_depends() {
    local -a depends
    depends=${(@f)$(get_depends "$1")}
    for depend in $depends; do
	script_depends[$1]+="$depend:"
    done
}

load_depends() {
    for depend in ${(s<:>)script_depends[$1]}; do
	if [[ -z $loaded_depends[$depend] ]]; then
	  local fn="$PLUGIN_DIR/dependencies/$depend.zsh"
	  if [[ -f $fn ]]; then
	    if [[ -z $script_depends[$fn] ]]; then
	      build_depends "$fn"
	    fi
	    load_depends "$fn"
	    source $fn
	  else
	      echo "$fn missing for $1"
	  fi
	  loaded_depends[$depend]=1
	else
	fi
    done
}

init_scripts=( $PLUGIN_DIR/*.{,z}sh(N) ) 

PATH="<<<:$PATH:>>>"
for x in $init_scripts; do
    build_depends "$x"
    load_depends "$x"
    source "$x"
done