File: properties.py

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (81 lines) | stat: -rw-r--r-- 2,140 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Copyright (c) 2014 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from collections import defaultdict


PROPERTY_REMAP = {
  'CFLAGS': 'cflags',
  'CCFLAGS': 'cflags_c',
  'CXXFLAGS': 'cflags_cc',
  'LDFLAGS': 'ldflags',
  'EXTRA_LIBS': 'deps'
}
COMPILER_FLAGS = ['cflags', 'cflags_c', 'cflags_cc']
LINKER_FLAGS = ['ldfalgs']
OTHER_KEYS = ['defines', 'include_dirs', 'sources']

LIST_TYPES = set(COMPILER_FLAGS + LINKER_FLAGS + OTHER_KEYS)

def ConvertIfSingle(key, values):
  if key in LIST_TYPES:
    return values
  return values[0]


def RemapCompilerProperties(propname, items):
  props = defaultdict(list)
  props[propname] = []
  for item in items:
    if not item:
      continue

    if len(item) > 2:
      if item[:2] == '-D':
        props['defines'].append(item[2:])
        continue
      if item[:2] == '-I':
        props['include_dirs'].append(item[2:])
        continue
    props[propname].append(item)
  return props


def ConvertSconsPropertyToSubTable(key, items):
  # Force all items to be lists
  if items == None:
    items = [None]
  if type(items) is not type([]):
    items = [items]

  # If the name is not in the remap, then keep it
  propname = PROPERTY_REMAP.get(key, key)
  print "KEY=%s, PROPNAME=%s" %(key, propname)

  # If this is a compiler flag, we will need to build a new table
  if propname in COMPILER_FLAGS:
    return RemapCompilerProperties(propname, items)

  if propname == 'deps':
    items = [i for i in items if i not in ['pthread']]

  return { propname: items }


def ParsePropertyTable(table):
  props = defaultdict(list)

  # Take a table of KEY=VALUE pairs
  for key, value in table.iteritems():
    # Convert into a new table with GN style names.  Since a scons properties
    # like CFLAGS can convert into defines, included_dirs, etc...
    sub_table = ConvertSconsPropertyToSubTable(key, value)
    if not sub_table:
      continue
    for k,v in sub_table.iteritems():
      # Now we have a single property name and list of values.
      props[k].extend(v)

  return props