summaryrefslogtreecommitdiffstats
path: root/build-aux
diff options
context:
space:
mode:
authorRincewindsHat <12514511+RincewindsHat@users.noreply.github.com>2023-01-31 13:46:01 (GMT)
committerRincewindsHat <12514511+RincewindsHat@users.noreply.github.com>2023-01-31 13:46:01 (GMT)
commite8bd88d1fcded01ccd066572eeaae1b507989cb3 (patch)
treec8e7be6c07c6f635f6e803e6a6ba9e7a95fee7c0 /build-aux
parent2ad962c13473607ca0d974bfaa516a0ed53ec73d (diff)
downloadmonitoring-plugins-e8bd88d1fcded01ccd066572eeaae1b507989cb3.tar.gz
Sync with the latest Gnulib code 668c0b8ffa
Diffstat (limited to 'build-aux')
-rwxr-xr-xbuild-aux/config.rpath22
-rw-r--r--build-aux/snippet/_Noreturn.h10
-rw-r--r--build-aux/snippet/arg-nonnull.h26
-rw-r--r--build-aux/snippet/c++defs.h271
-rw-r--r--build-aux/snippet/warn-on-use.h109
5 files changed, 8 insertions, 430 deletions
diff --git a/build-aux/config.rpath b/build-aux/config.rpath
index c38b914..1e2595f 100755
--- a/build-aux/config.rpath
+++ b/build-aux/config.rpath
@@ -2,7 +2,7 @@
2# Output a system dependent set of variables, describing how to set the 2# Output a system dependent set of variables, describing how to set the
3# run time search path of shared libraries in an executable. 3# run time search path of shared libraries in an executable.
4# 4#
5# Copyright 1996-2013 Free Software Foundation, Inc. 5# Copyright 1996-2023 Free Software Foundation, Inc.
6# Taken from GNU libtool, 2001 6# Taken from GNU libtool, 2001
7# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 7# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8# 8#
@@ -367,15 +367,11 @@ else
367 dgux*) 367 dgux*)
368 hardcode_libdir_flag_spec='-L$libdir' 368 hardcode_libdir_flag_spec='-L$libdir'
369 ;; 369 ;;
370 freebsd2.2*) 370 freebsd2.[01]*)
371 hardcode_libdir_flag_spec='-R$libdir'
372 hardcode_direct=yes
373 ;;
374 freebsd2*)
375 hardcode_direct=yes 371 hardcode_direct=yes
376 hardcode_minus_L=yes 372 hardcode_minus_L=yes
377 ;; 373 ;;
378 freebsd* | dragonfly*) 374 freebsd* | dragonfly* | midnightbsd*)
379 hardcode_libdir_flag_spec='-R$libdir' 375 hardcode_libdir_flag_spec='-R$libdir'
380 hardcode_direct=yes 376 hardcode_direct=yes
381 ;; 377 ;;
@@ -548,13 +544,11 @@ case "$host_os" in
548 dgux*) 544 dgux*)
549 library_names_spec='$libname$shrext' 545 library_names_spec='$libname$shrext'
550 ;; 546 ;;
551 freebsd* | dragonfly*) 547 freebsd[23].*)
552 case "$host_os" in 548 library_names_spec='$libname$shrext$versuffix'
553 freebsd[123]*) 549 ;;
554 library_names_spec='$libname$shrext$versuffix' ;; 550 freebsd* | dragonfly* | midnightbsd*)
555 *) 551 library_names_spec='$libname$shrext'
556 library_names_spec='$libname$shrext' ;;
557 esac
558 ;; 552 ;;
559 gnu*) 553 gnu*)
560 library_names_spec='$libname$shrext' 554 library_names_spec='$libname$shrext'
diff --git a/build-aux/snippet/_Noreturn.h b/build-aux/snippet/_Noreturn.h
deleted file mode 100644
index c44ad89..0000000
--- a/build-aux/snippet/_Noreturn.h
+++ /dev/null
@@ -1,10 +0,0 @@
1#if !defined _Noreturn && __STDC_VERSION__ < 201112
2# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
3 || 0x5110 <= __SUNPRO_C)
4# define _Noreturn __attribute__ ((__noreturn__))
5# elif 1200 <= _MSC_VER
6# define _Noreturn __declspec (noreturn)
7# else
8# define _Noreturn
9# endif
10#endif
diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h
deleted file mode 100644
index 8ea2a47..0000000
--- a/build-aux/snippet/arg-nonnull.h
+++ /dev/null
@@ -1,26 +0,0 @@
1/* A C macro for declaring that specific arguments must not be NULL.
2 Copyright (C) 2009-2013 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published
6 by the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
18 that the values passed as arguments n, ..., m must be non-NULL pointers.
19 n = 1 stands for the first argument, n = 2 for the second argument etc. */
20#ifndef _GL_ARG_NONNULL
21# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
22# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
23# else
24# define _GL_ARG_NONNULL(params)
25# endif
26#endif
diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
deleted file mode 100644
index b35b933..0000000
--- a/build-aux/snippet/c++defs.h
+++ /dev/null
@@ -1,271 +0,0 @@
1/* C++ compatible function declaration macros.
2 Copyright (C) 2010-2013 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published
6 by the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17#ifndef _GL_CXXDEFS_H
18#define _GL_CXXDEFS_H
19
20/* The three most frequent use cases of these macros are:
21
22 * For providing a substitute for a function that is missing on some
23 platforms, but is declared and works fine on the platforms on which
24 it exists:
25
26 #if @GNULIB_FOO@
27 # if !@HAVE_FOO@
28 _GL_FUNCDECL_SYS (foo, ...);
29 # endif
30 _GL_CXXALIAS_SYS (foo, ...);
31 _GL_CXXALIASWARN (foo);
32 #elif defined GNULIB_POSIXCHECK
33 ...
34 #endif
35
36 * For providing a replacement for a function that exists on all platforms,
37 but is broken/insufficient and needs to be replaced on some platforms:
38
39 #if @GNULIB_FOO@
40 # if @REPLACE_FOO@
41 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
42 # undef foo
43 # define foo rpl_foo
44 # endif
45 _GL_FUNCDECL_RPL (foo, ...);
46 _GL_CXXALIAS_RPL (foo, ...);
47 # else
48 _GL_CXXALIAS_SYS (foo, ...);
49 # endif
50 _GL_CXXALIASWARN (foo);
51 #elif defined GNULIB_POSIXCHECK
52 ...
53 #endif
54
55 * For providing a replacement for a function that exists on some platforms
56 but is broken/insufficient and needs to be replaced on some of them and
57 is additionally either missing or undeclared on some other platforms:
58
59 #if @GNULIB_FOO@
60 # if @REPLACE_FOO@
61 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
62 # undef foo
63 # define foo rpl_foo
64 # endif
65 _GL_FUNCDECL_RPL (foo, ...);
66 _GL_CXXALIAS_RPL (foo, ...);
67 # else
68 # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
69 _GL_FUNCDECL_SYS (foo, ...);
70 # endif
71 _GL_CXXALIAS_SYS (foo, ...);
72 # endif
73 _GL_CXXALIASWARN (foo);
74 #elif defined GNULIB_POSIXCHECK
75 ...
76 #endif
77*/
78
79/* _GL_EXTERN_C declaration;
80 performs the declaration with C linkage. */
81#if defined __cplusplus
82# define _GL_EXTERN_C extern "C"
83#else
84# define _GL_EXTERN_C extern
85#endif
86
87/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
88 declares a replacement function, named rpl_func, with the given prototype,
89 consisting of return type, parameters, and attributes.
90 Example:
91 _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
92 _GL_ARG_NONNULL ((1)));
93 */
94#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
95 _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
96#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
97 _GL_EXTERN_C rettype rpl_func parameters_and_attributes
98
99/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
100 declares the system function, named func, with the given prototype,
101 consisting of return type, parameters, and attributes.
102 Example:
103 _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
104 _GL_ARG_NONNULL ((1)));
105 */
106#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
107 _GL_EXTERN_C rettype func parameters_and_attributes
108
109/* _GL_CXXALIAS_RPL (func, rettype, parameters);
110 declares a C++ alias called GNULIB_NAMESPACE::func
111 that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
112 Example:
113 _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
114 */
115#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
116 _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
117#if defined __cplusplus && defined GNULIB_NAMESPACE
118# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
119 namespace GNULIB_NAMESPACE \
120 { \
121 rettype (*const func) parameters = ::rpl_func; \
122 } \
123 _GL_EXTERN_C int _gl_cxxalias_dummy
124#else
125# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
126 _GL_EXTERN_C int _gl_cxxalias_dummy
127#endif
128
129/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
130 is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
131 except that the C function rpl_func may have a slightly different
132 declaration. A cast is used to silence the "invalid conversion" error
133 that would otherwise occur. */
134#if defined __cplusplus && defined GNULIB_NAMESPACE
135# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
136 namespace GNULIB_NAMESPACE \
137 { \
138 rettype (*const func) parameters = \
139 reinterpret_cast<rettype(*)parameters>(::rpl_func); \
140 } \
141 _GL_EXTERN_C int _gl_cxxalias_dummy
142#else
143# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
144 _GL_EXTERN_C int _gl_cxxalias_dummy
145#endif
146
147/* _GL_CXXALIAS_SYS (func, rettype, parameters);
148 declares a C++ alias called GNULIB_NAMESPACE::func
149 that redirects to the system provided function func, if GNULIB_NAMESPACE
150 is defined.
151 Example:
152 _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
153 */
154#if defined __cplusplus && defined GNULIB_NAMESPACE
155 /* If we were to write
156 rettype (*const func) parameters = ::func;
157 like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
158 better (remove an indirection through a 'static' pointer variable),
159 but then the _GL_CXXALIASWARN macro below would cause a warning not only
160 for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */
161# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
162 namespace GNULIB_NAMESPACE \
163 { \
164 static rettype (*func) parameters = ::func; \
165 } \
166 _GL_EXTERN_C int _gl_cxxalias_dummy
167#else
168# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
169 _GL_EXTERN_C int _gl_cxxalias_dummy
170#endif
171
172/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
173 is like _GL_CXXALIAS_SYS (func, rettype, parameters);
174 except that the C function func may have a slightly different declaration.
175 A cast is used to silence the "invalid conversion" error that would
176 otherwise occur. */
177#if defined __cplusplus && defined GNULIB_NAMESPACE
178# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
179 namespace GNULIB_NAMESPACE \
180 { \
181 static rettype (*func) parameters = \
182 reinterpret_cast<rettype(*)parameters>(::func); \
183 } \
184 _GL_EXTERN_C int _gl_cxxalias_dummy
185#else
186# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
187 _GL_EXTERN_C int _gl_cxxalias_dummy
188#endif
189
190/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
191 is like _GL_CXXALIAS_SYS (func, rettype, parameters);
192 except that the C function is picked among a set of overloaded functions,
193 namely the one with rettype2 and parameters2. Two consecutive casts
194 are used to silence the "cannot find a match" and "invalid conversion"
195 errors that would otherwise occur. */
196#if defined __cplusplus && defined GNULIB_NAMESPACE
197 /* The outer cast must be a reinterpret_cast.
198 The inner cast: When the function is defined as a set of overloaded
199 functions, it works as a static_cast<>, choosing the designated variant.
200 When the function is defined as a single variant, it works as a
201 reinterpret_cast<>. The parenthesized cast syntax works both ways. */
202# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
203 namespace GNULIB_NAMESPACE \
204 { \
205 static rettype (*func) parameters = \
206 reinterpret_cast<rettype(*)parameters>( \
207 (rettype2(*)parameters2)(::func)); \
208 } \
209 _GL_EXTERN_C int _gl_cxxalias_dummy
210#else
211# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
212 _GL_EXTERN_C int _gl_cxxalias_dummy
213#endif
214
215/* _GL_CXXALIASWARN (func);
216 causes a warning to be emitted when ::func is used but not when
217 GNULIB_NAMESPACE::func is used. func must be defined without overloaded
218 variants. */
219#if defined __cplusplus && defined GNULIB_NAMESPACE
220# define _GL_CXXALIASWARN(func) \
221 _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
222# define _GL_CXXALIASWARN_1(func,namespace) \
223 _GL_CXXALIASWARN_2 (func, namespace)
224/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
225 we enable the warning only when not optimizing. */
226# if !__OPTIMIZE__
227# define _GL_CXXALIASWARN_2(func,namespace) \
228 _GL_WARN_ON_USE (func, \
229 "The symbol ::" #func " refers to the system function. " \
230 "Use " #namespace "::" #func " instead.")
231# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
232# define _GL_CXXALIASWARN_2(func,namespace) \
233 extern __typeof__ (func) func
234# else
235# define _GL_CXXALIASWARN_2(func,namespace) \
236 _GL_EXTERN_C int _gl_cxxalias_dummy
237# endif
238#else
239# define _GL_CXXALIASWARN(func) \
240 _GL_EXTERN_C int _gl_cxxalias_dummy
241#endif
242
243/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
244 causes a warning to be emitted when the given overloaded variant of ::func
245 is used but not when GNULIB_NAMESPACE::func is used. */
246#if defined __cplusplus && defined GNULIB_NAMESPACE
247# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
248 _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
249 GNULIB_NAMESPACE)
250# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
251 _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
252/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
253 we enable the warning only when not optimizing. */
254# if !__OPTIMIZE__
255# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
256 _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
257 "The symbol ::" #func " refers to the system function. " \
258 "Use " #namespace "::" #func " instead.")
259# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
260# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
261 extern __typeof__ (func) func
262# else
263# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
264 _GL_EXTERN_C int _gl_cxxalias_dummy
265# endif
266#else
267# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
268 _GL_EXTERN_C int _gl_cxxalias_dummy
269#endif
270
271#endif /* _GL_CXXDEFS_H */
diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h
deleted file mode 100644
index 1736a1b..0000000
--- a/build-aux/snippet/warn-on-use.h
+++ /dev/null
@@ -1,109 +0,0 @@
1/* A C macro for emitting warnings if a function is used.
2 Copyright (C) 2010-2013 Free Software Foundation, Inc.
3
4 This program is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published
6 by the Free Software Foundation; either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16
17/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
18 for FUNCTION which will then trigger a compiler warning containing
19 the text of "literal string" anywhere that function is called, if
20 supported by the compiler. If the compiler does not support this
21 feature, the macro expands to an unused extern declaration.
22
23 This macro is useful for marking a function as a potential
24 portability trap, with the intent that "literal string" include
25 instructions on the replacement function that should be used
26 instead. However, one of the reasons that a function is a
27 portability trap is if it has the wrong signature. Declaring
28 FUNCTION with a different signature in C is a compilation error, so
29 this macro must use the same type as any existing declaration so
30 that programs that avoid the problematic FUNCTION do not fail to
31 compile merely because they included a header that poisoned the
32 function. But this implies that _GL_WARN_ON_USE is only safe to
33 use if FUNCTION is known to already have a declaration. Use of
34 this macro implies that there must not be any other macro hiding
35 the declaration of FUNCTION; but undefining FUNCTION first is part
36 of the poisoning process anyway (although for symbols that are
37 provided only via a macro, the result is a compilation error rather
38 than a warning containing "literal string"). Also note that in
39 C++, it is only safe to use if FUNCTION has no overloads.
40
41 For an example, it is possible to poison 'getline' by:
42 - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
43 [getline]) in configure.ac, which potentially defines
44 HAVE_RAW_DECL_GETLINE
45 - adding this code to a header that wraps the system <stdio.h>:
46 #undef getline
47 #if HAVE_RAW_DECL_GETLINE
48 _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
49 "not universally present; use the gnulib module getline");
50 #endif
51
52 It is not possible to directly poison global variables. But it is
53 possible to write a wrapper accessor function, and poison that
54 (less common usage, like &environ, will cause a compilation error
55 rather than issue the nice warning, but the end result of informing
56 the developer about their portability problem is still achieved):
57 #if HAVE_RAW_DECL_ENVIRON
58 static char ***rpl_environ (void) { return &environ; }
59 _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
60 # undef environ
61 # define environ (*rpl_environ ())
62 #endif
63 */
64#ifndef _GL_WARN_ON_USE
65
66# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
67/* A compiler attribute is available in gcc versions 4.3.0 and later. */
68# define _GL_WARN_ON_USE(function, message) \
69extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
70# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
71/* Verify the existence of the function. */
72# define _GL_WARN_ON_USE(function, message) \
73extern __typeof__ (function) function
74# else /* Unsupported. */
75# define _GL_WARN_ON_USE(function, message) \
76_GL_WARN_EXTERN_C int _gl_warn_on_use
77# endif
78#endif
79
80/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
81 is like _GL_WARN_ON_USE (function, "string"), except that the function is
82 declared with the given prototype, consisting of return type, parameters,
83 and attributes.
84 This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
85 not work in this case. */
86#ifndef _GL_WARN_ON_USE_CXX
87# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
88# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
89extern rettype function parameters_and_attributes \
90 __attribute__ ((__warning__ (msg)))
91# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
92/* Verify the existence of the function. */
93# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
94extern rettype function parameters_and_attributes
95# else /* Unsupported. */
96# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
97_GL_WARN_EXTERN_C int _gl_warn_on_use
98# endif
99#endif
100
101/* _GL_WARN_EXTERN_C declaration;
102 performs the declaration with C linkage. */
103#ifndef _GL_WARN_EXTERN_C
104# if defined __cplusplus
105# define _GL_WARN_EXTERN_C extern "C"
106# else
107# define _GL_WARN_EXTERN_C extern
108# endif
109#endif