From 7563ebefca27494b2beaee244e0d16b7098e51de Mon Sep 17 00:00:00 2001 From: "msvensson@pilot.blaudden" <> Date: Thu, 12 Apr 2007 00:43:25 +0200 Subject: [PATCH] Bug#25118 ATTRIBUTE_FORMAT_FPTR undeclared in m_ctype.h - Move marcos for __attribute__ usage to my_attribute.h and include that file where needed --- include/Makefile.am | 2 +- include/m_ctype.h | 2 ++ include/my_attribute.h | 63 ++++++++++++++++++++++++++++++++++++++++++ include/my_global.h | 38 +------------------------ include/my_sys.h | 3 -- 5 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 include/my_attribute.h diff --git a/include/Makefile.am b/include/Makefile.am index 9cd2f6215f1..e5fac39e5ff 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -25,7 +25,7 @@ pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \ errmsg.h my_global.h my_net.h \ my_getopt.h sslopt-longopts.h my_dir.h \ sslopt-vars.h sslopt-case.h sql_common.h keycache.h \ - m_ctype.h $(HEADERS_GEN) + m_ctype.h my_attribute.h $(HEADERS_GEN) noinst_HEADERS = config-win.h config-os2.h config-netware.h \ heap.h my_bitmap.h\ myisam.h myisampack.h myisammrg.h ft_global.h\ diff --git a/include/m_ctype.h b/include/m_ctype.h index 50a50b7ed12..f33fd015733 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -21,6 +21,8 @@ #ifndef _m_ctype_h #define _m_ctype_h +#include + #ifdef __cplusplus extern "C" { #endif diff --git a/include/my_attribute.h b/include/my_attribute.h new file mode 100644 index 00000000000..8309d85f20a --- /dev/null +++ b/include/my_attribute.h @@ -0,0 +1,63 @@ +/* Copyright (C) 2000-2003 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +/* + Helper macros used for setting different __attributes__ + on functions in a portable fashion +*/ + +#ifndef _my_attribute_h +#define _my_attribute_h + +/* + Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. + Some forms of __attribute__ are actually supported in earlier versions of + g++, but we just disable them all because we only use them to generate + compilation warnings. +*/ +#ifndef __attribute__ +# if !defined(__GNUC__) +# define __attribute__(A) +# elif GCC_VERSION < 2008 +# define __attribute__(A) +# elif defined(__cplusplus) && GCC_VERSION < 3004 +# define __attribute__(A) +# endif +#endif + +/* + __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 + But that's already covered by the __attribute__ tests above, so this is + just a convenience macro. +*/ +#ifndef ATTRIBUTE_FORMAT +# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) +#endif + +/* + + __attribute__((format(...))) on a function pointer is not supported + until gcc 3.1 +*/ +#ifndef ATTRIBUTE_FORMAT_FPTR +# if (GCC_VERSION >= 3001) +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) +# else +# define ATTRIBUTE_FORMAT_FPTR(style, m, n) +# endif /* GNUC >= 3.1 */ +#endif + + +#endif diff --git a/include/my_global.h b/include/my_global.h index 61c2afc541b..5244e66769e 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -497,43 +497,7 @@ typedef unsigned short ushort; #define my_const_cast(A) (A) #endif -/* - Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. - Some forms of __attribute__ are actually supported in earlier versions of - g++, but we just disable them all because we only use them to generate - compilation warnings. -*/ -#ifndef __attribute__ -# if !defined(__GNUC__) -# define __attribute__(A) -# elif GCC_VERSION < 2008 -# define __attribute__(A) -# elif defined(__cplusplus) && GCC_VERSION < 3004 -# define __attribute__(A) -# endif -#endif - -/* - __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 - But that's already covered by the __attribute__ tests above, so this is - just a convenience macro. -*/ -#ifndef ATTRIBUTE_FORMAT -# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) -#endif - -/* - - __attribute__((format(...))) on a function pointer is not supported - until gcc 3.1 -*/ -#ifndef ATTRIBUTE_FORMAT_FPTR -# if (GCC_VERSION >= 3001) -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) -# else -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) -# endif /* GNUC >= 3.1 */ -#endif +#include /* Wen using the embedded library, users might run into link problems, diff --git a/include/my_sys.h b/include/my_sys.h index 63a1faf3995..615a074e814 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -31,10 +31,7 @@ extern int NEAR my_errno; /* Last error in mysys */ #include #endif -#ifndef _m_ctype_h #include /* for CHARSET_INFO */ -#endif - #include #include