1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/usr/bin/env python
import Options
import os
VERSION="1.1.0"
def configure(conf):
if conf.CHECK_BUNDLED_SYSTEM('uid_wrapper', minversion=VERSION, set_target=False):
conf.DEFINE('USING_SYSTEM_UID_WRAPPER', 1)
libuid_wrapper_so_path = 'libuid_wrapper.so'
else:
# check HAVE_GCC_ATOMIC_BUILTINS
conf.CHECK_CODE('''
#include <stdbool.h>
int main(void) {
bool x;
bool *p_x = &x;
__atomic_load(p_x, &x, __ATOMIC_RELAXED);
return 0;
''',
'HAVE_GCC_ATOMIC_BUILTINS',
addmain=False,
msg='Checking for atomic builtins')
# check HAVE_GCC_THREAD_LOCAL_STORAGE
conf.CHECK_CODE('''
__thread int tls;
int main(void) {
return 0;
}
''',
'HAVE_GCC_THREAD_LOCAL_STORAGE',
addmain=False,
msg='Checking for thread local storage')
# check HAVE_CONSTRUCTOR_ATTRIBUTE
conf.CHECK_CODE('''
void test_constructor_attribute(void) __attribute__ ((constructor));
void test_constructor_attribute(void)
{
return;
}
int main(void) {
return 0;
}
''',
'HAVE_CONSTRUCTOR_ATTRIBUTE',
addmain=False,
msg='Checking for library constructor support')
# check HAVE_DESTRUCTOR_ATTRIBUTE
conf.CHECK_CODE('''
void test_destructor_attribute(void) __attribute__ ((destructor));
void test_destructor_attribute(void)
{
return;
}
int main(void) {
return 0;
}
''',
'HAVE_DESTRUCTOR_ATTRIBUTE',
addmain=False,
msg='Checking for library destructor support')
if Options.options.address_sanitizer:
# check HAVE_ADDRESS_SANITIZER_ATTRIBUTE
conf.CHECK_CODE('''
void test_address_sanitizer_attribute(void) __attribute__((no_sanitize_address));
void test_address_sanitizer_attribute(void)
{
return;
}
int main(void) {
return 0;
}
''',
'HAVE_ADDRESS_SANITIZER_ATTRIBUTE',
addmain=False,
cflags='-Wall -Wextra -Werror',
msg='Checking for address sanitizer attribute')
# check HAVE_FUNCTION_ATTRIBUTE_FORMAT
conf.CHECK_CODE('''
void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
int main(void) {
return 0;
}
''',
'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
addmain=False,
msg='Checking for printf format validation support')
# Prototype checks
conf.CHECK_C_PROTOTYPE('setgroups',
'int setgroups(int ngroups, const gid_t *grouplist)',
define='HAVE_SETGROUPS_INT', headers='unistd.h sys/types.h')
conf.CHECK_C_PROTOTYPE('syscall',
'int syscall(int number, ...)',
define='HAVE_SYSCALL_INT', headers='unistd.h sys/syscall.h')
conf.CHECK_FUNCS('getresuid getresgid')
# Create full path to uid_wrapper
srcdir = os.path.realpath(conf.srcdir)
libuid_wrapper_so_path = srcdir + '/bin/default/lib/uid_wrapper/libuid-wrapper.so'
conf.DEFINE('LIBUID_WRAPPER_SO_PATH', libuid_wrapper_so_path)
conf.DEFINE('UID_WRAPPER', 1)
def build(bld):
if not bld.CONFIG_SET("USING_SYSTEM_UID_WRAPPER"):
# We need to do it this way or the library wont work.
# Using private_library=True will add symbol version which
# breaks preloading!
bld.SAMBA_LIBRARY('uid_wrapper',
source='uid_wrapper.c',
cflags='-DNDEBUG',
deps='dl',
install=False,
realname='libuid-wrapper.so')
|