+2005-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ Fix the inlining magic. (#157536, Jens Hatlak, and
+ #149907, Morten Welinder)
+
+ * configure.in: Define G_CAN_INLINE in glibconfig.h
+
+ * glib/gutils.h: Streamline the inlining magic a bit,
+ don't use extern when implementing the non-inlined
+ version.
+
2005-01-03 Matthias Clasen <mclasen@redhat.com>
* glib/gutils.c (g_find_program_in_path): Don't return
+2005-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ Fix the inlining magic. (#157536, Jens Hatlak, and
+ #149907, Morten Welinder)
+
+ * configure.in: Define G_CAN_INLINE in glibconfig.h
+
+ * glib/gutils.h: Streamline the inlining magic a bit,
+ don't use extern when implementing the non-inlined
+ version.
+
2005-01-03 Matthias Clasen <mclasen@redhat.com>
* glib/gutils.c (g_find_program_in_path): Don't return
+2005-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ Fix the inlining magic. (#157536, Jens Hatlak, and
+ #149907, Morten Welinder)
+
+ * configure.in: Define G_CAN_INLINE in glibconfig.h
+
+ * glib/gutils.h: Streamline the inlining magic a bit,
+ don't use extern when implementing the non-inlined
+ version.
+
2005-01-03 Matthias Clasen <mclasen@redhat.com>
* glib/gutils.c (g_find_program_in_path): Don't return
+2005-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ Fix the inlining magic. (#157536, Jens Hatlak, and
+ #149907, Morten Welinder)
+
+ * configure.in: Define G_CAN_INLINE in glibconfig.h
+
+ * glib/gutils.h: Streamline the inlining magic a bit,
+ don't use extern when implementing the non-inlined
+ version.
+
2005-01-03 Matthias Clasen <mclasen@redhat.com>
* glib/gutils.c (g_find_program_in_path): Don't return
+2005-01-04 Matthias Clasen <mclasen@redhat.com>
+
+ Fix the inlining magic. (#157536, Jens Hatlak, and
+ #149907, Morten Welinder)
+
+ * configure.in: Define G_CAN_INLINE in glibconfig.h
+
+ * glib/gutils.h: Streamline the inlining magic a bit,
+ don't use extern when implementing the non-inlined
+ version.
+
2005-01-03 Matthias Clasen <mclasen@redhat.com>
* glib/gutils.c (g_find_program_in_path): Don't return
xyes) AC_DEFINE(G_HAVE_INLINE,1,[Have inline keyword])
esac
+# if we can use inline functions in headers
+AC_MSG_CHECKING(if inline functions in headers work)
+AC_LINK_IFELSE([
+#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
+# undef inline
+# define inline __inline__
+#elif !defined (G_HAVE_INLINE)
+# undef inline
+# if defined (G_HAVE___INLINE__)
+# define inline __inline__
+# elif defined (G_HAVE___INLINE)
+# define inline __inline
+# endif
+#endif
+
+int glib_test_func2 (int);
+
+static inline int
+glib_test_func1 (void) {
+ return glib_test_func2 (1);
+}
+
+int
+main (void) {
+ int i = 1;
+}],[g_can_inline=yes],[g_can_inline=no])
+AC_MSG_RESULT($g_can_inline)
+
# check for flavours of varargs macros
AC_MSG_CHECKING(for ISO C99 varargs macros in C)
AC_TRY_COMPILE([],[
$glib_inline
#endif /* !__cplusplus */
+#ifdef __cplusplus
+#define G_CAN_INLINE 1
+_______EOF
+
+ if test x$g_can_inline = xyes ; then
+ cat >>$outfile <<_______EOF
+#else /* !__cplusplus */
+#define G_CAN_INLINE 1
+_______EOF
+ fi
+
+ cat >>$outfile <<_______EOF
+#endif
+
_______EOF
if test x$g_have_iso_c_varargs = xyes ; then
g_have_iso_c_varargs=$g_have_iso_c_varargs
g_have_iso_cxx_varargs=$g_have_iso_cxx_varargs
+g_can_inline=$g_can_inline
g_have_gnuc_visibility=$g_have_gnuc_visibility
case xyes in
/* inlining hassle. for compilers that don't allow the `inline' keyword,
* mostly because of strict ANSI C compliance or dumbness, we try to fall
* back to either `__inline__' or `__inline'.
- * we define G_CAN_INLINE, if the compiler seems to be actually
- * *capable* to do function inlining, in which case inline function bodys
- * do make sense. we also define G_INLINE_FUNC to properly export the
- * function prototypes if no inlining can be performed.
+ * G_CAN_INLINE is defined in glibconfig.h if the compiler seems to be
+ * actually *capable* to do function inlining, in which case inline
+ * function bodies do make sense. we also define G_INLINE_FUNC to properly
+ * export the function prototypes if no inlining can be performed.
* inline function bodies have to be special cased with G_CAN_INLINE and a
* .c file specific macro to allow one compiled instance with extern linkage
* of the functions by defining G_IMPLEMENT_INLINES and the .c file macro.
*/
-#ifdef G_IMPLEMENT_INLINES
-# define G_INLINE_FUNC extern
-# undef G_CAN_INLINE
-#endif
-#ifndef G_INLINE_FUNC
-# define G_CAN_INLINE 1
-#endif
#if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
# undef inline
# define inline __inline__
# define inline __inline
# else /* !inline && !__inline__ && !__inline */
# define inline /* don't inline, then */
-# ifndef G_INLINE_FUNC
-# undef G_CAN_INLINE
-# endif
# endif
#endif
-#ifndef G_INLINE_FUNC
-# if defined (__GNUC__) && defined (__OPTIMIZE__)
-# define G_INLINE_FUNC extern inline
-# elif defined (G_CAN_INLINE) && !defined (__GNUC__)
-# define G_INLINE_FUNC static inline
-# else /* can't inline */
-# define G_INLINE_FUNC extern
-# undef G_CAN_INLINE
-# endif
+#ifdef G_IMPLEMENT_INLINES
+# define G_INLINE_FUNC
+#elif defined (__GNUC__) && defined (__OPTIMIZE__)
+# define G_INLINE_FUNC extern inline
+#elif defined (G_CAN_INLINE) && !defined (__GNUC__)
+# define G_INLINE_FUNC static inline
+#else /* can't inline */
+# define G_INLINE_FUNC
#endif /* !G_INLINE_FUNC */
/* Retrive static string info