From d8ebdf916c22e791fdecca5c3a21f35586da8a00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Fri, 17 Nov 2023 15:50:20 +0100
Subject: [PATCH] Build system: add target for creating TAGS file for Emacs

Indexes all C++, Fortran and C files (including submodules).
---
 .gitignore  |  1 +
 meson.build | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/.gitignore b/.gitignore
index a75bb34530..38fc753943 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,4 +31,5 @@
 build-doc
 
 # Emacs stuff
+TAGS
 scripts/dynare.elc
diff --git a/meson.build b/meson.build
index e9ce6d58f9..8b09500f0d 100644
--- a/meson.build
+++ b/meson.build
@@ -1825,3 +1825,23 @@ foreach t : mod_and_m_tests
   test(test_name, test_driver_exe, args : test_driver_args, suite : test_suite,
        should_fail : t.get('should_fail', false), timeout : 0)
 endforeach
+
+
+### Developper stuff
+
+## Tag file for Emacs (created in *source* directory)
+
+git_exe = find_program('git', required : false)
+etags_exe = find_program('etags', required : false)
+
+if git_exe.found() and etags_exe.found()
+  all_files = run_command(git_exe,
+                          [ '--git-dir=@0@/.git'.format(meson.project_source_root()),
+                            'ls-files', '--recurse-submodules',
+                            ':/*.cc', ':/*.hh', ':/*.[fF]08', ':/*.[ch]' ],
+                          check : true)
+  all_files = files(all_files.stdout().split())
+
+  custom_target('tags', output : 'tags', # Dummy output argument to make Meson happy
+                command : [etags_exe, '-o', '@0@/TAGS'.format(meson.project_source_root())] + all_files)
+endif
-- 
GitLab