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

{
  'variables': {
    'chromium_code': 1,
    'conditions': [
      ['(OS=="linux" or OS=="freebsd" or OS=="solaris") and (embedded==0 or chromecast==1)', {
        'use_alsa%': 1,
      }, {
        'use_alsa%': 0,
      }],
    ],
    # Source files that are used in production code for Android, and in tests
    # for others.
    'usb_midi_sources': [
      'midi_manager_usb.cc',
      'midi_manager_usb.h',
      'usb_midi_descriptor_parser.cc',
      'usb_midi_descriptor_parser.h',
      'usb_midi_device.h',
      'usb_midi_export.h',
      'usb_midi_input_stream.cc',
      'usb_midi_input_stream.h',
      'usb_midi_jack.h',
      'usb_midi_output_stream.cc',
      'usb_midi_output_stream.h',
    ],
  },
  'targets': [
    {
      # GN version: //media/midi
      'target_name': 'midi',
      'type': '<(component)',
      'dependencies': [
        '../../base/base.gyp:base',
      ],
      'defines': [
        'MIDI_IMPLEMENTATION',
      ],
      'include_dirs': [
        '../..',
      ],
      'sources': [
        'midi_export.h',
        'midi_manager.cc',
        'midi_manager.h',
        'midi_manager_android.cc',
        'midi_manager_android.h',
        'midi_manager_mac.cc',
        'midi_manager_mac.h',
        'midi_manager_win.cc',
        'midi_manager_win.h',
        'midi_message_queue.cc',
        'midi_message_queue.h',
        'midi_message_util.cc',
        'midi_message_util.h',
        'midi_port_info.cc',
        'midi_port_info.h',
        'midi_scheduler.cc',
        'midi_scheduler.h',
        'midi_switches.cc',
        'midi_switches.h',
        'usb_midi_device_android.cc',
        'usb_midi_device_android.h',
        'usb_midi_device_factory_android.cc',
        'usb_midi_device_factory_android.h',
      ],
      'direct_dependent_settings': {
        'include_dirs': [
          '../..',
        ],
      },
      'conditions': [
        ['use_alsa==1 and use_udev==1', {
          'dependencies': [
            '../../crypto/crypto.gyp:crypto',
            '../../device/udev_linux/udev.gyp:udev_linux',
          ],
          'defines': [
            'USE_ALSA',
            'USE_UDEV',
          ],
          'sources': [
            'midi_manager_alsa.cc',
            'midi_manager_alsa.h',
          ],
          'link_settings': {
            'libraries': [
              '-lasound',
            ],
          },
        }],
        ['OS=="android"', {
          'dependencies': [
            '../../base/base.gyp:base_i18n',
            'midi_jni_headers',
            'midi_java',
          ],
          'sources': [
            '<@(usb_midi_sources)',
            'midi_device_android.cc',
            'midi_device_android.h',
            'midi_input_port_android.cc',
            'midi_input_port_android.h',
            'midi_jni_registrar.cc',
            'midi_jni_registrar.h',
            'midi_output_port_android.cc',
            'midi_output_port_android.h',
          ],
          'defines': [
            'EXPORT_USB_MIDI',
          ],
        }],
        ['OS=="mac"', {
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework',
              '$(SDKROOT)/System/Library/Frameworks/CoreMIDI.framework',
            ],
          },
        }],
        ['OS=="win"', {
          'dependencies': [
            '../../device/usb/usb.gyp:device_usb',
          ],
        }],
      ],  # conditions
    },
    {
      # GN version: //media/midi:midi_unittests
      'target_name': 'midi_unittests',
      'type': '<(gtest_target_type)',
      'dependencies': [
        'midi',
        '../../base/base.gyp:base',
        '../../base/base.gyp:run_all_unittests',
        '../../testing/gtest.gyp:gtest',
      ],
      'include_dirs': [
        '../..',
      ],
      'sources': [
        'midi_manager_unittest.cc',
        'midi_manager_usb_unittest.cc',
        'midi_message_queue_unittest.cc',
        'midi_message_util_unittest.cc',
        'usb_midi_descriptor_parser_unittest.cc',
        'usb_midi_input_stream_unittest.cc',
        'usb_midi_output_stream_unittest.cc',
      ],
      'conditions': [
        ['use_alsa==1 and use_udev==1', {
          'defines': [
            'USE_ALSA',
            'USE_UDEV',
          ],
          'sources': [
            'midi_manager_alsa_unittest.cc',
          ],
        }],
        ['use_x11==1', {
          'dependencies': [
            '../../tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck',
          ],
        }],
        ['OS=="android"', {
          'dependencies': [
            '../../testing/android/native_test.gyp:native_test_native_code',
          ],
        }, {
          'sources': [
            '<@(usb_midi_sources)',
          ],
        }],
        ['OS=="mac"', {
          'sources': [
            'midi_manager_mac_unittest.cc',
          ],
        }],
      ],
    },
  ],
  'conditions': [
    ['OS=="android"', {
      'targets': [
        {
          # TODO(GN)
          'target_name': 'midi_unittests_apk',
          'type': 'none',
          'dependencies': [
            'midi_java',
            'midi_unittests',
          ],
          'variables': {
            'test_suite_name': 'midi_unittests',
            'isolate_file': 'midi_unittests.isolate',
          },
          'includes': ['../../build/apk_test.gypi'],
        },
        {
          # GN: //media/midi:midi_java
          'target_name': 'midi_java',
          'type': 'none',
          'dependencies': [
            '../../base/base.gyp:base',
          ],
          'variables': {
            'java_in_dir': 'java',
          },
          'includes': ['../../build/java.gypi' ],
        },
        {
          # GN: //media/midi:midi_jni_headers
          'target_name': 'midi_jni_headers',
          'type': 'none',
          'sources': [
            'java/src/org/chromium/media/midi/MidiDeviceAndroid.java',
            'java/src/org/chromium/media/midi/MidiManagerAndroid.java',
            'java/src/org/chromium/media/midi/MidiInputPortAndroid.java',
            'java/src/org/chromium/media/midi/MidiOutputPortAndroid.java',
            'java/src/org/chromium/media/midi/UsbMidiDeviceAndroid.java',
            'java/src/org/chromium/media/midi/UsbMidiDeviceFactoryAndroid.java',
          ],
          'variables': {
            'jni_gen_package': 'media/midi',
          },
          'includes': ['../../build/jni_generator.gypi'],
        },
      ],
    }],
    ['test_isolation_mode != "noop"', {
      'targets': [
        {
          'target_name': 'midi_unittests_run',
          'type': 'none',
          'dependencies': [
            'midi_unittests',
          ],
          'includes': [
            '../../build/isolate.gypi',
          ],
          'sources': [
            'midi_unittests.isolate',
          ],
        },
      ],
    }],
  ],
}
