Subject: Re: [bug#32614] [PATCH] emacs-irony-mode

From: Tim Gesthuizen <[email-masked]>
Date: Tue, 4 Sep 2018 20:31:51 +0200

On 03.09.2018 23:36, Ludovic Courtès wrote:
> Hello Tim,
> 
> Tim Gesthuizen <[email-masked]> skribis:
> 
>> The attached patch adds emacs-irony-mode.
>> It is also packaged in MELPA so it is definitely free software.
>> If there are problems with the description or synopsis just let me know
>> and I will change the patch accordingly.
> 
> Thanks for the patch!  I have some suggestions and comments below, but
> overall it LGTM:
> 
>> From 6975ba9e4b005c77f00d7f2187b5d8047f15ba07 Mon Sep 17 00:00:00 2001
>> From: Tim Gesthuizen <[email-masked]>
>> Date: Thu, 30 Aug 2018 17:39:57 +0200
>> Subject: [PATCH] gnu: Add emacs-irony-mode
>>
>> ---
>>  gnu/packages/emacs.scm | 49 ++++++++++++++++++++++++++++++++++++------
> 
> Please run ‘git log gnu/packages/emacs.scm’ to see our conventions for
> commit logs, or see
> <https://www.gnu.org/prep/standards/html_node/Change-Logs.html>.  (We can
> always fix it up for you though, it’s no big deal.)
> 
>> +    (home-page "https://github.com/Sarcasm/irony-mode")
>> +    (synopsis "Clang autocompletion and syntax checking integration for GNU Emacs")
> 
> It’s a bit long.  Perhaps: “Code completion and syntax checks for Emacs”?
> 
>> +    (description "Provides clang assisted syntax checking and autocompletion
>> + for C,C++ and ObjC.")
> 
> Please make a full sentence, as per
> <https://www.gnu.org/software/guix/manual/en/html_node/Synopses-and-Descriptions.html>.
> 
>> +    (license license:gpl3)))
> 
> Isn’t it ‘gpl3+’, meaning “version 3 or any later version, at your
> option”?
> 
>> +(define-public emacs-irony-mode-server
>> +  (package (inherit emacs-irony-mode)
>> +    (name "emacs-irony-mode-server")
>> +    (propagated-inputs
>> +     `(("clang" ,clang)))
> 
> Instead of propagating Clang, which clutters the user’s profile, do you
> think we could patch the .el files such that they refer to ‘clang’ by
> its absolute file name?  See ‘emacs-emms’ for an example of that.
> 
>> +    (arguments
>> +     `(#:phases
>> +       (modify-phases %standard-phases
>> +         (replace 'configure
>> +           (lambda* (#:key outputs #:allow-other-keys)
>> +             (let ((out (assoc-ref outputs "out")))
>> +               (invoke "cmake"
>> +                       "server"
>> +                       (string-append "-DCMAKE_INSTALL_PREFIX=" out))))))))
> 
> Please return #t at the end of the phase.
> 
>>      (source (origin
>> -	      (method url-fetch)
>> -	      (uri (string-append "https://github.com/smihica/emmet-mode"
>> -				  "/archive/" version ".tar.gz"))
>> +              (method url-fetch)
>> +              (uri (string-append "https://github.com/smihica/emmet-mode"
>> +                                  "/archive/" version ".tar.gz"))
>>                (file-name (string-append name "-" version ".tar.gz"))
>> -	      (sha256
>> -	       (base32
>> -		"0g3p22yabfcp98cfv9dgl9il2m2pd53isq2q11vb3s7qyn31f7zj"))))
>> +              (sha256
>> +               (base32
>> +                "0g3p22yabfcp98cfv9dgl9il2m2pd53isq2q11vb3s7qyn31f7zj"))))
> 
> This change is unnecessary and unrelated; could you remove it?
> 
> Could you send an updated patch?
> 
> Thank you!
> 
> Ludo’.
> 

Thank you for your suggestions.
Changed patch accordingly.
clang is used via libclang from emacs-irony-mode-server which is linked
dynamically. Because of this I could just set the propagated-input to a
normal input. It is linked automatically to the version in /gnu/store.
Because of some weird  problems I had today with building guix from git
I could not verify the patch.
Please check that it is working before pushing it.
From 25fdd949db264836f47abcad13f3e8594262b300 Mon Sep 17 00:00:00 2001
From: Tim Gesthuizen <[email-masked]>
Date: Thu, 30 Aug 2018 17:39:57 +0200
Subject: [PATCH] gnu: Add emacs-irony-mode.

* gnu/packages/emacs.scm (emacs-irony-mode): New variable.
* gnu/packages/emacs.scm (emacs-irony-mode-server): New variable.
---
 gnu/packages/emacs.scm | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 8f0c564f8..3404937dc 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -63,6 +63,7 @@
   #:use-module (guix monads)
   #:use-module (guix store)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system emacs)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system trivial)
@@ -84,6 +85,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages lesstif)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages version-control)
@@ -2724,6 +2726,45 @@ front-ends.  Company comes with many back-ends, e.g. @code{company-elisp}.
 These are distributed in separate files and can be used individually.")
     (license license:gpl3+)))
 
+(define-public emacs-irony-mode
+  (package
+    (name "emacs-irony-mode")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/Sarcasm/irony-mode/archive/v"
+                                  version ".tar.gz"))
+              (sha256 (base32 "1f68zi0glkg2aly66s07rx3w0b0hdi1znxan02h6dbabaadylk99"))))
+    (build-system emacs-build-system)
+    (arguments '())
+    (propagated-inputs
+     `(("emacs-irony-mode-server" ,emacs-irony-mode-server)))
+    (home-page "https://github.com/Sarcasm/irony-mode")
+    (synopsis "C/C++/ObjC Code completion and syntax checks for Emacs")
+    (description "Provides @code{clang} assisted syntax checking and
+autocompletion for C,C++ and ObjC in GNU Emacs.  Using @code{libclang} it can
+provide syntax checking and autocompletion on compiler level which is very
+resistent against false positives.  It also integrates well with other
+packages like @code{eldoc-mode} and especially @code{company-mode} as
+described on the homepage.")
+    (license license:gpl3+)))
+
+(define-public emacs-irony-mode-server
+  (package (inherit emacs-irony-mode)
+    (name "emacs-irony-mode-server")
+    (inputs
+     `(("clang" ,clang)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (invoke "cmake"
+                       "server"
+                       (string-append "-DCMAKE_INSTALL_PREFIX=" out)) #t))))))
+    (build-system cmake-build-system)))
+
 (define-public emacs-company-quickhelp
   (package
     (name "emacs-company-quickhelp")
-- 
2.18.0