Index: configure =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: configure.ac =================================================================== --- configure.ac (revision 311750) +++ configure.ac (working copy) @@ -853,6 +853,7 @@ AST_GCC_ATTRIBUTE(sentinel) AST_GCC_ATTRIBUTE(warn_unused_result) AST_GCC_ATTRIBUTE(weak_import, [], [], PBX_WEAKREF) +AST_GCC_ATTRIBUTE(weak, [], [], PBX_WEAKREF) AST_GCC_ATTRIBUTE(weakref, [weakref("foo")], static, PBX_WEAKREF) AC_MSG_CHECKING(for -ffunction-sections support) Index: include/asterisk/optional_api.h =================================================================== --- include/asterisk/optional_api.h (revision 311750) +++ include/asterisk/optional_api.h (working copy) @@ -150,11 +150,40 @@ static attribute_unused __attribute__((attr)) typeof(__stub__##name) * name; \ static void __attribute__((constructor)) __init__##name(void) { name = AST_OPTIONAL_API_NAME(name) ? : __stub__##name; } - #endif /* End of Darwin (Mac OS/X) implementation */ +#elif defined(HAVE_ATTRIBUTE_weak) + +# define AST_OPTIONAL_API_NAME(name) __##name + +# if defined(AST_API_MODULE) + +# define AST_OPTIONAL_API(result, name, proto, stub) \ + result AST_OPTIONAL_API_NAME(name) proto; \ + static attribute_unused typeof(AST_OPTIONAL_API_NAME(name)) * const name = AST_OPTIONAL_API_NAME(name); + +# define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + result __attribute__((attr)) AST_OPTIONAL_API_NAME(name) proto; \ + static attribute_unused typeof(AST_OPTIONAL_API_NAME(name)) * const name = AST_OPTIONAL_API_NAME(name); + +# else + +# define AST_OPTIONAL_API(result, name, proto, stub) \ + static result __stub__##name proto stub; \ + __attribute__((weak)) typeof(__stub__##name) AST_OPTIONAL_API_NAME(name); \ + static attribute_unused typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = AST_OPTIONAL_API_NAME(name) ? : __stub__##name; } + +# define AST_OPTIONAL_API_ATTR(result, attr, name, proto, stub) \ + static __attribute__((attr)) result __stub__##name proto stub; \ + __attribute__((attr, weak)) typeof(__stub__##name) AST_OPTIONAL_API_NAME(name); \ + static attribute_unused __attribute__((attr)) typeof(__stub__##name) * name; \ + static void __attribute__((constructor)) __init__##name(void) { name = AST_OPTIONAL_API_NAME(name) ? : __stub__##name; } + +# endif + #elif defined(HAVE_ATTRIBUTE_weakref) /* Index: include/asterisk/autoconfig.h.in =================================================================== --- include/asterisk/autoconfig.h.in (revision 311750) +++ include/asterisk/autoconfig.h.in (working copy) @@ -101,6 +101,9 @@ attribute. */ #undef HAVE_ATTRIBUTE_warn_unused_result +/* Define to 1 if your GCC C compiler supports the 'weak' attribute. */ +#undef HAVE_ATTRIBUTE_weak + /* Define to 1 if your GCC C compiler supports the 'weak_import' attribute. */ #undef HAVE_ATTRIBUTE_weak_import @@ -823,16 +826,16 @@ /* Define to 1 if you have the `strtoq' function. */ #undef HAVE_STRTOQ -/* Define to 1 if `ifr_ifru.ifru_hwaddr' is a member of `struct ifreq'. */ +/* Define to 1 if `ifr_ifru.ifru_hwaddr' is member of `struct ifreq'. */ #undef HAVE_STRUCT_IFREQ_IFR_IFRU_IFRU_HWADDR -/* Define to 1 if `st_blksize' is a member of `struct stat'. */ +/* Define to 1 if `st_blksize' is member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLKSIZE -/* Define to 1 if `cr_uid' is a member of `struct ucred'. */ +/* Define to 1 if `cr_uid' is member of `struct ucred'. */ #undef HAVE_STRUCT_UCRED_CR_UID -/* Define to 1 if `uid' is a member of `struct ucred'. */ +/* Define to 1 if `uid' is member of `struct ucred'. */ #undef HAVE_STRUCT_UCRED_UID /* Define to 1 if you have the mISDN Supplemental Services library. */ @@ -1110,12 +1113,12 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME -/* Define to the home page for this package. */ -#undef PACKAGE_URL - /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Define to 1 if the C compiler supports function prototypes. */ +#undef PROTOTYPES + /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE @@ -1135,6 +1138,11 @@ /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 +/* Define to 1 if the `setvbuf' function takes the buffering type as its + second argument and the buffer pointer as the third, as on System V before + release 3. */ +#undef SETVBUF_REVERSED + /* The size of `char *', as computed by sizeof. */ #undef SIZEOF_CHAR_P @@ -1170,34 +1178,24 @@ /* Define to a type of the same size as fd_set.fds_bits[[0]] */ #undef TYPEOF_FD_SET_FDS_BITS -/* Enable extensions on AIX 3, Interix. */ +/* Define to 1 if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif - /* Define to 1 if running on Darwin. */ #undef _DARWIN_UNLIMITED_SELECT /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif + /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE @@ -1214,6 +1212,20 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE +/* Enable extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif + +/* Define like PROTOTYPES; this can be used by system headers. */ +#undef __PROTOTYPES + /* Define to empty if `const' does not conform to ANSI C. */ #undef const