~ubuntu-branches/ubuntu/utopic/tdb/utopic-proposed

« back to all changes in this revision

Viewing changes to buildtools/wafsamba/samba_utils.py

  • Committer: Package Import Robot
  • Author(s): Andrew Bartlett
  • Date: 2013-02-12 20:43:55 UTC
  • mfrom: (1.4.6)
  • mto: (1.4.7) (3.3.7 experimental)
  • mto: This revision was merged to the branch mainline in revision 28.
  • Revision ID: package-import@ubuntu.com-20130212204355-6q6jvxshtoie7ex5
ImportĀ upstreamĀ versionĀ 1.2.11

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 
4
4
import Build, os, sys, Options, Utils, Task, re, fnmatch, Logs
5
5
from TaskGen import feature, before
6
 
from Configure import conf
 
6
from Configure import conf, ConfigurationContext
7
7
from Logs import debug
8
8
import shlex
9
9
 
65
65
 
66
66
def needs_private_lib(bld, target):
67
67
    '''return True if a target links to a private library'''
68
 
    for lib in getattr(target, "uselib_local", []):
 
68
    for lib in getattr(target, "final_libs", []):
69
69
        t = bld.name_to_obj(lib, bld.env)
70
70
        if t and getattr(t, 'private_library', False):
71
71
            return True
215
215
        return []
216
216
    if isinstance(str, list):
217
217
        return str
 
218
    if len(str) == 0:
 
219
        return []
218
220
    lst = str.split(delimiter)
219
221
    # the string may have had quotes in it, now we
220
222
    # check if we did have quotes, and use the slower shlex
233
235
        if re.match('\$\{\w+\}', v):
234
236
            vname = v[2:-1]
235
237
            if not vname in env:
236
 
                Logs.error("Failed to find variable %s in %s" % (vname, string))
237
 
                sys.exit(1)
 
238
                raise KeyError("Failed to find variable %s in %s" % (vname, string))
238
239
            v = env[vname]
239
240
        out.append(v)
240
241
    return ''.join(out)
255
256
        @feature('*')
256
257
        @before('exec_rule', 'apply_core', 'collect')
257
258
        def force_previous_groups(self):
258
 
            if getattr(self.bld, 'enforced_group_ordering', False) == True:
 
259
            if getattr(self.bld, 'enforced_group_ordering', False):
259
260
                return
260
261
            self.bld.enforced_group_ordering = True
261
262
 
273
274
                        debug('group: Forcing up to group %s for target %s',
274
275
                              group_name(g), self.name or self.target)
275
276
                        break
276
 
                if stop != None:
 
277
                if stop is not None:
277
278
                    break
278
279
            if stop is None:
279
280
                return
308
309
 
309
310
def mkdir_p(dir):
310
311
    '''like mkdir -p'''
311
 
    if not dir or os.path.isdir(dir):
 
312
    if not dir:
 
313
        return
 
314
    if dir.endswith("/"):
 
315
        mkdir_p(dir[:-1])
 
316
        return
 
317
    if os.path.isdir(dir):
312
318
        return
313
319
    mkdir_p(os.path.dirname(dir))
314
320
    os.mkdir(dir)
468
474
    if not 'WAF_MAKE' in os.environ:
469
475
        return
470
476
    makeflags = os.environ.get('MAKEFLAGS')
 
477
    if makeflags is None:
 
478
        return
471
479
    jobs_set = False
472
480
    # we need to use shlex.split to cope with the escaping of spaces
473
481
    # in makeflags
480
488
            if Logs.verbose > 2:
481
489
                Logs.zones = ['*']
482
490
        elif opt[0].isupper() and opt.find('=') != -1:
 
491
            # this allows us to set waf options on the make command line
 
492
            # for example, if you do "make FOO=blah", then we set the
 
493
            # option 'FOO' in Options.options, to blah. If you look in wafsamba/wscript
 
494
            # you will see that the command line accessible options have their dest=
 
495
            # set to uppercase, to allow for passing of options from make in this way
 
496
            # this is also how "make test TESTS=testpattern" works, and
 
497
            # "make VERBOSE=1" as well as things like "make SYMBOLCHECK=1"
483
498
            loc = opt.find('=')
484
499
            setattr(Options.options, opt[0:loc], opt[loc+1:])
485
500
        elif opt[0] != '-':
487
502
                if v == 'j':
488
503
                    jobs_set = True
489
504
                elif v == 'k':
490
 
                    Options.options.keep = True                
 
505
                    Options.options.keep = True
491
506
        elif opt == '-j':
492
507
            jobs_set = True
493
508
        elif opt == '-k':
494
 
            Options.options.keep = True                
 
509
            Options.options.keep = True
495
510
    if not jobs_set:
496
511
        # default to one job
497
512
        Options.options.jobs = 1
498
 
            
 
513
 
499
514
Build.BuildContext.CHECK_MAKEFLAGS = CHECK_MAKEFLAGS
500
515
 
501
516
option_groups = {}
560
575
    return root1+ext2
561
576
Build.BuildContext.map_shlib_extension = map_shlib_extension
562
577
 
 
578
def apply_pattern(filename, pattern):
 
579
    '''apply a filename pattern to a filename that may have a directory component'''
 
580
    dirname = os.path.dirname(filename)
 
581
    if not dirname:
 
582
        return pattern % filename
 
583
    basename = os.path.basename(filename)
 
584
    return os.path.join(dirname, pattern % basename)
563
585
 
564
586
def make_libname(ctx, name, nolibprefix=False, version=None, python=False):
565
587
    """make a library filename
569
591
              python     : if we should use python module name conventions"""
570
592
 
571
593
    if python:
572
 
        libname = ctx.env.pyext_PATTERN % name
 
594
        libname = apply_pattern(name, ctx.env.pyext_PATTERN)
573
595
    else:
574
 
        libname = ctx.env.shlib_PATTERN % name
 
596
        libname = apply_pattern(name, ctx.env.shlib_PATTERN)
575
597
    if nolibprefix and libname[0:3] == 'lib':
576
598
        libname = libname[3:]
577
599
    if version:
604
626
            sys.exit(1)
605
627
        tgt_list.append(t)
606
628
    return tgt_list
 
629
 
 
630
from Constants import WSCRIPT_FILE
 
631
def PROCESS_SEPARATE_RULE(self, rule):
 
632
    ''' cause waf to process additional script based on `rule'.
 
633
        You should have file named wscript_<stage>_rule in the current directory
 
634
        where stage is either 'configure' or 'build'
 
635
    '''
 
636
    ctxclass = self.__class__.__name__
 
637
    stage = ''
 
638
    if ctxclass == 'ConfigurationContext':
 
639
        stage = 'configure'
 
640
    elif ctxclass == 'BuildContext':
 
641
        stage = 'build'
 
642
    file_path = os.path.join(self.curdir, WSCRIPT_FILE+'_'+stage+'_'+rule)
 
643
    txt = load_file(file_path)
 
644
    if txt:
 
645
        dc = {'ctx': self}
 
646
        if getattr(self.__class__, 'pre_recurse', None):
 
647
            dc = self.pre_recurse(txt, file_path, self.curdir)
 
648
        exec(compile(txt, file_path, 'exec'), dc)
 
649
        if getattr(self.__class__, 'post_recurse', None):
 
650
            dc = self.post_recurse(txt, file_path, self.curdir)
 
651
 
 
652
Build.BuildContext.PROCESS_SEPARATE_RULE = PROCESS_SEPARATE_RULE
 
653
ConfigurationContext.PROCESS_SEPARATE_RULE = PROCESS_SEPARATE_RULE
 
654
 
 
655
def AD_DC_BUILD_IS_ENABLED(self):
 
656
    if self.CONFIG_SET('AD_DC_BUILD_IS_ENABLED'):
 
657
        return True
 
658
    return False
 
659
 
 
660
Build.BuildContext.AD_DC_BUILD_IS_ENABLED = AD_DC_BUILD_IS_ENABLED