summaryrefslogtreecommitdiff
path: root/Completion/Unix
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix')
-rw-r--r--Completion/Unix/Command/_make137
1 files changed, 71 insertions, 66 deletions
diff --git a/Completion/Unix/Command/_make b/Completion/Unix/Command/_make
index ab22551ed..53e2e1b3e 100644
--- a/Completion/Unix/Command/_make
+++ b/Completion/Unix/Command/_make
@@ -3,10 +3,6 @@
# TODO: Based on targets given on the command line, show only variables that
# are used in those targets and their dependencies.
-local prev="$words[CURRENT-1]" file expl tmp is_gnu dir incl match
-local -A TARGETS VARIABLES
-local ret=1
-
_make-expandVars() {
local open close var val front ret tmp=$1
@@ -149,77 +145,86 @@ _make-findBasedir () {
print -- $basedir
}
-_pick_variant -r is_gnu gnu=GNU unix -v -f
-
-if [[ $is_gnu == gnu ]]
-then
- incl="(-|)include"
-else
- incl=.include
-fi
-
-if [[ "$prev" == -[CI] ]]
-then
- _files -W ${(q)$(_make-findBasedir ${words[1,CURRENT-1]})} -/ && ret=0
-elif [[ "$prev" == -[foW] ]]
-then
- _files -W ${(q)$(_make-findBasedir $words)} && ret=0
-else
- file="$words[(I)-f]"
- if (( file ))
+_make() {
+
+ local prev="$words[CURRENT-1]" file expl tmp is_gnu dir incl match
+ local -A TARGETS VARIABLES
+ local ret=1
+
+ _pick_variant -r is_gnu gnu=GNU unix -v -f
+
+ if [[ $is_gnu == gnu ]]
then
- file=${~words[file+1]}
- [[ $file == [^/]* ]] && file=${(q)$(_make-findBasedir $words)}/$file
- [[ -r $file ]] || file=
+ incl="(-|)include"
else
- local basedir
- basedir=${$(_make-findBasedir $words)}
- if [[ $is_gnu == gnu && -r $basedir/GNUmakefile ]]
- then
- file=$basedir/GNUmakefile
- elif [[ -r $basedir/makefile ]]
- then
- file=$basedir/makefile
- elif [[ -r $basedir/Makefile ]]
+ incl=.include
+ fi
+
+ if [[ "$prev" == -[CI] ]]
+ then
+ _files -W ${(q)$(_make-findBasedir ${words[1,CURRENT-1]})} -/ && ret=0
+ elif [[ "$prev" == -[foW] ]]
+ then
+ _files -W ${(q)$(_make-findBasedir $words)} && ret=0
+ else
+ file="$words[(I)-f]"
+ if (( file ))
then
- file=$basedir/Makefile
+ file=${~words[file+1]}
+ [[ $file == [^/]* ]] && file=${(q)$(_make-findBasedir $words)}/$file
+ [[ -r $file ]] || file=
else
- file=''
+ local basedir
+ basedir=${$(_make-findBasedir $words)}
+ if [[ $is_gnu == gnu && -r $basedir/GNUmakefile ]]
+ then
+ file=$basedir/GNUmakefile
+ elif [[ -r $basedir/makefile ]]
+ then
+ file=$basedir/makefile
+ elif [[ -r $basedir/Makefile ]]
+ then
+ file=$basedir/Makefile
+ else
+ file=''
+ fi
fi
- fi
- if [[ -n "$file" ]]
- then
- if [[ $is_gnu == gnu ]] && zstyle -t ":completion:${curcontext}:targets" call-command
+ if [[ -n "$file" ]]
+ then
+ if [[ $is_gnu == gnu ]] && zstyle -t ":completion:${curcontext}:targets" call-command
+ then
+ _make-parseMakefile $PWD < <(_call_program targets "$words[1]" -nsp --no-print-directory -f "$file" .PHONY 2> /dev/null)
+ else
+ case "$OSTYPE" in
+ freebsd*)
+ _make-parseMakefile $PWD < <(_call_program targets "$words[1]" -nsp -f "$file" .PHONY 2> /dev/null)
+ ;;
+ *)
+ _make-parseMakefile $PWD < $file
+ esac
+ fi
+ fi
+
+ if [[ $PREFIX == *'='* ]]
then
- _make-parseMakefile $PWD < <(_call_program targets "$words[1]" -nsp --no-print-directory -f "$file" .PHONY 2> /dev/null)
+ # Complete make variable as if shell variable
+ compstate[parameter]="${PREFIX%%\=*}"
+ compset -P 1 '*='
+ _value "$@" && ret=0
else
- case "$OSTYPE" in
- freebsd*)
- _make-parseMakefile $PWD < <(_call_program targets "$words[1]" -nsp -f "$file" .PHONY 2> /dev/null)
- ;;
- *)
- _make-parseMakefile $PWD < $file
- esac
+ _tags targets variables
+ while _tags
+ do
+ _requested targets expl 'make targets' \
+ compadd -- ${(k)TARGETS} && ret=0
+ _requested variables expl 'make variables' \
+ compadd -S '=' -- ${(k)VARIABLES} && ret=0
+ done
fi
fi
- if [[ $PREFIX == *'='* ]]
- then
- # Complete make variable as if shell variable
- compstate[parameter]="${PREFIX%%\=*}"
- compset -P 1 '*='
- _value "$@" && ret=0
- else
- _tags targets variables
- while _tags
- do
- _requested targets expl 'make targets' \
- compadd -- ${(k)TARGETS} && ret=0
- _requested variables expl 'make variables' \
- compadd -S '=' -- ${(k)VARIABLES} && ret=0
- done
- fi
-fi
+ return ret
+}
-return ret
+_make "$@"