summaryrefslogtreecommitdiffstats
path: root/source/l/speech-dispatcher/a2faab416e42cbdf3d73f98578a89eb7a235e25a.patch
blob: b4f7a840fba86c490459f392b382d281cafbbf3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
From a2faab416e42cbdf3d73f98578a89eb7a235e25a Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@gnome.org>
Date: Tue, 2 Feb 2021 14:50:23 -0600
Subject: [PATCH] Fix build after glib e38982df

glib.h now includes <type_traits> when building as C++. But kali.cpp
includes it (via module_utils.h) inside an extern "C" block. This is
illegal.

Best practice is to use extern "C" in project header files, not around
include statements. So let's do that. module_utils.h already includes
glib.h, so we can use G_BEGIN_DECLS/G_END_DECLS there. spd_audio.h does
not, so I decided to write out the usual boilerplate, as including all
of glib.h just for G_BEGIN_DECLS/G_END_DECLS seemed like overkill.
Finally, I'll move config.h at the very top of kali.cpp, since I'm
touching this code anyway and that is the usual place to put it.

This is the minimum viable change required for speech-dispatcher to
build with glib master. As long as speech-dispatcher is combining C and
C++, it would be advisible to use extern "C" in all headers that declare
C functions and might be included from C++.
---
 src/modules/kali.cpp       | 10 +++++-----
 src/modules/module_utils.h |  4 ++++
 src/modules/spd_audio.h    |  8 ++++++++
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/modules/kali.cpp b/src/modules/kali.cpp
index 193975d8..7b497626 100644
--- a/src/modules/kali.cpp
+++ b/src/modules/kali.cpp
@@ -21,21 +21,21 @@
  * $Id: kali.c,v 1.59 2008-06-09 10:38:02 hanke Exp $
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <kali/Kali/kali.h>
-extern "C" {
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+
 #include <semaphore.h>
 #include "spd_audio.h"
 
 #include <speechd_types.h>
 
 #include "module_utils.h"
-}
 #define MODULE_NAME     "kali"
 #define MODULE_VERSION  "0.0"
 #define DEBUG_MODULE 1
diff --git a/src/modules/module_utils.h b/src/modules/module_utils.h
index 6081e7e1..e82850b2 100644
--- a/src/modules/module_utils.h
+++ b/src/modules/module_utils.h
@@ -41,6 +41,8 @@
 #include <speechd_types.h>
 #include "spd_audio.h"
 
+G_BEGIN_DECLS
+
 typedef struct SPDMarks {
 	unsigned num;
 	unsigned allocated;
@@ -420,4 +422,6 @@ char *module_getvoice(char *language, SPDVoiceType voice);
 gboolean module_existsvoice(char *voicename);
 char *module_getdefaultvoice(void);
 
+G_END_DECLS
+
 #endif /* #ifndef __MODULE_UTILS_H */
diff --git a/src/modules/spd_audio.h b/src/modules/spd_audio.h
index 25045e2f..b9de3cd5 100644
--- a/src/modules/spd_audio.h
+++ b/src/modules/spd_audio.h
@@ -28,6 +28,10 @@
 
 #define SPD_AUDIO_LIB_PREFIX "spd_"
 
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
 AudioID *spd_audio_open(char *name, void **pars, char **error);
 
 int spd_audio_play(AudioID * id, AudioTrack track, AudioFormat format);
@@ -47,4 +51,8 @@ void spd_audio_set_loglevel(AudioID * id, int level);
 
 char const *spd_audio_get_playcmd(AudioID * id);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* ifndef #__SPD_AUDIO_H */