Source: Mike Kelly Upstream: no Reason: Use make -qp to parse the Makefile for us, so we get proper completion on things like pattern rules. --- bash_completion 2006-03-01 11:20:18.000000000 -0500 +++ bash_completion 2007-11-01 19:27:33.000000000 -0400 @@ -2795,17 +2795,6 @@ fi done - # make reads `GNUmakefile', then `makefile', then `Makefile' - if [ -f ${makef_dir}/GNUmakefile ]; then - makef=${makef_dir}/GNUmakefile - elif [ -f ${makef_dir}/makefile ]; then - makef=${makef_dir}/makefile - elif [ -f ${makef_dir}/Makefile ]; then - makef=${makef_dir}/Makefile - else - makef=${makef_dir}/*.mk # local convention - fi - # before we scan for targets, see if a Makefile name was # specified with -f for (( i=0; i < ${#COMP_WORDS[@]}; i++ )); do @@ -2816,18 +2805,14 @@ fi done - [ ! -f $makef ] && return 0 + [[ -n "$makef" ]] && makef="-f ${makef}" + [[ -n "$makef_dir" ]] && makef_dir="-C ${makef_dir}" - # deal with included Makefiles - makef_inc=$( grep -E '^-?include' $makef | sed -e "s,^.* ,"$makef_dir"/," ) + COMPREPLY=( $( make -qp $makef $makef_dir 2>/dev/null | \ + awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ \ + {split($1,A,/ /);for(i in A)print A[i]}' | \ + command grep "^$cur" )) - for file in $makef_inc; do - [ -f $file ] && makef="$makef $file" - done - - COMPREPLY=( $( awk -F':' '/^[a-zA-Z0-9][^$#\/\t=]*:([^=]|$)/ \ - {split($1,A,/ /);for(i in A)print A[i]}' \ - $makef 2>/dev/null | command grep "^$cur" )) fi } && complete -f -F _make $filenames make gmake gnumake pmake