# Copyright (C) 2011 Rocky Bernstein # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place, Suite 330, Boston, # MA 02111 USA. if [[ -z $_Dbg_requires ]] { proc _Dbg_expand_filename { typeset -r filename="$1" # Break out basename and dirname typeset basename="$(filename##*/)" typeset -x dirname="$(filename%/*)" # No slash given in filename? Then use . for dirname [[ $dirname == $basename ]] && [[ $filename != '/' ]] && setglobal dirname = ''.'' # Dirname is ''? Then use / for dirname setglobal dirname = $(dirname:-/) # Handle tilde expansion in dirname setglobal dirname = $[echo $dirname] typeset long_path if setglobal long_path = $[ shell {cd $dirname ; pwd}] { if [[ "$long_path" == '/' ]] { echo "/$basename" } else { echo "$long_path/$basename" } return 0 } else { echo $filename return 1 } } typeset -A _Dbg_requires proc require { typeset file typeset expanded_file typeset source_dir typeset orig_dir setglobal orig_dir = $[pwd] setglobal source_dir = $(BASH_SOURCE[1]%/*) if [[ $source_dir != ${BASH_SOURCE[1]} ]] { builtin cd $source_dir } for file in [@Argv] { setglobal expanded_file = $[_Dbg_expand_filename $file] if [[ -z ${_Dbg_requires[$file]} \ && -z ${_Dbg_requires[$expanded_file]} ]] { source $expanded_file compat array-assign _Dbg_requires '$file' $expanded_file compat array-assign _Dbg_requires '$expanded_file' $expanded_file } } [[ -n $orig_dir ]] && builtin cd $orig_dir } }