#compdef make gmake pmake dmake local prev="$words[CURRENT-1]" file expl tmp is_gnu cmdargs useperl zstyle -t ":completion:${curcontext}:" use-perl && useperl=1 _pick_variant -r is_gnu gnu=GNU unix -v -f if [[ "$prev" = -[CI] ]]; then _files -/ elif [[ "$prev" = -[foW] ]]; then _files else file="$words[(I)-f]" if (( file )); then file="$words[file+1]" elif [[ -e Makefile ]]; then file=Makefile elif [[ -e makefile ]]; then file=makefile elif [[ $is_gnu = gnu && -e GNUmakefile ]]; then file=GNUmakefile else file='' fi if [[ -n "$file" ]] && _tags targets; then if [[ $is_gnu = gnu ]] && zstyle -t ":completion:${curcontext}:targets" call-command; then if [[ -n $useperl ]]; then cmdargs=(perl -F: -ane '/^[a-zA-Z0-9][^\/\t=]+:/ && print "$F[0]\n"') else cmdargs=(awk '/^[a-zA-Z0-9][^\/\t=]+:/ {print $1}' FS=:) fi tmp=( $(_call_program targets "$words[1]" -nsp --no-print-directory -f "$file" .PHONY 2> /dev/null | $cmdargs) ) elif [[ -n $useperl ]]; then tmp=( $(perl -ne '@matches = /^(?:([a-zA-Z0-9]+[^\/\t=\s]+)\s*)+:/ and print join(" ", @matches); if (/^\.include\s+\/ || /^\.include\s+\".*mk\/bsd\.pkg\.(subdir\.)?mk\"/) { print "fetch fetch-list extract patch configure build install reinstall deinstall package describe checkpatch checksum makesum\n"; } ' $file) ) else tmp=( $(awk '/^[a-zA-Z0-9][^\/\t=]+:/ {print $1} /^\.include */ || /^\.include *".*mk\/bsd\.pkg\.(subdir\.)?mk"/ { print "fetch fetch-list extract patch configure build install reinstall deinstall package describe checkpatch checksum makesum" }' \ FS=: $file) ) fi _wanted targets expl 'make target' compadd -a tmp && return 0 fi compstate[parameter]="${PREFIX%%\=*}" compset -P 1 '*=' _value "$@" fi