summaryrefslogtreecommitdiffstats
path: root/tools/data_pack/scons.py
blob: 6bd2d31392b6bb461c4d7da815c6ddafda011ebc (plain)
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
#!/usr/bin/python
#
# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import sys

def _SConsNodeToFile(file_node):
  '''Convert a scons file Node object to a path on disk.'''
  return str(file_node.rfile())


def _Build(target, source, env):
  '''Run the repack script.'''
  data_pack_root_dir = env.subst('$CHROME_SRC_DIR/tools/data_pack')
  sys.path.append(data_pack_root_dir)
  import repack
  sources = [_SConsNodeToFile(s) for s in source]
  repack.RePack(_SConsNodeToFile(target[0]), sources)


def _BuildStr(targets, sources, env):
  '''This message gets printed each time the builder runs.'''
  return "Repacking data files into %s" % str(targets[0].rfile())


def _Scanner(file_node, env, path):
  '''Repack files if repack.py or data_pack.py have changed.'''
  data_pack_root_dir = env.subst('$CHROME_SRC_DIR/tools/data_pack')

  files = []
  for f in ('repack.py', 'data_pack.py'):
    files.append(os.path.join(data_pack_root_dir, f))
  return files


#############################################################################
## SCons Tool api methods below.
def generate(env):
  action = env.Action(_Build, _BuildStr)
  scanner = env.Scanner(function=_Scanner, skeys=['.pak'])

  builder = env.Builder(action=action,
                        source_scanner=scanner,
                        src_suffix='.pak')

  # add our builder and scanner to the environment
  env.Append(BUILDERS = {'Repack': builder})


# Function name is mandated by newer versions of SCons.
def exists(env):
  return 1