third_party: Update socket_wrapper to version 1.2.1
[samba.git] / third_party / socket_wrapper / wscript
1 #!/usr/bin/env python
2
3 import os
4
5 VERSION="1.2.1"
6
7 def configure(conf):
8     if conf.CHECK_SOCKET_WRAPPER():
9         conf.DEFINE('USING_SYSTEM_SOCKET_WRAPPER', 1)
10         libsocket_wrapper_so_path = 'libsocket_wrapper.so'
11     else:
12
13         if conf.CONFIG_SET("HAVE___THREAD"):
14             conf.DEFINE("HAVE_GCC_THREAD_LOCAL_STORAGE", 1)
15
16         # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
17         conf.CHECK_CODE('''
18             void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
19
20             int main(void) {
21                 return 0;
22             }
23             ''',
24             'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
25             addmain=False,
26             strict=True,
27             msg='Checking for printf format validation support')
28
29         conf.CHECK_HEADERS('sys/signalfd.h')
30         conf.CHECK_HEADERS('sys/eventfd.h')
31         conf.CHECK_HEADERS('sys/timerfd.h')
32         conf.CHECK_HEADERS('gnu/lib-names.h')
33         conf.CHECK_HEADERS('rpc/rpc.h')
34
35         conf.CHECK_STRUCTURE_MEMBER('struct msghdr',
36                                     'msg_control',
37                                     headers='sys/types.h sys/socket.h',
38                                     define='HAVE_STRUCT_MSGHDR_MSG_CONTROL')
39
40         conf.CHECK_STRUCTURE_MEMBER('struct in_pktinfo',
41                                     'ipi_addr',
42                                     headers='sys/types.h sys/socket.h netinet/in.h',
43                                     define='HAVE_STRUCT_IN_PKTINFO')
44
45         conf.CHECK_STRUCTURE_MEMBER('struct in6_pktinfo',
46                                     'ipi6_addr',
47                                     headers='sys/types.h sys/socket.h netinet/in.h',
48                                     define='HAVE_STRUCT_IN6_PKTINFO')
49
50         conf.CHECK_FUNCS('getaddrinfo')
51         conf.CHECK_FUNCS('signalfd eventfd timerfd_create')
52         conf.CHECK_FUNCS('bindresvport')
53         conf.CHECK_FUNCS('pledge')
54         conf.CHECK_FUNCS('accept4')
55
56         conf.CHECK_FUNCS_IN('bind',
57                             'socket',
58                             checklibc=True,
59                             headers='sys/types.h sys/socket.h')
60
61         conf.CHECK_C_PROTOTYPE('accept',
62                                'int accept(int s, struct sockaddr *addr, Psocklen_t addrlen)',
63                                define='HAVE_ACCEPT_PSOCKLEN_T', headers='sys/types.h sys/socket.h')
64
65         conf.CHECK_C_PROTOTYPE('ioctl',
66                                'int ioctl(int s, int r, ...)',
67                                define='HAVE_IOCTL_INT', headers='unistd.h sys/ioctl.h')
68
69         if conf.CONFIG_SET("HAVE_EVENTFD"):
70             conf.CHECK_C_PROTOTYPE('eventfd',
71                                    'int eventfd(unsigned int count, int flags)',
72                                    define='HAVE_EVENTFD_UNSIGNED_INT', headers='sys/eventfd.h')
73
74         # Create full path to socket_wrapper
75         blddir = os.path.realpath(conf.bldnode.abspath())
76         libsocket_wrapper_so_path = blddir + '/default/third_party/socket_wrapper/libsocket-wrapper.so'
77
78     conf.DEFINE('LIBSOCKET_WRAPPER_SO_PATH', libsocket_wrapper_so_path)
79     conf.DEFINE('SOCKET_WRAPPER', 1)
80
81 def build(bld):
82     if not bld.CONFIG_SET("USING_SYSTEM_SOCKET_WRAPPER"):
83         # We need to do it this way or the library wont work.
84         # Using private_library=True will add symbol version which
85         # breaks preloading!
86         bld.SAMBA_LIBRARY('socket_wrapper',
87                           source='socket_wrapper.c',
88                           deps='dl pthread tirpc',
89                           install=False,
90                           realname='libsocket-wrapper.so')