libsmb: Fix destructor setup in unexpected.c
[Samba.git] / third_party / pam_wrapper / wscript
blobb9acf1b96ebeca241dcd0bd273177ba4f6c405f8
1 #!/usr/bin/env python
3 import os
5 VERSION="1.0.4"
7 def find_library(library_names, lookup_paths):
8 for directory in lookup_paths:
9 for filename in library_names:
10 libpam_path = os.path.join(directory, filename)
11 if os.path.exists(libpam_path):
12 return libpam_path
13 return ''
15 def configure(conf):
16 if conf.CHECK_PAM_WRAPPER():
17 conf.DEFINE('USING_SYSTEM_PAM_WRAPPER', 1)
18 libpam_wrapper_so_path = 'libpam_wrapper.so'
19 else:
20 # check HAVE_GCC_THREAD_LOCAL_STORAGE
21 conf.CHECK_CODE('''
22 __thread int tls;
24 int main(void) {
25 return 0;
27 ''',
28 'HAVE_GCC_THREAD_LOCAL_STORAGE',
29 addmain=False,
30 msg='Checking for thread local storage')
32 # check HAVE_DESTRUCTOR_ATTRIBUTE
33 conf.CHECK_CODE('''
34 void test_destructor_attribute(void) __attribute__ ((destructor));
36 void test_destructor_attribute(void)
38 return;
41 int main(void) {
42 return 0;
44 ''',
45 'HAVE_DESTRUCTOR_ATTRIBUTE',
46 addmain=False,
47 msg='Checking for library destructor support')
49 # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
50 conf.CHECK_CODE('''
51 void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
53 int main(void) {
54 return 0;
56 ''',
57 'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
58 addmain=False,
59 msg='Checking for printf format validation support')
61 conf.CHECK_HEADERS('security/pam_appl.h')
62 conf.CHECK_HEADERS('security/pam_modules.h')
63 conf.CHECK_HEADERS('security/pam_ext.h')
65 conf.CHECK_FUNCS_IN('pam_vsyslog',
66 'pam',
67 checklibc=False,
68 headers='security/pam_ext.h')
70 conf.CHECK_FUNCS_IN('pam_syslog',
71 'pam',
72 checklibc=False,
73 headers='security/pam_ext.h')
75 conf.CHECK_C_PROTOTYPE('pam_vprompt',
76 'int pam_vprompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, va_list _ap)',
77 define='HAVE_PAM_VPROMPT_CONST', headers='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
79 conf.CHECK_C_PROTOTYPE('pam_prompt',
80 'int pam_prompt(const pam_handle_t *_pamh, int _style, char **_resp, const char *_fmt, ...)',
81 define='HAVE_PAM_PROMPT_CONST', headers='stdio.h sys/types.h security/pam_appl.h security/pam_modules.h')
83 conf.CHECK_C_PROTOTYPE(
84 'pam_strerror',
85 'const char *pam_strerror(const pam_handle_t *pamh, int errnum)',
86 define='HAVE_PAM_STRERROR_CONST',
87 headers='''stdio.h sys/types.h security/pam_appl.h
88 security/pam_modules.h''')
90 # Find the absolute path to libpam.so.0
91 libpam_path = find_library(['libpam.so.0', 'libpam.so'], conf.env.STANDARD_LIBPATH)
92 conf.DEFINE('PAM_LIBRARY', ('"%s"' % libpam_path ))
94 # Create full path to pam_wrapper
95 blddir = os.path.realpath(conf.blddir)
96 libpam_wrapper_so_path = blddir + '/default/third_party/pam_wrapper/libpam-wrapper.so'
98 conf.DEFINE('LIBPAM_WRAPPER_SO_PATH', libpam_wrapper_so_path)
99 conf.DEFINE('PAM_WRAPPER', 1)
101 def build(bld):
102 if not bld.CONFIG_SET("USING_SYSTEM_PAM_WRAPPER"):
103 # We need to do it this way or the library wont work.
104 # Using private_library=True will add symbol version which
105 # breaks preloading!
106 bld.SAMBA_LIBRARY('pam_wrapper',
107 source='pam_wrapper.c',
108 deps='dl',
109 install=False,
110 realname='libpam-wrapper.so')
112 bld.SAMBA_SUBSYSTEM('libpamtest',
113 source='libpamtest.c',
114 deps='dl pam')
116 # Can be used to write pam tests in python
117 for env in bld.gen_python_environments():
118 bld.SAMBA_PYTHON('pypamtest',
119 source='python/pypamtest.c',
120 deps='libpamtest',
121 install=False)