# Copyright 2015 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.

{
  'targets': [
    {
      # This target provides (not production suitable) utility code for decoding
      # and encoding PNG files.  This is useful for sandboxes and tests for
      # quickly and easily loading in PNG files or saving PNG files as output.
      'target_name': 'png_utils',
      'type': 'static_library',
      'sources': [
        'png_decode.cc',
        'png_decode.h',
        'png_encode.cc',
        'png_encode.h',
      ],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/render_tree/render_tree.gyp:render_tree',
        '<(DEPTH)/third_party/libpng/libpng.gyp:libpng',
      ],
    },

    {
      'target_name': 'png_utils_test',
      'type': '<(gtest_target_type)',
      'sources': [
        'png_decode_test.cc',
      ],
      'dependencies': [
        '<(DEPTH)/base/base.gyp:run_all_unittests',
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(DEPTH)/testing/gtest.gyp:gtest',
        'png_utils',
      ],
      'actions': [
        {
          'action_name': 'copy_data',
          'variables': {
            'input_files': [
              'png_premultiplied_alpha_test_image.png',
            ],
            'output_dir': 'test/png_utils',
          },
          'includes': ['../../../build/copy_test_data.gypi'],
        },
      ],
    },
    {
      'target_name': 'png_utils_benchmark',
      'type': '<(final_executable_type)',
      'sources': [
        'png_utils_benchmark.cc',
      ],
      'dependencies': [
        '<(DEPTH)/base/base.gyp:base',
        '<(DEPTH)/cobalt/trace_event/trace_event.gyp:run_all_benchmarks',
        'png_utils',
      ],
      'actions': [
        {
          'action_name': 'copy_data',
          'variables': {
            'input_files': [
              'png_benchmark_image.png',
            ],
            'output_dir': 'test/png_utils',
          },
          'includes': ['../../../build/copy_test_data.gypi'],
        },
      ],
    },
  ],
}
