1*4882a593SmuzhiyunFrom 45ef4455a60929932d1499cf718c1c9f59af9f26 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
3*4882a593SmuzhiyunDate: Tue, 26 May 2020 22:57:05 +0200
4*4882a593SmuzhiyunSubject: [PATCH] build: Always use EXTERN_UNLESS_MAIN_MODULE pattern
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunThis patch is loosely based on upstream commit
7*4882a593Smuzhiyun6aff8a132815a84bab69401c1e7de96ec549fbf2 ("build: Always use
8*4882a593SmuzhiyunEXTERN_UNLESS_MAIN_MODULE pattern."). However, this upstream commit
9*4882a593Smuzhiyunapplies to gnupg2, and the code base has changed quite significantly
10*4882a593Smuzhiyuncompared to gnupg 1.x, so upstream's patch cannot be applied
11*4882a593Smuzhiyunas-is. The goal of the patch is to make sure each variable is only
12*4882a593Smuzhiyundefined once, ass gcc 10 now default to -fno-common.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunEssentially, this patch mainly fixes the EXTERN_UNLESS_MAIN_MODULE
15*4882a593Smuzhiyundefine so that it really expands to "extern" when
16*4882a593SmuzhiyunINCLUDED_BY_MAIN_MODULE is not defined, even on non-RiscOS
17*4882a593Smuzhiyunsystems. Contrary to upstream's patch we however do not factorize the
18*4882a593Smuzhiyunmultiple EXTERN_UNLESS_MAIN_MODULE definitions into a single place as
19*4882a593Smuzhiyunit requires too many changes: instead we simply fix the few
20*4882a593Smuzhiyundefinitions of this macro.
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunOnce the macro is fixed, two places need to define
23*4882a593SmuzhiyunINCLUDED_BY_MAIN_MODULE: tools/bftest.c and tools/mpicalc.c so that
24*4882a593Smuzhiyunwhen they include the common headers, their variables are at least
25*4882a593Smuzhiyundefined once.
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunThe iobuf.{c,h} case is handled differently: iobuf.h gains an
28*4882a593Smuzhiyununconditional "extern", with the variable being added to iobuf.c. This
29*4882a593Smuzhiyunis identical to what upstream's
30*4882a593Smuzhiyun6aff8a132815a84bab69401c1e7de96ec549fbf2 is doing.
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunSigned-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
33*4882a593Smuzhiyun---
34*4882a593Smuzhiyun g10/options.h    | 3 +--
35*4882a593Smuzhiyun include/cipher.h | 2 +-
36*4882a593Smuzhiyun include/iobuf.h  | 9 +--------
37*4882a593Smuzhiyun include/memory.h | 2 +-
38*4882a593Smuzhiyun include/mpi.h    | 2 +-
39*4882a593Smuzhiyun tools/bftest.c   | 1 +
40*4882a593Smuzhiyun tools/mpicalc.c  | 1 +
41*4882a593Smuzhiyun util/iobuf.c     | 2 ++
42*4882a593Smuzhiyun 8 files changed, 9 insertions(+), 13 deletions(-)
43*4882a593Smuzhiyun
44*4882a593Smuzhiyundiff --git a/g10/options.h b/g10/options.h
45*4882a593Smuzhiyunindex 0ac6e7755..bae19e9e3 100644
46*4882a593Smuzhiyun--- a/g10/options.h
47*4882a593Smuzhiyun+++ b/g10/options.h
48*4882a593Smuzhiyun@@ -26,8 +26,7 @@
49*4882a593Smuzhiyun #include "packet.h"
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun #ifndef EXTERN_UNLESS_MAIN_MODULE
52*4882a593Smuzhiyun-/* Norcraft can't cope with common symbols */
53*4882a593Smuzhiyun-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
54*4882a593Smuzhiyun+#if !defined (INCLUDED_BY_MAIN_MODULE)
55*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE extern
56*4882a593Smuzhiyun #else
57*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE
58*4882a593Smuzhiyundiff --git a/include/cipher.h b/include/cipher.h
59*4882a593Smuzhiyunindex dd4af18cb..6ef6e6829 100644
60*4882a593Smuzhiyun--- a/include/cipher.h
61*4882a593Smuzhiyun+++ b/include/cipher.h
62*4882a593Smuzhiyun@@ -115,7 +115,7 @@ struct gcry_md_context {
63*4882a593Smuzhiyun typedef struct gcry_md_context *MD_HANDLE;
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun #ifndef EXTERN_UNLESS_MAIN_MODULE
66*4882a593Smuzhiyun-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
67*4882a593Smuzhiyun+#if !defined (INCLUDED_BY_MAIN_MODULE)
68*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE extern
69*4882a593Smuzhiyun #else
70*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE
71*4882a593Smuzhiyundiff --git a/include/iobuf.h b/include/iobuf.h
72*4882a593Smuzhiyunindex 030f8c8e9..b4d26b7e1 100644
73*4882a593Smuzhiyun--- a/include/iobuf.h
74*4882a593Smuzhiyun+++ b/include/iobuf.h
75*4882a593Smuzhiyun@@ -69,14 +69,7 @@ struct iobuf_struct {
76*4882a593Smuzhiyun     } unget;
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun-#ifndef EXTERN_UNLESS_MAIN_MODULE
80*4882a593Smuzhiyun-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
81*4882a593Smuzhiyun-#define EXTERN_UNLESS_MAIN_MODULE extern
82*4882a593Smuzhiyun-#else
83*4882a593Smuzhiyun-#define EXTERN_UNLESS_MAIN_MODULE
84*4882a593Smuzhiyun-#endif
85*4882a593Smuzhiyun-#endif
86*4882a593Smuzhiyun-EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode;
87*4882a593Smuzhiyun+extern int iobuf_debug_mode;
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun void  iobuf_enable_special_filenames ( int yes );
90*4882a593Smuzhiyun int   iobuf_is_pipe_filename (const char *fname);
91*4882a593Smuzhiyundiff --git a/include/memory.h b/include/memory.h
92*4882a593Smuzhiyunindex d414a9b2e..6698337e3 100644
93*4882a593Smuzhiyun--- a/include/memory.h
94*4882a593Smuzhiyun+++ b/include/memory.h
95*4882a593Smuzhiyun@@ -91,7 +91,7 @@ unsigned secmem_get_flags(void);
96*4882a593Smuzhiyun #define DBG_MEMSTAT   memory_stat_debug_mode
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun #ifndef EXTERN_UNLESS_MAIN_MODULE
99*4882a593Smuzhiyun-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
100*4882a593Smuzhiyun+#if !defined (INCLUDED_BY_MAIN_MODULE)
101*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE extern
102*4882a593Smuzhiyun #else
103*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE
104*4882a593Smuzhiyundiff --git a/include/mpi.h b/include/mpi.h
105*4882a593Smuzhiyunindex a4c16f5af..7a45ff805 100644
106*4882a593Smuzhiyun--- a/include/mpi.h
107*4882a593Smuzhiyun+++ b/include/mpi.h
108*4882a593Smuzhiyun@@ -36,7 +36,7 @@
109*4882a593Smuzhiyun #include "memory.h"
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun #ifndef EXTERN_UNLESS_MAIN_MODULE
112*4882a593Smuzhiyun-#if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE)
113*4882a593Smuzhiyun+#if !defined (INCLUDED_BY_MAIN_MODULE)
114*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE extern
115*4882a593Smuzhiyun #else
116*4882a593Smuzhiyun #define EXTERN_UNLESS_MAIN_MODULE
117*4882a593Smuzhiyundiff --git a/tools/bftest.c b/tools/bftest.c
118*4882a593Smuzhiyunindex 8a1572c2b..5afd7e125 100644
119*4882a593Smuzhiyun--- a/tools/bftest.c
120*4882a593Smuzhiyun+++ b/tools/bftest.c
121*4882a593Smuzhiyun@@ -26,6 +26,7 @@
122*4882a593Smuzhiyun #include <fcntl.h>
123*4882a593Smuzhiyun #endif
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun+#define INCLUDED_BY_MAIN_MODULE
126*4882a593Smuzhiyun #include "util.h"
127*4882a593Smuzhiyun #include "cipher.h"
128*4882a593Smuzhiyun #include "i18n.h"
129*4882a593Smuzhiyundiff --git a/tools/mpicalc.c b/tools/mpicalc.c
130*4882a593Smuzhiyunindex 46e5fc824..31acd82a4 100644
131*4882a593Smuzhiyun--- a/tools/mpicalc.c
132*4882a593Smuzhiyun+++ b/tools/mpicalc.c
133*4882a593Smuzhiyun@@ -31,6 +31,7 @@
134*4882a593Smuzhiyun #include <stdlib.h>
135*4882a593Smuzhiyun #include <ctype.h>
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun+#define INCLUDED_BY_MAIN_MODULE
138*4882a593Smuzhiyun #include "util.h"
139*4882a593Smuzhiyun #include "mpi.h"
140*4882a593Smuzhiyun #include "i18n.h"
141*4882a593Smuzhiyundiff --git a/util/iobuf.c b/util/iobuf.c
142*4882a593Smuzhiyunindex c8442929a..0d9ee4cec 100644
143*4882a593Smuzhiyun--- a/util/iobuf.c
144*4882a593Smuzhiyun+++ b/util/iobuf.c
145*4882a593Smuzhiyun@@ -113,6 +113,8 @@ typedef struct {
146*4882a593Smuzhiyun  static CLOSE_CACHE close_cache;
147*4882a593Smuzhiyun #endif
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun+int iobuf_debug_mode;
150*4882a593Smuzhiyun+
151*4882a593Smuzhiyun #ifdef _WIN32
152*4882a593Smuzhiyun typedef struct {
153*4882a593Smuzhiyun     int sock;
154*4882a593Smuzhiyun--
155*4882a593Smuzhiyun2.26.2
156*4882a593Smuzhiyun
157