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

{
  'variables': {
    'optimize_target_for_speed': 1,
    'sb_pedantic_warnings': 1,
  },
  'targets': [
    {
      'target_name': 'loader',
      'type': 'static_library',
      'sources': [
        'blob_fetcher.cc',
        'blob_fetcher.h',
        'cache_fetcher.cc',
        'cache_fetcher.h',
        'cors_preflight.cc',
        'cors_preflight.h',
        'cors_preflight_cache.cc',
        'cors_preflight_cache.h',
        'decoder.h',
        'embedded_fetcher.cc',
        'embedded_fetcher.h',
        'error_fetcher.cc',
        'error_fetcher.h',
        'fetcher_factory.cc',
        'fetcher_factory.h',
        'fetcher.cc',
        'fetcher.h',
        'fetcher_cache.cc',
        'fetcher_cache.h',
        'file_fetcher.cc',
        'file_fetcher.h',
        'font/remote_typeface_cache.h',
        'font/typeface_decoder.cc',
        'font/typeface_decoder.h',
        'image/animated_image_tracker.cc',
        'image/animated_image_tracker.h',
        'image/animated_webp_image.cc',
        'image/animated_webp_image.h',
        'image/dummy_gif_image_decoder.cc',
        'image/dummy_gif_image_decoder.h',
        'image/failure_image_decoder.h',
        'image/image_cache.h',
        'image/image_data_decoder.cc',
        'image/image_data_decoder.h',
        'image/image_decoder_starboard.cc',
        'image/image_decoder_starboard.h',
        'image/image_decoder.cc',
        'image/image_decoder.h',
        'image/image_encoder.cc',
        'image/image_encoder.h',
        'image/image.h',
        'image/jpeg_image_decoder.cc',
        'image/jpeg_image_decoder.h',
        'image/lottie_animation.h',
        'image/lottie_animation.cc',
        'image/lottie_animation_decoder.cc',
        'image/lottie_animation_decoder.h',
        'image/png_image_decoder.cc',
        'image/png_image_decoder.h',
        'image/stub_image_decoder.h',
        'image/threaded_image_decoder_proxy.cc',
        'image/threaded_image_decoder_proxy.h',
        'image/webp_image_decoder.cc',
        'image/webp_image_decoder.h',
        'loader_factory.cc',
        'loader_factory.h',
        'loader_types.h',
        'loader.cc',
        'loader.h',
        'mesh/mesh_cache.h',
        'mesh/mesh_decoder.cc',
        'mesh/mesh_decoder.h',
        'mesh/mesh_projection.h',
        'mesh/projection_codec/constants.h',
        'mesh/projection_codec/indexed_vert.cc',
        'mesh/projection_codec/indexed_vert.h',
        'mesh/projection_codec/projection_decoder.cc',
        'mesh/projection_codec/projection_decoder.h',
        'net_fetcher.cc',
        'net_fetcher.h',
        'resource_cache.cc',
        'resource_cache.h',
        'switches.cc',
        'switches.h',
        'sync_loader.cc',
        'sync_loader.h',
        'text_decoder.h',
        'url_fetcher_string_writer.cc',
        'url_fetcher_string_writer.h',
      ],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/configuration/configuration.gyp:configuration',
        '<(DEPTH)/cobalt/csp/csp.gyp:csp',
        '<(DEPTH)/cobalt/loader/origin.gyp:origin',
        '<(DEPTH)/cobalt/network/network.gyp:network',
        '<(DEPTH)/cobalt/render_tree/render_tree.gyp:render_tree',
        '<(DEPTH)/cobalt/renderer/test/png_utils/png_utils.gyp:png_utils',
        '<(DEPTH)/url/url.gyp:url',
        '<(DEPTH)/third_party/libjpeg-turbo/libjpeg.gyp:libjpeg',
        '<(DEPTH)/third_party/libpng/libpng.gyp:libpng',
        '<(DEPTH)/third_party/libwebp/libwebp.gyp:libwebp',
        'embed_resources_as_header_files_loader',
      ],
      'conditions': [
        ['cobalt_config != "gold"', {
          'dependencies': [
            '<(DEPTH)/cobalt/renderer/test/jpeg_utils/jpeg_utils.gyp:jpeg_utils',
          ],
        }],
        ['enable_about_scheme == 1', {
          'defines': [ 'ENABLE_ABOUT_SCHEME' ],
          'sources': [
            'about_fetcher.cc',
            'about_fetcher.h',
          ]
        }],
      ],
    },

    {
      'target_name': 'loader_test',
      'type': '<(gtest_target_type)',
      'sources': [
        'blob_fetcher_test.cc',
        'fetcher_factory_test.cc',
        'fetcher_test.h',
        'file_fetcher_test.cc',
        'font/typeface_decoder_test.cc',
        'image/image_decoder_test.cc',
        'image/image_decoder_unit_test.cc',
        'mesh/mesh_decoder_test.cc',
        'loader_test.cc',
        'text_decoder_test.cc',
      ],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/math/math.gyp:math',
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(DEPTH)/testing/gtest.gyp:gtest',
        '<(DEPTH)/third_party/ots/ots.gyp:ots',
        'loader',
        'loader_copy_test_data',
        '<@(cobalt_platform_dependencies)',
      ],
      'includes': [ '<(DEPTH)/cobalt/test/test.gypi' ],
    },

    {
      'target_name': 'loader_test_deploy',
      'type': 'none',
      'dependencies': [
        'loader_test',
      ],
      'variables': {
        'executable_name': 'loader_test',
      },
      'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ],
    },

    {
      'target_name': 'loader_copy_test_data',
      'type': 'none',
      'variables': {
        'content_test_input_files': [
          '<(DEPTH)/cobalt/loader/testdata/',
        ],
        'content_test_output_subdir': 'cobalt/loader/testdata/',
      },
      'includes': [ '<(DEPTH)/starboard/build/copy_test_data.gypi' ],
    },

    {
      # This target takes all files in the embedded_resources directory (e.g.
      # the splash screen) and embeds them as header files for
      # inclusion into the binary.
      'target_name': 'embed_resources_as_header_files_loader',
      'type': 'none',
      # Because we generate a header, we must set the hard_dependency flag.
      'hard_dependency': 1,
      'variables': {
        'script_path': '<(DEPTH)/cobalt/build/generate_data_header.py',
        'output_path': '<(SHARED_INTERMEDIATE_DIR)/cobalt/loader/embedded_resources.h',
        'input_directory': 'embedded_resources',
      },
      'sources': [
        '<(input_directory)/black_splash_screen.html',
        '<(input_directory)/cobalt_splash_screen.css',
        '<(input_directory)/cobalt_splash_screen.html',
        '<(input_directory)/cobalt_word_logo_356.png',
        '<(input_directory)/dialog.css',
        '<(input_directory)/dialog.js',
        '<(input_directory)/equirectangular_40_40.msh',
        '<(input_directory)/splash_screen.js',
        '<(input_directory)/unable_message.html.template',
        '<(input_directory)/update_message.html.template',
        '<!@pymod_do_main(starboard.build.gyp_functions file_glob <(DEPTH)/cobalt/loader/embedded_resources *.html)',
      ],
      'actions': [
        {
          'action_name': 'embed_resources_as_header_files_loader',
          'inputs': [
            '<(script_path)',
            '<@(_sources)',
          ],
          'outputs': [
            '<(output_path)',
          ],
          'action': ['python2', '<(script_path)', 'LoaderEmbeddedResources', '<(output_path)', '<(input_directory)'],
          'message': 'Embedding layout resources in "<(input_directory)" into header file, "<(output_path)".',
        },
      ],
      'direct_dependent_settings': {
        'include_dirs': [
          '<(SHARED_INTERMEDIATE_DIR)',
        ],
      },
    },
  ],
}
