# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

if (is_win) {
  baseclasses_dir = "Samples/multimedia/directshow/baseclasses"

  config("winsdk_samples_config") {
    if (is_win && is_clang) {
      cflags = [
        "-imsvc",
        rebase_path(baseclasses_dir, root_build_dir)
      ]
    } else {
      include_dirs = [ baseclasses_dir ]
    }
  }

  static_library("winsdk_samples") {
    sources = [
      "$baseclasses_dir/amextra.cpp",
      "$baseclasses_dir/amextra.h",
      "$baseclasses_dir/amfilter.cpp",
      "$baseclasses_dir/amfilter.h",
      "$baseclasses_dir/amvideo.cpp",
      "$baseclasses_dir/cache.h",
      "$baseclasses_dir/combase.cpp",
      "$baseclasses_dir/combase.h",
      "$baseclasses_dir/cprop.cpp",
      "$baseclasses_dir/cprop.h",
      "$baseclasses_dir/ctlutil.cpp",
      "$baseclasses_dir/ctlutil.h",
      "$baseclasses_dir/ddmm.cpp",
      "$baseclasses_dir/ddmm.h",
      "$baseclasses_dir/dllentry.cpp",
      "$baseclasses_dir/dllsetup.cpp",
      "$baseclasses_dir/dllsetup.h",
      "$baseclasses_dir/fourcc.h",
      "$baseclasses_dir/measure.h",
      "$baseclasses_dir/msgthrd.h",
      "$baseclasses_dir/mtype.cpp",
      "$baseclasses_dir/mtype.h",
      "$baseclasses_dir/outputq.cpp",
      "$baseclasses_dir/outputq.h",
      "$baseclasses_dir/pstream.cpp",
      "$baseclasses_dir/pstream.h",
      "$baseclasses_dir/pullpin.cpp",
      "$baseclasses_dir/pullpin.h",
      "$baseclasses_dir/refclock.cpp",
      "$baseclasses_dir/refclock.h",
      "$baseclasses_dir/reftime.h",
      "$baseclasses_dir/renbase.cpp",
      "$baseclasses_dir/renbase.h",
      "$baseclasses_dir/schedule.cpp",
      "$baseclasses_dir/seekpt.cpp",
      "$baseclasses_dir/seekpt.h",
      "$baseclasses_dir/source.cpp",
      "$baseclasses_dir/source.h",
      "$baseclasses_dir/streams.h",
      "$baseclasses_dir/strmctl.cpp",
      "$baseclasses_dir/strmctl.h",
      "$baseclasses_dir/sysclock.cpp",
      "$baseclasses_dir/sysclock.h",
      "$baseclasses_dir/transfrm.cpp",
      "$baseclasses_dir/transfrm.h",
      "$baseclasses_dir/transip.cpp",
      "$baseclasses_dir/transip.h",
      "$baseclasses_dir/videoctl.cpp",
      "$baseclasses_dir/videoctl.h",
      "$baseclasses_dir/vtrans.cpp",
      "$baseclasses_dir/vtrans.h",
      "$baseclasses_dir/winctrl.cpp",
      "$baseclasses_dir/winctrl.h",
      "$baseclasses_dir/winutil.cpp",
      "$baseclasses_dir/winutil.h",
      "$baseclasses_dir/wxdebug.cpp",
      "$baseclasses_dir/wxdebug.h",
      "$baseclasses_dir/wxlist.cpp",
      "$baseclasses_dir/wxlist.h",
      "$baseclasses_dir/wxutil.cpp",
      "$baseclasses_dir/wxutil.h",
    ]

    public_configs = [ ":winsdk_samples_config" ]

    configs -= [
      "//build/config/compiler:chromium_code",
      "//build/config/win:nominmax",
    ]
    configs += [
      "//build/config/compiler:no_chromium_code",
    ]
  }
}
