#!/usr/bin/python
# Copyright 2011 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.

import re


def LoadGypFile(gyp_filename):
  """Load the contents of a gyp file.

  Arguments:
    filename: filename of a .gyp file.
  Returns:
    Raw dict from .gyp file.
  """
  return eval(open(gyp_filename).read(), {}, {})


def GypTargetSources(gyp_data, target_name, pattern):
  """Extract a sources from a target matching a given pattern.

  Arguments:
    gyp_data: dict previously load by LoadGypFile.
    target_name: target to extract from.
    pattern: re pattern that sources must match.
  Returns:
    A list of strings containing source filenames.
  """
  targets = [target for target in gyp_data['targets']
             if target['target_name'] == target_name]
  # Only one target should have this name.
  assert len(targets) == 1
  desired_target = targets[0]
  # Extract source files that match.
  re_compiled = re.compile(pattern)
  return [source_file for source_file in desired_target['sources']
          if re_compiled.match(source_file)]

#!/usr/bin/python
# Copyright (c) 2011 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.

import re


def LoadGypFile(gyp_filename):
  """Load the contents of a gyp file.

  Arguments:
    filename: filename of a .gyp file.
  Returns:
    Raw dict from .gyp file.
  """
  return eval(open(gyp_filename).read(), {}, {})

def IgnoreVariables(name):
  """E.g. map ppapi_cpp<(nacl_ppapi_library_suffix) to ppapi_cpp."""
  return re.sub('\<\([^)]*\)$', '', name)

def GypTargetSources(gyp_data, target_name, pattern):
  """Extract a sources from a target matching a given pattern.

  Arguments:
    gyp_data: dict previously load by LoadGypFile.
    target_name: target to extract from.
    pattern: re pattern that sources must match.
  Returns:
    A list of strings containing source filenames.
  """
  targets = [target for target in gyp_data['targets']
             if IgnoreVariables(target['target_name']) == target_name]
  # Only one target should have this name.
  assert len(targets) == 1
  desired_target = targets[0]
  # Extract source files that match.
  re_compiled = re.compile(pattern)
  return [source_file for source_file in desired_target['sources']
          if re_compiled.match(source_file)]

Upgrade gyp_extract to handle variable target_names like ppapi_cpp<(nacl_ppapi_library_suffix).