#!/usr/bin/env python
# Copyright 2017 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
'''Gyp helper to find private files if present.

The first argument is the result of "<(DEPTH)" from gyp, the second argument
is the path/pattern from <(DEPTH)/starboard/private/. Patterns should be given
using Unix path style '/'.

python find_private_files.py ".." "*.h"
Would return files matching ../starboard/private/*.h if any exist.

python find_private_files.py ".." "nplb/*_test.cc"
Would return files matching ../starboard/private/nplb/*_test.cc if any exist.

NOTE: gyp errors often produce no warnings. Be sure to structure usages of this
script by gyp files like the line below, where the'<!@' is a gyp command
expansion that will process the results into a list of returned file paths.
Quoting arguments protects against wildcard expansion and other undesirable
gyp/shell behavior.
'<!@(python "<(DEPTH)/starboard/tools/find_private_files.py" "<(DEPTH)" "*.h")',
'''

import glob
import os
import sys

_PRIVATE_DIR_PATH = 'starboard/private'

def find_private_files(depth, target_pattern):
  '''Assembles search glob and finds files matching the target pattern.

  Args:
    depth: The string result of "<(DEPTH)"" from gyp.
    target_pattern: The string path/pattern from <(DEPTH)/starboard/private/.
  '''
  path = os.path.normpath(os.path.join(
      depth, _PRIVATE_DIR_PATH, target_pattern))
  for f in glob.iglob(path):
    # Switch to Unix style '/' for gyp.
    print f.replace('\\', '/')


if __name__ == '__main__':
  depth_arg = sys.argv[1]
  target_pattern_arg = sys.argv[2]

  find_private_files(depth_arg, target_pattern_arg)

  sys.exit(0)
