zsh-workers
 help / color / mirror / code / Atom feed
From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: Guilherme Salazar <gmesalazar@gmail.com>
Cc: zsh-workers@zsh.org, Baptiste Daroussin <baptiste.daroussin@gmail.com>
Subject: Re: zsh make(1) completion on FreeBSD
Date: Wed, 12 Oct 2016 00:02:49 +0000	[thread overview]
Message-ID: <20161012000249.GA32367@fujitsu.shahaf.local2> (raw)
In-Reply-To: <CA+Hmt2h+jOFVcg1q9ujfTN0no1WJD2VyvuneRfZ+JJ1SW89cHQ@mail.gmail.com>

Guilherme Salazar wrote on Tue, Oct 11, 2016 at 20:27:14 -0300:
> Hi Daniel,
> 
> > I'd like to see this fixed but I'm not on FreeBSD right now.  Any chance
> > you could write a patch?  I think there are two approaches, either (a)
> > figure out what incantation of BSD make is equivalent to «gmake -nspf
> > $file», or (b) use the -d switch to ask make what are the targets,
> > variables, and other things that _make-parseMakefile extracts.
> 
> Baptiste (cc'ed) kindly sent me a patch he uses to get targets
> completion [1]. Using it and adding variable completion, I got to the
> following:
> 

Thanks, both of you.

> ````
> --- /usr/ports/shells/zsh/work/zsh-5.2/Completion/Unix/Command/_make
>  2015-08-08 14:51:33.000000000 -0300
> +++ /usr/local/share/zsh/5.2/functions/Completion/Unix/_make
> 2016-10-11 20:14:43.403084000 -0300
> @@ -268,7 +268,14 @@
>        else
>          case "$OSTYPE" in
>            freebsd*)
> -          _make-parseMakefile $PWD < <(_call_program targets
> "$words[1]" -nsp -f "$file" .PHONY 2> /dev/null)
> +          if [[ $words[1] == *'gmake'* ]]
> +          then
> +            args="-nsp"
> +          else
> +            args="-nsdg1Fstdout"
> +            TARGETS+=(${=${(f)"$(_call_program targets \"$words[1]\"
> -s -f "$file" -V.ALLTARGETS 2> /dev/null)"}})

The correct way to quote $words[1] would have been «${(q)words[1]}», but
elements of $words are already command-line quoted so they don't need to
be quoted again.  That is: just using $words[1] directly would be correct.
(modulo noglob, but don't worry about that)

Since the patch was broken by your mailer, I'm reincluding it here so
it's easier to review/apply.  (You can usually send patches as
attachments named *.txt to prevent munging and ensure a sane MIME type.)

workers@: I've added this to my list to review, but my list is quite full
nowadays, feel free to beat me to applying this.

Thanks again for the patch.

Cheers,

Daniel

(patch by Guilherme and bapt)
diff --git a/Completion/Unix/Command/_make b/Completion/Unix/Command/_make
index d10c8ee..de828bb 100644
--- a/Completion/Unix/Command/_make
+++ b/Completion/Unix/Command/_make
@@ -269,7 +269,14 @@ _make() {
       else
         case "$OSTYPE" in
           freebsd*)
-          _make-parseMakefile $PWD < <(_call_program targets "$words[1]" -nsp -f "$file" .PHONY 2> /dev/null)
+          if [[ $words[1] == *'gmake'* ]]
+          then
+            args="-nsp"
+          else
+            args="-nsdg1Fstdout"
+            TARGETS+=(${=${(f)"$(_call_program targets \"$words[1]\" -s -f "$file" -V.ALLTARGETS 2> /dev/null)"}})
+          fi
+          _make-parseMakefile $PWD < <(_call_program targets "$words[1]" $args -f "$file" .PHONY 2> /dev/null)
     ;;
     *)
           _make-parseMakefile $PWD < $file

> +          fi
> +          _make-parseMakefile $PWD < <(_call_program targets
> "$words[1]" $args -f "$file" .PHONY 2> /dev/null)
>      ;;
>      *)
>            _make-parseMakefile $PWD < $file
> ````
> 
> It works well for bmake without breaking gmake.
> 
> [1] https://people.freebsd.org/~bapt/_make.diff


  reply	other threads:[~2016-10-12  0:02 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-06  2:56 Guilherme Salazar
2016-10-11 21:21 ` Daniel Shahaf
2016-10-11 23:27   ` Guilherme Salazar
2016-10-12  0:02     ` Daniel Shahaf [this message]
2016-10-12  0:24       ` Guilherme Salazar
2016-10-12  0:36         ` Daniel Shahaf
2016-10-12  1:14           ` Guilherme Salazar
2016-10-12  3:27             ` Guilherme Salazar
2016-10-13 10:08               ` Oliver Kiddle
2016-10-14  6:10                 ` Daniel Shahaf
2016-10-16 16:34             ` Daniel Shahaf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161012000249.GA32367@fujitsu.shahaf.local2 \
    --to=d.s@daniel.shahaf.name \
    --cc=baptiste.daroussin@gmail.com \
    --cc=gmesalazar@gmail.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).