source: vendor/current/buildtools/wafsamba/samba_patterns.py

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 10.0 KB
Line 
1# a waf tool to add extension based build patterns for Samba
2
3import Build
4from wafsamba import samba_version_file
5
6def write_version_header(task):
7 '''print version.h contents'''
8 src = task.inputs[0].srcpath(task.env)
9
10 version = samba_version_file(src, task.env.srcdir, env=task.env, is_install=task.generator.bld.is_install)
11 string = str(version)
12
13 task.outputs[0].write(string)
14 return 0
15
16
17def SAMBA_MKVERSION(bld, target):
18 '''generate the version.h header for Samba'''
19
20 # We only force waf to re-generate this file if we are installing,
21 # because only then is information not included in the deps (the
22 # git revision) included in the version.
23 t = bld.SAMBA_GENERATOR('VERSION',
24 rule=write_version_header,
25 source= 'VERSION',
26 target=target,
27 always=bld.is_install)
28Build.BuildContext.SAMBA_MKVERSION = SAMBA_MKVERSION
29
30
31def write_build_options_header(fp):
32 '''write preamble for build_options.c'''
33 fp.write("/*\n")
34 fp.write(" Unix SMB/CIFS implementation.\n")
35 fp.write(" Build Options for Samba Suite\n")
36 fp.write(" Copyright (C) Vance Lankhaar <vlankhaar@linux.ca> 2003\n")
37 fp.write(" Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001\n")
38 fp.write("\n")
39 fp.write(" This program is free software; you can redistribute it and/or modify\n")
40 fp.write(" it under the terms of the GNU General Public License as published by\n")
41 fp.write(" the Free Software Foundation; either version 3 of the License, or\n")
42 fp.write(" (at your option) any later version.\n")
43 fp.write("\n")
44 fp.write(" This program is distributed in the hope that it will be useful,\n")
45 fp.write(" but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
46 fp.write(" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
47 fp.write(" GNU General Public License for more details.\n")
48 fp.write("\n")
49 fp.write(" You should have received a copy of the GNU General Public License\n")
50 fp.write(" along with this program; if not, see <http://www.gnu.org/licenses/>.\n")
51 fp.write("*/\n")
52 fp.write("\n")
53 fp.write("#include \"includes.h\"\n")
54 fp.write("#include \"build_env.h\"\n")
55 fp.write("#include \"dynconfig/dynconfig.h\"\n")
56 fp.write("#include \"lib/cluster_support.h\"\n")
57
58 fp.write("\n")
59 fp.write("static int output(bool screen, const char *format, ...) PRINTF_ATTRIBUTE(2,3);\n")
60 fp.write("void build_options(bool screen);\n")
61 fp.write("\n")
62 fp.write("\n")
63 fp.write("/****************************************************************************\n")
64 fp.write("helper function for build_options\n")
65 fp.write("****************************************************************************/\n")
66 fp.write("static int output(bool screen, const char *format, ...)\n")
67 fp.write("{\n")
68 fp.write(" char *ptr = NULL;\n")
69 fp.write(" int ret = 0;\n")
70 fp.write(" va_list ap;\n")
71 fp.write(" \n")
72 fp.write(" va_start(ap, format);\n")
73 fp.write(" ret = vasprintf(&ptr,format,ap);\n")
74 fp.write(" va_end(ap);\n")
75 fp.write("\n")
76 fp.write(" if (screen) {\n")
77 fp.write(" d_printf(\"%s\", ptr ? ptr : \"\");\n")
78 fp.write(" } else {\n")
79 fp.write(" DEBUG(4,(\"%s\", ptr ? ptr : \"\"));\n")
80 fp.write(" }\n")
81 fp.write(" \n")
82 fp.write(" SAFE_FREE(ptr);\n")
83 fp.write(" return ret;\n")
84 fp.write("}\n")
85 fp.write("\n")
86 fp.write("/****************************************************************************\n")
87 fp.write("options set at build time for the samba suite\n")
88 fp.write("****************************************************************************/\n")
89 fp.write("void build_options(bool screen)\n")
90 fp.write("{\n")
91 fp.write(" if ((DEBUGLEVEL < 4) && (!screen)) {\n")
92 fp.write(" return;\n")
93 fp.write(" }\n")
94 fp.write("\n")
95 fp.write("#ifdef _BUILD_ENV_H\n")
96 fp.write(" /* Output information about the build environment */\n")
97 fp.write(" output(screen,\"Build environment:\\n\");\n")
98 fp.write(" output(screen,\" Built by: %s@%s\\n\",BUILD_ENV_USER,BUILD_ENV_HOST);\n")
99 fp.write(" output(screen,\" Built on: %s\\n\",BUILD_ENV_DATE);\n")
100 fp.write("\n")
101 fp.write(" output(screen,\" Built using: %s\\n\",BUILD_ENV_COMPILER);\n")
102 fp.write(" output(screen,\" Build host: %s\\n\",BUILD_ENV_UNAME);\n")
103 fp.write(" output(screen,\" SRCDIR: %s\\n\",BUILD_ENV_SRCDIR);\n")
104 fp.write(" output(screen,\" BUILDDIR: %s\\n\",BUILD_ENV_BUILDDIR);\n")
105 fp.write("\n")
106 fp.write("\n")
107 fp.write("#endif\n")
108 fp.write("\n")
109 fp.write(" /* Output various paths to files and directories */\n")
110 fp.write(" output(screen,\"\\nPaths:\\n\");\n")
111 fp.write(" output(screen,\" SBINDIR: %s\\n\", get_dyn_SBINDIR());\n")
112 fp.write(" output(screen,\" BINDIR: %s\\n\", get_dyn_BINDIR());\n")
113 fp.write(" output(screen,\" CONFIGFILE: %s\\n\", get_dyn_CONFIGFILE());\n")
114 fp.write(" output(screen,\" LOGFILEBASE: %s\\n\", get_dyn_LOGFILEBASE());\n")
115 fp.write(" output(screen,\" LMHOSTSFILE: %s\\n\",get_dyn_LMHOSTSFILE());\n")
116 fp.write(" output(screen,\" LIBDIR: %s\\n\",get_dyn_LIBDIR());\n")
117 fp.write(" output(screen,\" MODULESDIR: %s\\n\",get_dyn_MODULESDIR());\n")
118 fp.write(" output(screen,\" SHLIBEXT: %s\\n\",get_dyn_SHLIBEXT());\n")
119 fp.write(" output(screen,\" LOCKDIR: %s\\n\",get_dyn_LOCKDIR());\n")
120 fp.write(" output(screen,\" STATEDIR: %s\\n\",get_dyn_STATEDIR());\n")
121 fp.write(" output(screen,\" CACHEDIR: %s\\n\",get_dyn_CACHEDIR());\n")
122 fp.write(" output(screen,\" PIDDIR: %s\\n\", get_dyn_PIDDIR());\n")
123 fp.write(" output(screen,\" SMB_PASSWD_FILE: %s\\n\",get_dyn_SMB_PASSWD_FILE());\n")
124 fp.write(" output(screen,\" PRIVATE_DIR: %s\\n\",get_dyn_PRIVATE_DIR());\n")
125 fp.write("\n")
126
127def write_build_options_footer(fp):
128 fp.write(" /* Output the sizes of the various cluster features */\n")
129 fp.write(" output(screen, \"\\n%s\", cluster_support_features());\n")
130 fp.write("\n")
131 fp.write(" /* Output the sizes of the various types */\n")
132 fp.write(" output(screen, \"\\nType sizes:\\n\");\n")
133 fp.write(" output(screen, \" sizeof(char): %lu\\n\",(unsigned long)sizeof(char));\n")
134 fp.write(" output(screen, \" sizeof(int): %lu\\n\",(unsigned long)sizeof(int));\n")
135 fp.write(" output(screen, \" sizeof(long): %lu\\n\",(unsigned long)sizeof(long));\n")
136 fp.write(" output(screen, \" sizeof(long long): %lu\\n\",(unsigned long)sizeof(long long));\n")
137 fp.write(" output(screen, \" sizeof(uint8_t): %lu\\n\",(unsigned long)sizeof(uint8_t));\n")
138 fp.write(" output(screen, \" sizeof(uint16_t): %lu\\n\",(unsigned long)sizeof(uint16_t));\n")
139 fp.write(" output(screen, \" sizeof(uint32_t): %lu\\n\",(unsigned long)sizeof(uint32_t));\n")
140 fp.write(" output(screen, \" sizeof(short): %lu\\n\",(unsigned long)sizeof(short));\n")
141 fp.write(" output(screen, \" sizeof(void*): %lu\\n\",(unsigned long)sizeof(void*));\n")
142 fp.write(" output(screen, \" sizeof(size_t): %lu\\n\",(unsigned long)sizeof(size_t));\n")
143 fp.write(" output(screen, \" sizeof(off_t): %lu\\n\",(unsigned long)sizeof(off_t));\n")
144 fp.write(" output(screen, \" sizeof(ino_t): %lu\\n\",(unsigned long)sizeof(ino_t));\n")
145 fp.write(" output(screen, \" sizeof(dev_t): %lu\\n\",(unsigned long)sizeof(dev_t));\n")
146 fp.write("\n")
147 fp.write(" output(screen, \"\\nBuiltin modules:\\n\");\n")
148 fp.write(" output(screen, \" %s\\n\", STRING_STATIC_MODULES);\n")
149 fp.write("}\n")
150
151def write_build_options_section(fp, keys, section):
152 fp.write("\n\t/* Show %s */\n" % section)
153 fp.write(" output(screen, \"\\n%s:\\n\");\n\n" % section)
154
155 for k in sorted(keys):
156 fp.write("#ifdef %s\n" % k)
157 fp.write(" output(screen, \" %s\\n\");\n" % k)
158 fp.write("#endif\n")
159 fp.write("\n")
160
161def write_build_options(task):
162 tbl = task.env['defines']
163 keys_option_with = []
164 keys_option_utmp = []
165 keys_option_have = []
166 keys_header_sys = []
167 keys_header_other = []
168 keys_misc = []
169 for key in tbl:
170 if key.startswith("HAVE_UT_UT_") or key.find("UTMP") >= 0:
171 keys_option_utmp.append(key)
172 elif key.startswith("WITH_"):
173 keys_option_with.append(key)
174 elif key.startswith("HAVE_SYS_"):
175 keys_header_sys.append(key)
176 elif key.startswith("HAVE_"):
177 if key.endswith("_H"):
178 keys_header_other.append(key)
179 else:
180 keys_option_have.append(key)
181 else:
182 keys_misc.append(key)
183
184 tgt = task.outputs[0].bldpath(task.env)
185 f = open(tgt, 'w')
186 write_build_options_header(f)
187 write_build_options_section(f, keys_header_sys, "System Headers")
188 write_build_options_section(f, keys_header_other, "Headers")
189 write_build_options_section(f, keys_option_utmp, "UTMP Options")
190 write_build_options_section(f, keys_option_have, "HAVE_* Defines")
191 write_build_options_section(f, keys_option_with, "--with Options")
192 write_build_options_section(f, keys_misc, "Build Options")
193 write_build_options_footer(f)
194 f.close()
195 return 0
196
197
198def SAMBA_BLDOPTIONS(bld, target):
199 '''generate the bld_options.c for Samba'''
200 t = bld.SAMBA_GENERATOR(target,
201 rule=write_build_options,
202 dep_vars=['defines'],
203 target=target)
204Build.BuildContext.SAMBA_BLDOPTIONS = SAMBA_BLDOPTIONS
Note: See TracBrowser for help on using the repository browser.