# Copyright 2015 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.
{
  'type': 'none',

  'variables': {
    'CLOSURE_DIR': '<(DEPTH)/third_party/closure_compiler',
    'EXTERNS_GYP': '<(CLOSURE_DIR)/externs/compiled_resources2.gyp',
    'INTERFACES_GYP': '<(CLOSURE_DIR)/interfaces/compiled_resources2.gyp',

    'default_source_file': '<(_target_name).js',
    'source_files%': ['<(default_source_file)'],

    'includes': ['closure_args.gypi'],
  },

  'sources': ['<@(source_files)'],

  'all_dependent_settings': {
    'sources': ['<@(source_files)'],
  },

  'actions': [
    {
      'action_name': 'compile_js',

      # This action optionally takes these arguments:
      # - sources: a list of all of the source files to be compiled.
      #            If sources is undefined, a default of ['<(_target_name).js']
      #            is created (this probably suffices for many targets).
      # - out_file: a file where the compiled output is written to. The default
      #             is gen/closure/<path to |target_name|>/|target_name|.js.
      # - script_args: additional arguments to pass to compile.py.
      # - closure_args: additional arguments to pass to the Closure compiler.
      # - disabled_closure_args: additional arguments dealing with the
      #                          strictness of compilation; Non-strict
      #                          defaults are provided that can be overriden.
      'variables': {
        'target_path': '<!(python <(CLOSURE_DIR)/build/outputs.py <(default_source_file))',
        'out_file%': '<(SHARED_INTERMEDIATE_DIR)/closure/<(target_path)',
        # TODO(dbeam): remove when no longer used from remoting/.
        'script_args%': [],
        'closure_args%': '<(default_closure_args)',
        'disabled_closure_args%': '<(default_disabled_closure_args)',
      },

      'inputs': [
        '<(CLOSURE_DIR)/compile_js2.gypi',
        '<(CLOSURE_DIR)/compile2.py',
        '<(CLOSURE_DIR)/include_js.gypi',
        '<(CLOSURE_DIR)/processor.py',
        '<(CLOSURE_DIR)/build/outputs.py',
        '<(CLOSURE_DIR)/compiler/compiler.jar',
        '>@(_sources)',
      ],

      'outputs': ['<(out_file)'],

      'action': [
        'python',
        '<(CLOSURE_DIR)/compile2.py',
        '<@(script_args)',
        '>@(_sources)',
        '--out_file', '<(out_file)',
        '--closure_args', '<@(closure_args)', '<@(disabled_closure_args)',
        # '--verbose' # for make glorious log spam of Closure compiler.
      ],

      'message': 'Compiling <(target_path)',
    },
  ],
}
