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

import("//build/config/chrome_build.gni")
import("//build/config/features.gni")
import("//chrome/process_version_rc_template.gni")
import("//media/cdm/ppapi/cdm_paths.gni")
import("//media/cdm/ppapi/ppapi_cdm_adapter.gni")
import("//ppapi/features/features.gni")
import("//third_party/widevine/cdm/widevine.gni")

widevine_arch = current_cpu
if (widevine_arch == "x86") {
  widevine_arch = "ia32"
}

widevine_cdm_binary_files = []
widevine_cdm_manifest_file = []

if (is_android) {
  # Always available on Android regardless of branding.
  widevine_cdm_version_h_file = "android/widevine_cdm_version.h"
} else if (is_chrome_branded) {
  if (is_chromeos) {
    widevine_cdm_version_h_file =
        "chromeos/$widevine_arch/widevine_cdm_version.h"
    widevine_cdm_binary_files = [ "chromeos/$widevine_arch/libwidevinecdm.so" ]
  } else if (is_linux) {
    widevine_cdm_version_h_file = "linux/$widevine_arch/widevine_cdm_version.h"
    widevine_cdm_binary_files = [ "linux/$widevine_arch/libwidevinecdm.so" ]
  } else if (is_win) {
    widevine_cdm_version_h_file = "win/$widevine_arch/widevine_cdm_version.h"
    widevine_cdm_binary_files = [
      "win/$widevine_arch/widevinecdm.dll",
      "win/$widevine_arch/widevinecdm.dll.lib",
    ]
    widevine_cdm_manifest_file = [ "win/$widevine_arch/manifest.json" ]
  } else if (is_mac) {
    widevine_cdm_version_h_file = "mac/$widevine_arch/widevine_cdm_version.h"
    widevine_cdm_binary_files = [ "mac/$widevine_arch/libwidevinecdm.dylib" ]
    widevine_cdm_manifest_file = [ "mac/$widevine_arch/manifest.json" ]
  } else {
    # Other platforms, use the default one.
    widevine_cdm_version_h_file = "widevine_cdm_version.h"
  }
} else if (enable_widevine) {
  widevine_cdm_version_h_file = "stub/widevine_cdm_version.h"
  widevine_cdm_manifest_file = [ "stub/manifest.json" ]
} else {
  # No branding, use the default one.
  widevine_cdm_version_h_file = "widevine_cdm_version.h"
}

copy("version_h") {
  visibility = [ ":*" ]  # Depend on ":headers" instead.
  sources = [
    widevine_cdm_version_h_file,
  ]

  # TODO(brettw) this should go into target_out_dir and callers should include
  # it from there. This requires, however, renaming the default
  # widevine_cdm_version.h in this directory to avoid conflicts.
  outputs = [
    "$root_gen_dir/widevine_cdm_version.h",
  ]
}

source_set("headers") {
  public = [
    "widevine_cdm_common.h",
  ]

  public_deps = [
    ":version_h",  # Forward permission to use version header.
    "//ppapi/features",
  ]
}

if (widevine_cdm_binary_files != []) {
  copy("widevinecdm") {
    sources = widevine_cdm_binary_files
    outputs = [
      "$root_out_dir/$widevine_cdm_path/{{source_file_part}}",
    ]

    # TODO(jrummell)
    # 'COPY_PHASE_STRIP': 'NO',
  }
} else if (enable_widevine && enable_pepper_cdms) {
  assert(!is_chrome_branded, "Branded Chrome should have binary files to copy.")
  assert(!is_android, "Android should not have enable_pepper_cdms.")
  shared_library("widevinecdm") {
    output_dir = "$root_out_dir/$widevine_cdm_path"
    sources = [
      "//media/cdm/stub/stub_cdm.cc",
      "//media/cdm/stub/stub_cdm.h",
    ]

    defines = [ "CDM_IMPLEMENTATION" ]

    deps = [
      ":version_h",
      "//base",
      "//build/config/sanitizers:deps",
    ]

    if (is_mac) {
      ldflags = [
        # Not to strip important symbols by -Wl,-dead_strip.
        "-Wl,-exported_symbol,_PPP_GetInterface",
        "-Wl,-exported_symbol,_PPP_InitializeModule",
        "-Wl,-exported_symbol,_PPP_ShutdownModule",
      ]
      #TODO(jrummell) Mac: 'DYLIB_INSTALL_NAME_BASE': '@loader_path',
    } else if (is_posix && !is_mac) {
      cflags = [ "-fvisibility=hidden" ]
    }
  }
} else {
  group("widevinecdm") {
    # NOP
  }
}

if (widevine_cdm_manifest_file != []) {
  copy("widevine_cdm_manifest") {
    sources = widevine_cdm_manifest_file
    outputs = [
      "$root_out_dir/WidevineCdm/{{source_file_part}}",
    ]
  }
} else {
  group("widevine_cdm_manifest") {
    # NOP
  }
}

if ((is_chrome_branded || enable_widevine) && enable_pepper_cdms) {
  # Produce and compile the .rc file.
  process_version_rc_template("widevinecdmadapter_resources") {
    visibility = [ ":*" ]
    sources = [
      "BRANDING",
      "widevinecdmadapter.ver",
    ]
    output = "$target_gen_dir/widevinecdmadapter_version.rc"
  }

  ppapi_cdm_adapter("widevinecdmadapter") {
    defines = []
    output_dir = "$root_out_dir/$widevine_cdm_path"
    deps = [
      ":version_h",
      ":widevinecdm",
      ":widevinecdmadapter_resources",
    ]
    data_deps = [
      ":widevine_cdm_manifest",
      ":widevinecdm",
    ]

    if (is_linux) {
      ldflags =
          [ rebase_path("$root_out_dir/$widevine_cdm_path/libwidevinecdm.so",
                        root_build_dir) ]
    } else if (is_win) {
      ldflags =
          [ rebase_path("$root_out_dir/$widevine_cdm_path/widevinecdm.dll.lib",
                        root_build_dir) ]
    } else if (is_mac) {
      ldflags =
          [ rebase_path("$root_out_dir/$widevine_cdm_path/libwidevinecdm.dylib",
                        root_build_dir) ]
    }
  }
} else {
  # Placeholder when we're not compiling the adapter.
  group("widevinecdmadapter") {
  }
}

# This target exists for tests to depend on that pulls in a runtime dependency
# on the license server.
source_set("widevine_test_license_server") {
  if (is_chrome_branded && is_linux) {
    deps = [
      # TODO(jrummell)
      # This target should be removed and targets should have data_deps on this target:
      #"//third_party/widevine/test/license_server/license_server.gyp:test_license_server"
    ]
  }
}
