ldb-samba: ldif_read_objectSid avoids VLA
[samba.git] / third_party / socket_wrapper / wscript
1 #!/usr/bin/env python
2
3 import os
4
5 VERSION = "1.4.2"
6
7
8 def configure(conf):
9     if conf.CHECK_SOCKET_WRAPPER():
10         conf.DEFINE('USING_SYSTEM_SOCKET_WRAPPER', 1)
11         libsocket_wrapper_so_path = 'libsocket_wrapper.so'
12     else:
13
14         if conf.CONFIG_SET("HAVE___THREAD"):
15             conf.DEFINE("HAVE_GCC_THREAD_LOCAL_STORAGE", 1)
16
17         # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
18         conf.CHECK_CODE('''
19             void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
20
21             int main(void) {
22                 return 0;
23             }
24             ''',
25             'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
26             addmain=False,
27             strict=True,
28             msg='Checking for printf format validation support')
29
30         conf.CHECK_HEADERS('sys/signalfd.h')
31         conf.CHECK_HEADERS('sys/eventfd.h')
32         conf.CHECK_HEADERS('sys/timerfd.h')
33         conf.CHECK_HEADERS('gnu/lib-names.h')
34         conf.CHECK_HEADERS('rpc/rpc.h')
35         conf.CHECK_HEADERS('netinet/tcp_fsm.h')
36
37         conf.CHECK_STRUCTURE_MEMBER('struct msghdr',
38                                     'msg_control',
39                                     headers='sys/types.h sys/socket.h',
40                                     define='HAVE_STRUCT_MSGHDR_MSG_CONTROL')
41
42         conf.CHECK_STRUCTURE_MEMBER('struct in_pktinfo',
43                                     'ipi_addr',
44                                     headers='sys/types.h sys/socket.h netinet/in.h',
45                                     define='HAVE_STRUCT_IN_PKTINFO')
46
47         conf.CHECK_STRUCTURE_MEMBER('struct in6_pktinfo',
48                                     'ipi6_addr',
49                                     headers='sys/types.h sys/socket.h netinet/in.h',
50                                     define='HAVE_STRUCT_IN6_PKTINFO')
51
52         conf.CHECK_FUNCS('getaddrinfo')
53         conf.CHECK_FUNCS('signalfd eventfd timerfd_create')
54         conf.CHECK_FUNCS('bindresvport')
55         conf.CHECK_FUNCS('pledge')
56         conf.CHECK_FUNCS('accept4')
57         conf.CHECK_FUNCS('sendmmsg recvmmsg')
58         conf.CHECK_FUNCS('__close_nocancel')
59         conf.CHECK_FUNCS('openat64')
60         conf.CHECK_FUNCS('fopen64')
61         conf.CHECK_FUNCS('open64')
62         conf.CHECK_FUNCS('fcntl64')
63
64         conf.CHECK_FUNCS_IN('bind',
65                             'socket',
66                             checklibc=True,
67                             headers='sys/types.h sys/socket.h')
68
69         conf.CHECK_C_PROTOTYPE('accept',
70                                'int accept(int s, struct sockaddr *addr, Psocklen_t addrlen)',
71                                define='HAVE_ACCEPT_PSOCKLEN_T', headers='sys/types.h sys/socket.h')
72
73         # Linux legacy glibc < 2.21
74         conf.CHECK_C_PROTOTYPE('recvmmsg',
75                                'int recvmmsg(int __fd, struct mmsghdr *__vmessages, unsigned int __vlen, int __flags, const struct timespec *__tmo)',
76                                define='HAVE_RECVMMSG_CONST_TIMEOUT', headers='sys/types.h sys/socket.h')
77         # FreeBSD
78         conf.CHECK_C_PROTOTYPE('recvmmsg',
79                                'ssize_t recvmmsg(int __fd, struct mmsghdr * __restrict __vmessages, size_t __vlen, int __flags, const struct timespec * __restrict __tmo)',
80                                define='HAVE_RECVMMSG_SSIZE_T_CONST_TIMEOUT', headers='sys/types.h sys/socket.h')
81         # FreeBSD
82         conf.CHECK_C_PROTOTYPE('sendmmsg',
83                                'ssize_t sendmmsg(int __fd, struct mmsghdr * __restrict __vmessages, size_t __vlen, int __flags)',
84                                define='HAVE_SENDMMSG_SSIZE_T', headers='sys/types.h sys/socket.h')
85
86         conf.CHECK_C_PROTOTYPE('ioctl',
87                                'int ioctl(int s, int r, ...)',
88                                define='HAVE_IOCTL_INT', headers='unistd.h sys/ioctl.h')
89
90         if conf.CONFIG_SET("HAVE_EVENTFD"):
91             conf.CHECK_C_PROTOTYPE('eventfd',
92                                    'int eventfd(unsigned int count, int flags)',
93                                    define='HAVE_EVENTFD_UNSIGNED_INT', headers='sys/eventfd.h')
94
95         # FreeBSD exports each syscall also with '_' as prefix
96         # and these symbols are used if called by system libraries itself.
97         # That means socket_wrapper needs to implement these too
98         # in order to inject itself into system libraries,
99         # we just check for _socket and _close and assume the rest
100         # is also there...
101         conf.CHECK_FUNCS('_socket _close')
102
103         # Create full path to socket_wrapper
104         blddir = os.path.realpath(conf.bldnode.abspath())
105         libsocket_wrapper_so_path = blddir + '/default/third_party/socket_wrapper/libsocket-wrapper.so'
106
107     conf.DEFINE('LIBSOCKET_WRAPPER_SO_PATH', libsocket_wrapper_so_path)
108     conf.DEFINE('SOCKET_WRAPPER', 1)
109
110 def build(bld):
111     if not bld.CONFIG_SET("USING_SYSTEM_SOCKET_WRAPPER"):
112         # We need to do it this way or the library wont work.
113         # We need force_unversioned=True as symbol versioning
114         # breaks preloading!
115         bld.SAMBA_LIBRARY('socket_wrapper',
116                           source='socket_wrapper.c',
117                           cflags='-D%s="%s" -D%s="%s"' % (
118                               "SOCKET_WRAPPER_PACKAGE",
119                               "samba_socket_wrapper",
120                               "SOCKET_WRAPPER_VERSION",
121                               VERSION),
122                           deps='dl pthread tirpc',
123                           install=False,
124                           force_unversioned=True,
125                           realname='libsocket-wrapper.so')