~ubuntu-branches/ubuntu/vivid/samba/vivid

« back to all changes in this revision

Viewing changes to buildtools/wafsamba/wscript

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2011-12-21 13:18:04 UTC
  • mfrom: (0.39.21 sid)
  • Revision ID: package-import@ubuntu.com-20111221131804-xtlr39wx6njehxxr
Tags: 2:3.6.1-3ubuntu1
* Merge from Debian testing.  Remaining changes:
  + debian/patches/VERSION.patch:
    - set SAMBA_VERSION_SUFFIX to Ubuntu.
  + debian/patches/error-trans.fix-276472:
    - Add the translation of Unix Error code -ENOTSUP to NT Error Code
    - NT_STATUS_NOT_SUPPORTED to prevent the Permission denied error.
  + debian/smb.conf:
    - add "(Samba, Ubuntu)" to server string.
    - comment out the default [homes] share, and add a comment about
      "valid users = %S" to show users how to restrict access to
      \\server\username to only username.
    - Set 'usershare allow guests', so that usershare admins are 
      allowed to create public shares in addition to authenticated
      ones.
    - add map to guest = Bad user, maps bad username to guest access.
  + debian/samba-common.config:
    - Do not change priority to high if dhclient3 is installed.
    - Use priority medium instead of high for the workgroup question.
  + debian/control:
    - Don't build against or suggest ctdb.
    - Add dependency on samba-common-bin to samba.
  + Add ufw integration:
    - Created debian/samba.ufw.profile
    - debian/rules, debian/samba.dirs, debian/samba.files: install
      profile
    - debian/control: have samba suggest ufw
  + Add apport hook:
    - Created debian/source_samba.py.
    - debian/rules, debian/samba.dirs, debian/samba-common-bin.files: install
  + Switch to upstart:
    - Add debian/samba.{nmbd,smbd}.upstart.
  + debian/samba.logrotate, debian/samba-common.dhcp, debian/samba.if-up:
    - Make them upstart compatible
  + debian/samba.postinst: 
    - Avoid scary pdbedit warnings on first import.
  + debian/samba-common.postinst: Add more informative error message for
    the case where smb.conf was manually deleted
  + debian/patches/fix-debuglevel-name-conflict.patch: don't use 'debug_level'
    as a global variable name in an NSS module 
  + Dropped:
    - debian/patches/error-trans.fix-276472
    - debian/patches/fix-debuglevel-name-conflict.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
# this is a base set of waf rules that everything else pulls in first
 
4
 
 
5
import sys, wafsamba, Configure, Logs
 
6
import Options, os, preproc
 
7
from samba_utils import *
 
8
from optparse import SUPPRESS_HELP
 
9
 
 
10
# this forces configure to be re-run if any of the configure
 
11
# sections of the build scripts change. We have to check
 
12
# for this in sys.argv as options have not yet been parsed when
 
13
# we need to set this. This is off by default until some issues
 
14
# are resolved related to WAFCACHE. It will need a lot of testing
 
15
# before it is enabled by default.
 
16
if '--enable-auto-reconfigure' in sys.argv:
 
17
    Configure.autoconfig = True
 
18
 
 
19
def set_options(opt):
 
20
    opt.tool_options('compiler_cc')
 
21
 
 
22
    opt.tool_options('gnu_dirs')
 
23
 
 
24
    gr = opt.option_group('library handling options')
 
25
 
 
26
    gr.add_option('--bundled-libraries',
 
27
                   help=("comma separated list of bundled libraries. May include !LIBNAME to disable bundling a library. Can be 'NONE' or 'ALL' [auto]"),
 
28
                   action="store", dest='BUNDLED_LIBS', default='')
 
29
 
 
30
    extension_default = Options.options['PRIVATE_EXTENSION_DEFAULT']
 
31
    gr.add_option('--private-library-extension',
 
32
                   help=("name extension for private libraries [%s]" % extension_default),
 
33
                   action="store", dest='PRIVATE_EXTENSION', default=extension_default)
 
34
 
 
35
    extension_exception = Options.options['PRIVATE_EXTENSION_EXCEPTION']
 
36
    gr.add_option('--private-extension-exception',
 
37
                   help=("comma separated list of libraries to not apply extension to [%s]" % extension_exception),
 
38
                   action="store", dest='PRIVATE_EXTENSION_EXCEPTION', default=extension_exception)
 
39
 
 
40
    builtin_defauilt = Options.options['BUILTIN_LIBRARIES_DEFAULT']
 
41
    gr.add_option('--builtin-libraries',
 
42
                   help=("command separated list of libraries to build directly into binaries [%s]" % builtin_defauilt),
 
43
                   action="store", dest='BUILTIN_LIBRARIES', default=builtin_defauilt)
 
44
 
 
45
    gr.add_option('--minimum-library-version',
 
46
                   help=("list of minimum system library versions (LIBNAME1:version,LIBNAME2:version)"),
 
47
                   action="store", dest='MINIMUM_LIBRARY_VERSION', default='')
 
48
 
 
49
    gr.add_option('--disable-shared',
 
50
                   help=("Disable all use of shared libraries"),
 
51
                   action="store_true", dest='disable_shared', default=False)
 
52
    gr.add_option('--disable-rpath',
 
53
                   help=("Disable use of rpath for build binaries"),
 
54
                   action="store_true", dest='disable_rpath_build', default=False)
 
55
    gr.add_option('--disable-rpath-install',
 
56
                   help=("Disable use of rpath for library path in installed files"),
 
57
                   action="store_true", dest='disable_rpath_install', default=False)
 
58
    gr.add_option('--disable-rpath-private-install',
 
59
                   help=("Disable use of rpath for private library path in installed files"),
 
60
                   action="store_true", dest='disable_rpath_private_install', default=False)
 
61
    gr.add_option('--nonshared-binary',
 
62
                   help=("Disable use of shared libs for the listed binaries"),
 
63
                   action="store", dest='NONSHARED_BINARIES', default='')
 
64
    gr.add_option('--disable-symbol-versions',
 
65
                   help=("Disable use of the --version-script linker option"),
 
66
                   action="store_true", dest='disable_symbol_versions', default=False)
 
67
 
 
68
    opt.add_option('--with-modulesdir',
 
69
                   help=("modules directory [PREFIX/modules]"),
 
70
                   action="store", dest='MODULESDIR', default='${PREFIX}/modules')
 
71
 
 
72
    opt.add_option('--with-privatelibdir',
 
73
                   help=("private library directory [PREFIX/lib/%s]" % Utils.g_module.APPNAME),
 
74
                   action="store", dest='PRIVATELIBDIR', default=None)
 
75
 
 
76
    gr = opt.option_group('developer options')
 
77
 
 
78
    gr.add_option('-C',
 
79
                   help='enable configure cacheing',
 
80
                   action='store_true', dest='enable_configure_cache')
 
81
    gr.add_option('--enable-auto-reconfigure',
 
82
                   help='enable automatic reconfigure on build',
 
83
                   action='store_true', dest='enable_auto_reconfigure')
 
84
    gr.add_option('--enable-developer',
 
85
                   help=("Turn on developer warnings and debugging"),
 
86
                   action="store_true", dest='developer', default=False)
 
87
    gr.add_option('--picky-developer',
 
88
                   help=("Treat all warnings as errors (enable -Werror)"),
 
89
                   action="store_true", dest='picky_developer', default=False)
 
90
    gr.add_option('--fatal-errors',
 
91
                   help=("Stop compilation on first error (enable -Wfatal-errors)"),
 
92
                   action="store_true", dest='fatal_errors', default=False)
 
93
    gr.add_option('--enable-gccdeps',
 
94
                   help=("Enable use of gcc -MD dependency module"),
 
95
                   action="store_true", dest='enable_gccdeps', default=True)
 
96
    gr.add_option('--timestamp-dependencies',
 
97
                   help=("use file timestamps instead of content for build dependencies (BROKEN)"),
 
98
                   action="store_true", dest='timestamp_dependencies', default=False)
 
99
    gr.add_option('--pedantic',
 
100
                   help=("Enable even more compiler warnings"),
 
101
                   action='store_true', dest='pedantic', default=False)
 
102
    gr.add_option('--git-local-changes',
 
103
                   help=("mark version with + if local git changes"),
 
104
                   action='store_true', dest='GIT_LOCAL_CHANGES', default=False)
 
105
 
 
106
    gr.add_option('--abi-check',
 
107
                   help=("Check ABI signatures for libraries"),
 
108
                   action='store_true', dest='ABI_CHECK', default=False)
 
109
    gr.add_option('--abi-check-disable',
 
110
                   help=("Disable ABI checking (used with --enable-developer)"),
 
111
                   action='store_true', dest='ABI_CHECK_DISABLE', default=False)
 
112
    gr.add_option('--abi-update',
 
113
                   help=("Update ABI signature files for libraries"),
 
114
                   action='store_true', dest='ABI_UPDATE', default=False)
 
115
 
 
116
    gr.add_option('--show-deps',
 
117
                   help=("Show dependency tree for the given target"),
 
118
                   dest='SHOWDEPS', default='')
 
119
 
 
120
    gr.add_option('--symbol-check',
 
121
                  help=("check symbols in object files against project rules"),
 
122
                  action='store_true', dest='SYMBOLCHECK', default=False)
 
123
 
 
124
    gr.add_option('--why-needed',
 
125
                  help=("TARGET:DEPENDENCY check why TARGET needs DEPENDENCY"),
 
126
                  action='store', type='str', dest='WHYNEEDED', default=None)
 
127
 
 
128
    gr.add_option('--show-duplicates',
 
129
                  help=("Show objects which are included in multiple binaries or libraries"),
 
130
                  action='store_true', dest='SHOW_DUPLICATES', default=False)
 
131
 
 
132
    gr = opt.add_option_group('cross compilation options')
 
133
 
 
134
    gr.add_option('--cross-compile',
 
135
                   help=("configure for cross-compilation"),
 
136
                   action='store_true', dest='CROSS_COMPILE', default=False)
 
137
    gr.add_option('--cross-execute',
 
138
                   help=("command prefix to use for cross-execution in configure"),
 
139
                   action='store', dest='CROSS_EXECUTE', default='')
 
140
    gr.add_option('--cross-answers',
 
141
                   help=("answers to cross-compilation configuration (auto modified)"),
 
142
                   action='store', dest='CROSS_ANSWERS', default='')
 
143
    gr.add_option('--hostcc',
 
144
                   help=("set host compiler when cross compiling"),
 
145
                   action='store', dest='HOSTCC', default=False)
 
146
 
 
147
    # we use SUPPRESS_HELP for these, as they are ignored, and are there only
 
148
    # to allow existing RPM spec files to work
 
149
    opt.add_option('--build',
 
150
                   help=SUPPRESS_HELP,
 
151
                   action='store', dest='AUTOCONF_BUILD', default='')
 
152
    opt.add_option('--host',
 
153
                   help=SUPPRESS_HELP,
 
154
                   action='store', dest='AUTOCONF_HOST', default='')
 
155
    opt.add_option('--program-prefix',
 
156
                   help=SUPPRESS_HELP,
 
157
                   action='store', dest='AUTOCONF_PROGRAM_PREFIX', default='')
 
158
    opt.add_option('--disable-dependency-tracking',
 
159
                   help=SUPPRESS_HELP,
 
160
                   action='store_true', dest='AUTOCONF_DISABLE_DEPENDENCY_TRACKING', default=False)
 
161
 
 
162
    gr = opt.option_group('dist options')
 
163
    gr.add_option('--sign-release',
 
164
                   help='sign the release tarball created by waf dist',
 
165
                   action='store_true', dest='SIGN_RELEASE')
 
166
    gr.add_option('--tag',
 
167
                   help='tag release in git at the same time',
 
168
                   type='string', action='store', dest='TAG_RELEASE')
 
169
 
 
170
 
 
171
@wafsamba.runonce
 
172
def configure(conf):
 
173
    conf.env.hlist = []
 
174
    conf.env.srcdir = conf.srcdir
 
175
 
 
176
    if Options.options.timestamp_dependencies:
 
177
        conf.ENABLE_TIMESTAMP_DEPENDENCIES()
 
178
 
 
179
    conf.SETUP_CONFIGURE_CACHE(Options.options.enable_configure_cache)
 
180
 
 
181
    # load our local waf extensions
 
182
    conf.check_tool('gnu_dirs')
 
183
    conf.check_tool('wafsamba')
 
184
 
 
185
    conf.CHECK_CC_ENV()
 
186
 
 
187
    conf.check_tool('compiler_cc')
 
188
 
 
189
    # we need git for 'waf dist'
 
190
    conf.find_program('git', var='GIT')
 
191
 
 
192
    # older gcc versions (< 4.4) does not work with gccdeps, so we have to see if the .d file is generated
 
193
    if Options.options.enable_gccdeps:
 
194
        from TaskGen import feature, after
 
195
        @feature('testd')
 
196
        @after('apply_core')
 
197
        def check_d(self):
 
198
            tsk = self.compiled_tasks[0]
 
199
            tsk.outputs.append(tsk.outputs[0].change_ext('.d'))
 
200
 
 
201
        import Task
 
202
        cc = Task.TaskBase.classes['cc']
 
203
        oldmeth = cc.run
 
204
 
 
205
        cc.run = Task.compile_fun_noshell('cc', '${CC} ${CCFLAGS} ${CPPFLAGS} ${_CCINCFLAGS} ${_CCDEFFLAGS} ${CC_SRC_F}${SRC} ${CC_TGT_F}${TGT[0].abspath(env)}')[0]
 
206
        try:
 
207
            try:
 
208
                conf.check(features='cc testd', fragment='int main() {return 0;}\n', ccflags=['-MD'], mandatory=True, msg='Check for -MD')
 
209
            except:
 
210
                pass
 
211
            else:
 
212
                conf.check_tool('gccdeps', tooldir=conf.srcdir + "/buildtools/wafsamba")
 
213
        finally:
 
214
            cc.run = oldmeth
 
215
 
 
216
    # make the install paths available in environment
 
217
    conf.env.LIBDIR = Options.options.LIBDIR or '${PREFIX}/lib'
 
218
    conf.env.BINDIR = Options.options.BINDIR or '${PREFIX}/bin'
 
219
    conf.env.SBINDIR = Options.options.SBINDIR or '${PREFIX}/sbin'
 
220
    conf.env.MODULESDIR = Options.options.MODULESDIR
 
221
    conf.env.PRIVATELIBDIR = Options.options.PRIVATELIBDIR
 
222
    conf.env.BUNDLED_LIBS = Options.options.BUNDLED_LIBS.split(',')
 
223
    conf.env.BUILTIN_LIBRARIES = Options.options.BUILTIN_LIBRARIES.split(',')
 
224
    conf.env.DISABLE_SHARED = Options.options.disable_shared
 
225
    conf.env.NONSHARED_BINARIES = Options.options.NONSHARED_BINARIES.split(',')
 
226
 
 
227
    conf.env.PRIVATE_EXTENSION = Options.options.PRIVATE_EXTENSION
 
228
    conf.env.PRIVATE_EXTENSION_EXCEPTION = Options.options.PRIVATE_EXTENSION_EXCEPTION.split(',')
 
229
 
 
230
    conf.env.CROSS_COMPILE = Options.options.CROSS_COMPILE
 
231
    conf.env.CROSS_EXECUTE = Options.options.CROSS_EXECUTE
 
232
    conf.env.CROSS_ANSWERS = Options.options.CROSS_ANSWERS
 
233
    conf.env.HOSTCC        = Options.options.HOSTCC
 
234
 
 
235
    conf.env.AUTOCONF_BUILD = Options.options.AUTOCONF_BUILD
 
236
    conf.env.AUTOCONF_HOST  = Options.options.AUTOCONF_HOST
 
237
    conf.env.AUTOCONF_PROGRAM_PREFIX = Options.options.AUTOCONF_PROGRAM_PREFIX
 
238
 
 
239
    if (conf.env.AUTOCONF_HOST and
 
240
        conf.env.AUTOCONF_BUILD and
 
241
        conf.env.AUTOCONF_BUILD != conf.env.AUTOCONF_HOST):
 
242
        Logs.error('ERROR: Mismatch between --build and --host. Please use --cross-compile instead')
 
243
        sys.exit(1)
 
244
    if conf.env.AUTOCONF_PROGRAM_PREFIX:
 
245
        Logs.error('ERROR: --program-prefix not supported')
 
246
        sys.exit(1)
 
247
 
 
248
    # enable ABI checking for developers
 
249
    conf.env.ABI_CHECK = Options.options.ABI_CHECK or Options.options.developer
 
250
    if Options.options.ABI_CHECK_DISABLE:
 
251
        conf.env.ABI_CHECK = False
 
252
    try:
 
253
        conf.find_program('gdb', mandatory=True)
 
254
    except:
 
255
        conf.env.ABI_CHECK = False
 
256
 
 
257
    conf.env.GIT_LOCAL_CHANGES = Options.options.GIT_LOCAL_CHANGES
 
258
 
 
259
    conf.CHECK_COMMAND(['uname', '-a'],
 
260
                       msg='Checking build system',
 
261
                       define='BUILD_SYSTEM',
 
262
                       on_target=False)
 
263
    conf.CHECK_UNAME()
 
264
 
 
265
    # see if we can compile and run a simple C program
 
266
    conf.CHECK_CODE('printf("hello world")',
 
267
                    define='HAVE_SIMPLE_C_PROG',
 
268
                    mandatory=True,
 
269
                    execute=True,
 
270
                    headers='stdio.h',
 
271
                    msg='Checking simple C program')
 
272
 
 
273
    # see if we can build shared libs
 
274
    if not conf.CHECK_LIBRARY_SUPPORT():
 
275
        conf.env.DISABLE_SHARED = True
 
276
 
 
277
    # check for rpath
 
278
    if not conf.env.DISABLE_SHARED and conf.CHECK_LIBRARY_SUPPORT(rpath=True):
 
279
        support_rpath = True
 
280
        conf.env.RPATH_ON_BUILD   = not Options.options.disable_rpath_build
 
281
        conf.env.RPATH_ON_INSTALL = (conf.env.RPATH_ON_BUILD and
 
282
                                     not Options.options.disable_rpath_install)
 
283
        if not conf.env.PRIVATELIBDIR:
 
284
            conf.env.PRIVATELIBDIR = '%s/%s' % (conf.env.LIBDIR, Utils.g_module.APPNAME)
 
285
        conf.env.RPATH_ON_INSTALL_PRIVATE = (
 
286
            not Options.options.disable_rpath_private_install)
 
287
    else:
 
288
        support_rpath = False
 
289
        conf.env.RPATH_ON_INSTALL = False
 
290
        conf.env.RPATH_ON_BUILD   = False
 
291
        conf.env.RPATH_ON_INSTALL_PRIVATE = False
 
292
        if not conf.env.PRIVATELIBDIR:
 
293
            # rpath is not possible so there is no sense in having a
 
294
            # private library directory by default.
 
295
            # the user can of course always override it.
 
296
            conf.env.PRIVATELIBDIR = conf.env.LIBDIR
 
297
 
 
298
    if (not conf.env.DISABLE_SHARED and
 
299
        not Options.options.disable_symbol_versions and
 
300
        conf.CHECK_LIBRARY_SUPPORT(rpath=support_rpath,
 
301
                                   version_script=True,
 
302
                                   msg='-Wl,--version-script support')):
 
303
        conf.env.HAVE_LD_VERSION_SCRIPT = True
 
304
    else:
 
305
        conf.env.HAVE_LD_VERSION_SCRIPT = False
 
306
 
 
307
    if sys.platform == "aix5":
 
308
        conf.DEFINE('_ALL_SOURCE', 1, add_to_cflags=True)
 
309
        # Might not be needed if ALL_SOURCE is defined
 
310
        # conf.DEFINE('_XOPEN_SOURCE', 600, add_to_cflags=True)
 
311
 
 
312
    # we should use the PIC options in waf instead
 
313
    # Some compilo didn't support -fPIC but just print a warning
 
314
    if conf.env['COMPILER_CC'] == "suncc":
 
315
        conf.ADD_CFLAGS('-KPIC', testflags=True)
 
316
        # we really want define here as we need to have this
 
317
        # define even during the tests otherwise detection of
 
318
        # boolean is broken
 
319
        conf.DEFINE('_STDC_C99', 1, add_to_cflags=True)
 
320
        conf.DEFINE('_XPG6', 1, add_to_cflags=True)
 
321
    else:
 
322
        conf.ADD_CFLAGS('-fPIC', testflags=True)
 
323
 
 
324
    # On Solaris 8 with suncc (at least) the flags for the linker to define the name of the
 
325
    # library are not always working (if the command line is very very long and with a lot
 
326
    # files)
 
327
 
 
328
    if conf.env['COMPILER_CC'] == "suncc":
 
329
        save = conf.env['SONAME_ST']
 
330
        conf.env['SONAME_ST'] = '-Wl,-h,%s'
 
331
        if not conf.CHECK_SHLIB_INTRASINC_NAME_FLAGS("Checking if flags %s are ok" % conf.env['SONAME_ST']):
 
332
            conf.env['SONAME_ST'] = save
 
333
 
 
334
    conf.CHECK_INLINE()
 
335
 
 
336
    # check for pkgconfig
 
337
    conf.check_cfg(atleast_pkgconfig_version='0.0.0')
 
338
 
 
339
    conf.DEFINE('_GNU_SOURCE', 1, add_to_cflags=True)
 
340
    conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1, add_to_cflags=True)
 
341
 
 
342
    # get the base headers we'll use for the rest of the tests
 
343
    conf.CHECK_HEADERS('stdio.h sys/types.h sys/stat.h stdlib.h stddef.h memory.h string.h',
 
344
                       add_headers=True)
 
345
    conf.CHECK_HEADERS('strings.h inttypes.h stdint.h unistd.h minix/config.h', add_headers=True)
 
346
    conf.CHECK_HEADERS('ctype.h standards.h stdbool.h stdint.h stdarg.h vararg.h', add_headers=True)
 
347
    conf.CHECK_HEADERS('limits.h assert.h')
 
348
 
 
349
    # see if we need special largefile flags
 
350
    conf.CHECK_LARGEFILE()
 
351
 
 
352
    if 'HAVE_STDDEF_H' in conf.env and 'HAVE_STDLIB_H' in conf.env:
 
353
        conf.DEFINE('STDC_HEADERS', 1)
 
354
 
 
355
    conf.CHECK_HEADERS('sys/time.h time.h', together=True)
 
356
 
 
357
    if 'HAVE_SYS_TIME_H' in conf.env and 'HAVE_TIME_H' in conf.env:
 
358
        conf.DEFINE('TIME_WITH_SYS_TIME', 1)
 
359
 
 
360
    # cope with different extensions for libraries
 
361
    (root, ext) = os.path.splitext(conf.env.shlib_PATTERN)
 
362
    if ext[0] == '.':
 
363
        conf.define('SHLIBEXT', ext[1:], quote=True)
 
364
    else:
 
365
        conf.define('SHLIBEXT', "so", quote=True)
 
366
 
 
367
    conf.CHECK_CODE('long one = 1; return ((char *)(&one))[0]',
 
368
                    execute=True,
 
369
                    define='WORDS_BIGENDIAN')
 
370
 
 
371
    # check if signal() takes a void function
 
372
    if conf.CHECK_CODE('return *(signal (0, 0)) (0) == 1',
 
373
                       define='RETSIGTYPE_INT',
 
374
                       execute=False,
 
375
                       headers='signal.h',
 
376
                       msg='Checking if signal handlers return int'):
 
377
        conf.DEFINE('RETSIGTYPE', 'int')
 
378
    else:
 
379
        conf.DEFINE('RETSIGTYPE', 'void')
 
380
 
 
381
    conf.CHECK_VARIABLE('__FUNCTION__', define='HAVE_FUNCTION_MACRO')
 
382
 
 
383
    conf.CHECK_CODE('va_list ap1,ap2; va_copy(ap1,ap2)',
 
384
                    define="HAVE_VA_COPY",
 
385
                    msg="Checking for va_copy")
 
386
 
 
387
    conf.CHECK_CODE('''
 
388
                    #define eprintf(...) fprintf(stderr, __VA_ARGS__)
 
389
                    eprintf("bla", "bar")
 
390
                    ''', define='HAVE__VA_ARGS__MACRO')
 
391
 
 
392
    conf.SAMBA_BUILD_ENV()
 
393
 
 
394
 
 
395
def build(bld):
 
396
    # give a more useful message if the source directory has moved
 
397
    relpath = os_path_relpath(bld.curdir, bld.srcnode.abspath())
 
398
    if relpath.find('../') != -1:
 
399
        Logs.error('bld.curdir %s is not a child of %s' % (bld.curdir, bld.srcnode.abspath()))
 
400
        raise Utils.WafError('''The top source directory has moved. Please run distclean and reconfigure''')
 
401
 
 
402
    bld.CHECK_MAKEFLAGS()
 
403
    bld.SETUP_BUILD_GROUPS()
 
404
    bld.ENFORCE_GROUP_ORDERING()
 
405
    bld.CHECK_PROJECT_RULES()