Check if the compiler knows about the __malloc__ attribute.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 31 Jul 2003 11:17:39 +0000 (11:17 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 31 Jul 2003 11:17:39 +0000 (11:17 +0000)
configure.in
lib/list.h
m4/attribute.m4 [new file with mode: 0644]

index d7754f903c3518ea619fe01dc0cb5a9391a9ce25..5fe9f4d4cc78430436fc1f9d0620c8c76cbe679d 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
 dnl Process this file with autoconf to produce a configure script.
 
-dnl $Id: configure.in,v 1.13.2.76 2003/07/30 11:50:44 guus Exp $
+dnl $Id: configure.in,v 1.13.2.77 2003/07/31 11:17:39 guus Exp $
 
 AC_PREREQ(2.57)
 AC_INIT(src/tincd.c)
 
 AC_PREREQ(2.57)
 AC_INIT(src/tincd.c)
@@ -109,11 +109,14 @@ AC_CHECK_HEADERS([net/ethernet.h net/if.h net/if_arp.h netinet/if_ether.h netine
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
+AC_C_VOLATILE
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_HEADER_TIME
 AC_STRUCT_TM
 
 AC_TYPE_PID_T
 AC_TYPE_SIZE_T
 AC_HEADER_TIME
 AC_STRUCT_TM
 
+tinc_ATTRIBUTE(__malloc__)
+
 AC_CHECK_TYPES([socklen_t, struct arphdr, struct ether_arp, struct in_addr, struct addrinfo, struct ip, struct icmp, struct in6_addr, struct sockaddr_in6, struct ip6_hdr, struct icmp6_hdr, struct nd_neighbor_solicit, struct nd_opt_hdr], , ,
   [#ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
 AC_CHECK_TYPES([socklen_t, struct arphdr, struct ether_arp, struct in_addr, struct addrinfo, struct ip, struct icmp, struct in6_addr, struct sockaddr_in6, struct ip6_hdr, struct icmp6_hdr, struct nd_neighbor_solicit, struct nd_opt_hdr], , ,
   [#ifdef HAVE_SYS_TYPES_H
    #include <sys/types.h>
index ff5409286cf5d5769d2db9b3b54a1b702937f0e5..c53e80131ce9d0b1aff7125a95553517696e3315 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: list.h,v 1.1.2.10 2003/07/12 17:48:38 guus Exp $
+    $Id: list.h,v 1.1.2.11 2003/07/31 11:17:39 guus Exp $
 */
 
 #ifndef __TINC_LIST_H__
 */
 
 #ifndef __TINC_LIST_H__
@@ -47,7 +47,7 @@ typedef struct list_t {
 
 /* (De)constructors */
 
 
 /* (De)constructors */
 
-extern list_t *list_alloc(list_action_t) __attribute__ ((malloc));
+extern list_t *list_alloc(list_action_t) __attribute__ ((__malloc__));
 extern void list_free(list_t *);
 extern list_node_t *list_alloc_node(void);
 extern void list_free_node(list_t *, list_node_t *);
 extern void list_free(list_t *);
 extern list_node_t *list_alloc_node(void);
 extern void list_free_node(list_t *, list_node_t *);
diff --git a/m4/attribute.m4 b/m4/attribute.m4
new file mode 100644 (file)
index 0000000..58b8346
--- /dev/null
@@ -0,0 +1,25 @@
+dnl Check to find out whether function attributes are supported.
+dnl If they are not, #define them to be nothing.
+
+AC_DEFUN(tinc_ATTRIBUTE,
+[
+  AC_CACHE_CHECK([for working $1 attribute], tinc_cv_attribute_$1,
+  [ 
+    tempcflags="$CFLAGS"
+    CFLAGS="$CFLAGS -Wall -Werror"
+    AC_COMPILE_IFELSE(
+      [AC_LANG_SOURCE(
+        [void test(void) __attribute__ (($1));
+        void test(void) { return; }
+       ],
+       )],
+       [tinc_cv_attribute_$1=yes],
+       [tinc_cv_attribute_$1=no]
+     )
+     CFLAGS="$tempcflags"
+   ])
+
+   if test ${tinc_cv_attribute_$1} = no; then
+     AC_DEFINE([$1], [], [Defined if the $1 attribute is not supported.])
+   fi
+])