Subject: Re: bug#22944: 24.4; Wishlist: Support for cmake in compilation-mode

From: Jö Fahlke <[email-masked]>
Date: Sun, 10 Apr 2016 17:33:11 +0200

Am Thu, 10. Mar 2016, 15:49:01 +0100 schrieb Óscar Fuentes:
> 
> [email-masked] (Jö Fahlke) writes:
> 
> > I wanted to get that out there.  If anyone wants to turn that into a
> > proper patch, feel free, otherwise I might find time to do that myself
> > later.
> 
> Please provide a proper patch and I will install it.

Hi!

Please find the patch attached.  It is in default "git format-patch"-format, I
hope that is OK.  git does not seem to support "diff -c" format (as per
"(emacs)Sending Patches").

There is one small issue: The regular expressions (after the patch) recognize
note lines of the form

"  cmake/modules/DuneGridMacros.cmake:19 (include)"

as well as

"  * cmake/modules/DuneGridMacros.cmake:19 (include)"

I was unable to reproduce examples of the second kind, so I did not put any
into etc/compilation.txt or the test, since I did not want to make them up.  I
took the regular expression from my ~/.emacs, so I'm pretty sure I came across
note lines of the second format at some point.

Regards,
Jö.

-- 
Jorrit (Jö) Fahlke, Institute for Computational und Applied Mathematics,
University of Münster, Orleans-Ring 10, D-48149 Münster
Tel: +49 251 83 35146 Fax: +49 251 83 32729

Of all the things I've lost, I miss my mind the most.
-- Ozzy Osbourne
From f86584c59f3ca463e439c5a9972b294744492967 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6=20Fahlke?= <[email-masked]>
Date: Thu, 24 Mar 2016 18:22:43 +0100
Subject: [PATCH] Add CMake support in compilation-mode (Bug#22944)

* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist): Add
regexps for matching CMake output.
* test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data): Add
CMake test cases.
* etc/compilation.txt (CMake): Add CMake examples.
---
 etc/NEWS                             |  5 +++++
 etc/compilation.txt                  | 26 ++++++++++++++++++++++++++
 lisp/progmodes/compile.el            |  7 +++++++
 test/lisp/progmodes/compile-tests.el |  7 +++++++
 4 files changed, 45 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index 6ec82f8..efdb1a9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -118,6 +118,11 @@ in these situations.
 
 * Changes in Specialized Modes and Packages in Emacs 25.2
 
+** Compilation mode
+
+---
+*** Messages from CMake are now recognized.
+
 ** eww
 
 +++
diff --git a/etc/compilation.txt b/etc/compilation.txt
index d26af20..4a15312 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -84,6 +84,32 @@ Warning: this expression should have type unit.
   File "/tmp/foo.py", line 10

+* CMake
+
+symbols: cmake cmake-info
+
+CMake Error at CMakeLists.txt:19 (hurz):
+  Unknown CMake command "hurz".
+CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):
+  Could not find a package configuration file provided by "UG" (requested
+  version 3.11.0) with any of the following names:
+
+    UGConfig.cmake
+    ug-config.cmake
+
+  Add the installation prefix of "UG" to CMAKE_PREFIX_PATH or set "UG_DIR" to
+  a directory containing one of the above files.  If "UG" provides a separate
+  development package or SDK, be sure it has been installed.
+Call Stack (most recent call first):
+  cmake/modules/DuneGridMacros.cmake:19 (include)
+  /home/joe/Projekte/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:556 (include)
+  /home/joe/Projekte/EXA-DUNE/patches/dune-common/cmake/modules/DuneMacros.cmake:694 (dune_process_dependency_macros)
+  CMakeLists.txt:22 (dune_project)
+
+
+-- Could NOT find UG (missing:  UG_DIR HAVE_UG)
+
+
 * Apollo cc, 4.3BSD fc & IBM RS6000/AIX xlc compiler & Microtec mcc68k & GNAT (July 94)
 
 symbol: comma
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 0b15a28..5bfd35e 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -161,6 +161,13 @@ compilation-error-regexp-alist-alist
 \\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:\\)?\\([ \n]Warning\\(?: [0-9]+\\)?:\\)?\\)"
      2 (3 . 4) (5 . 6) (7))
 
+    (cmake
+     "^CMake \\(?:Error\\|\\(Warning\\)\\) at \\(.*\\):\\([1-9][0-9]*\\) ([^)]+):$"
+     2 3 nil (1))
+    (cmake-info
+     "^  \\(?: \\*\\)?\\(.*\\):\\([1-9][0-9]*\\) ([^)]+)$"
+     1 2 nil 0)
+
     (comma
      "^\"\\([^,\" \n\t]+\\)\", line \\([0-9]+\\)\
 \\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))
diff --git a/test/lisp/progmodes/compile-tests.el b/test/lisp/progmodes/compile-tests.el
index 6821a6b..8961576 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -79,6 +79,13 @@ compile-tests--test-regexps-data
      1 nil 302 "\\lib\\python\\Products\\PythonScripts\\PythonScript.py")
     ("File \"/tmp/foo.py\", line 10"
      1 nil 10 "/tmp/foo.py")
+    ;; cmake cmake-info
+    ("CMake Error at CMakeLists.txt:23 (hurz):"
+     1 nil 23 "CMakeLists.txt")
+    ("CMake Warning at cmake/modules/UseUG.cmake:73 (find_package):"
+     1 nil 73 "cmake/modules/UseUG.cmake")
+    ("  cmake/modules/DuneGridMacros.cmake:19 (include)"
+     1 nil 19 "cmake/modules/DuneGridMacros.cmake")
     ;; comma
     ("\"foo.f\", line 3: Error: syntax error near end of statement"
      1 nil 3 "foo.f")
-- 
2.1.4