mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-02 10:01:11 +02:00
44896: use opt_args to find base directory and use it for $(CURDIR)
This commit is contained in:
parent
87db974a84
commit
5df672b9d7
2 changed files with 13 additions and 33 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-11-24 Oliver Kiddle <okiddle@yahoo.co.uk>
|
||||
|
||||
* 44896: Completion/Unix/Command/_make: use opt_args to find
|
||||
base directory and use it for $(CURDIR)
|
||||
|
||||
2019-11-19 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||
|
||||
* users/24451: Src/compat.c: zgetcwd: Add a guard against
|
||||
|
|
|
@ -118,35 +118,9 @@ _make-parseMakefile () {
|
|||
done
|
||||
}
|
||||
|
||||
_make-findBasedir () {
|
||||
local file index basedir
|
||||
basedir=$PWD
|
||||
for (( index=0; index < $#@; index++ ))
|
||||
do
|
||||
if [[ $@[index] == -C ]]
|
||||
then
|
||||
file=${~@[index+1]} 2>/dev/null
|
||||
if [[ -z $file ]]
|
||||
then
|
||||
# make returns with an error if an empty arg is given
|
||||
# even if the concatenated path is a valid directory
|
||||
return
|
||||
elif [[ $file == /* ]]
|
||||
then
|
||||
# Absolute path, replace base directory
|
||||
basedir=$file
|
||||
else
|
||||
# Relative, concatenate path
|
||||
basedir=$basedir/$file
|
||||
fi
|
||||
fi
|
||||
done
|
||||
print -- $basedir
|
||||
}
|
||||
|
||||
_make() {
|
||||
|
||||
local prev="$words[CURRENT-1]" file expl tmp is_gnu incl match
|
||||
local prev="$words[CURRENT-1]" file expl tmp is_gnu incl match basedir
|
||||
local context state state_descr line
|
||||
local -a option_specs
|
||||
local -A VARIABLES VAR_ARGS opt_args
|
||||
|
@ -214,15 +188,18 @@ _make() {
|
|||
_arguments -s $option_specs \
|
||||
'*:make target:->target' && ret=0
|
||||
|
||||
basedir=${(Q)~opt_args[-C]:-${opt_args[--directory]}}
|
||||
VAR_ARGS[CURDIR]="${basedir:=$PWD}"
|
||||
|
||||
case $state in
|
||||
(dir)
|
||||
_description directories expl "$state_descr"
|
||||
_files "$expl[@]" -W ${(q)$(_make-findBasedir ${words[1,CURRENT-1]})} -/ && ret=0
|
||||
_files "$expl[@]" -W $basedir -/ && ret=0
|
||||
;;
|
||||
|
||||
(file)
|
||||
_description files expl "$state_descr"
|
||||
_files "$expl[@]" -W ${(q)$(_make-findBasedir $words)} && ret=0
|
||||
_files "$expl[@]" -W $basedir && ret=0
|
||||
;;
|
||||
|
||||
(debug)
|
||||
|
@ -239,11 +216,9 @@ _make() {
|
|||
file=${(v)opt_args[(I)(-f|--file|--makefile)]}
|
||||
if [[ -n $file ]]
|
||||
then
|
||||
[[ $file == [^/]* ]] && file=${(q)$(_make-findBasedir $words)}/$file
|
||||
[[ $file == [^/]* ]] && file=$basedir/$file
|
||||
[[ -r $file ]] || file=
|
||||
else
|
||||
local basedir
|
||||
basedir=${$(_make-findBasedir $words)}
|
||||
if [[ $is_gnu == gnu && -r $basedir/GNUmakefile ]]
|
||||
then
|
||||
file=$basedir/GNUmakefile
|
||||
|
@ -287,7 +262,7 @@ _make() {
|
|||
_alternative \
|
||||
'targets:make target:compadd -Q -a TARGETS' \
|
||||
'variables:make variable:compadd -S = -F keys -k VARIABLES' \
|
||||
'*:file:_files' && ret=0
|
||||
'*:file:_files -W $basedir' && ret=0
|
||||
fi
|
||||
esac
|
||||
|
||||
|
|
Loading…
Reference in a new issue