b9acf1b96ebeca241dcd0bd273177ba4f6c405f8
[vlendec/samba-autobuild/.git] / third_party / pam_wrapper / wscript
1 #!/usr/bin/env python
2
3 import os
4
5 VERSION="1.0.4"
6
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 ''
14
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;
23
24             int main(void) {
25                 return 0;
26             }
27             ''',
28             'HAVE_GCC_THREAD_LOCAL_STORAGE',
29             addmain=False,
30             msg='Checking for thread local storage')
31
32         # check HAVE_DESTRUCTOR_ATTRIBUTE
33         conf.CHECK_CODE('''
34             void test_destructor_attribute(void) __attribute__ ((destructor));
35
36             void test_destructor_attribute(void)
37             {
38                 return;
39             }
40
41             int main(void) {
42                 return 0;
43             }
44             ''',
45             'HAVE_DESTRUCTOR_ATTRIBUTE',
46             addmain=False,
47             msg='Checking for library destructor support')
48
49         # check HAVE_FUNCTION_ATTRIBUTE_FORMAT
50         conf.CHECK_CODE('''
51             void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
52
53             int main(void) {
54                 return 0;
55             }
56             ''',
57             'HAVE_FUNCTION_ATTRIBUTE_FORMAT',
58             addmain=False,
59             msg='Checking for printf format validation support')
60
61         conf.CHECK_HEADERS('security/pam_appl.h')
62         conf.CHECK_HEADERS('security/pam_modules.h')
63         conf.CHECK_HEADERS('security/pam_ext.h')
64
65         conf.CHECK_FUNCS_IN('pam_vsyslog',
66                             'pam',
67                             checklibc=False,
68                             headers='security/pam_ext.h')
69
70         conf.CHECK_FUNCS_IN('pam_syslog',
71                             'pam',
72                             checklibc=False,
73                             headers='security/pam_ext.h')
74
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')
78
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')
82
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''')
89
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 ))
93
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'
97
98     conf.DEFINE('LIBPAM_WRAPPER_SO_PATH', libpam_wrapper_so_path)
99     conf.DEFINE('PAM_WRAPPER', 1)
100
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')
111
112         bld.SAMBA_SUBSYSTEM('libpamtest',
113                             source='libpamtest.c',
114                             deps='dl pam')
115
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)