# 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")

if (is_chrome_branded) {
  if (is_linux && current_cpu == "x86") {
    flapper_version_h_file = "symbols/ppapi/linux/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/linux/libpepflashplayer.so",
      "binaries/ppapi/linux/manifest.json",
    ]
  } else if (is_linux && current_cpu == "x64") {
    flapper_version_h_file = "symbols/ppapi/linux_x64/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/linux_x64/libpepflashplayer.so",
      "binaries/ppapi/linux_x64/manifest.json",
    ]
  } else if (is_mac && current_cpu == "x86") {
    flapper_version_h_file = "symbols/ppapi/mac/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/mac/PepperFlashPlayer.plugin",
      "binaries/ppapi/mac/manifest.json",
    ]
  } else if (is_mac && current_cpu == "x64") {
    flapper_version_h_file = "symbols/ppapi/mac_64/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/mac_64/PepperFlashPlayer.plugin",
      "binaries/ppapi/mac_64/manifest.json",
    ]
  } else if (is_win && current_cpu == "x86") {
    flapper_version_h_file = "symbols/ppapi/win/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/win/pepflashplayer.dll",
      "binaries/ppapi/win/manifest.json",
    ]
  } else if (is_win && current_cpu == "x64") {
    flapper_version_h_file = "symbols/ppapi/win_x64/flapper_version.h"
    flapper_binary_files = [
      "binaries/ppapi/win_x64/pepflashplayer.dll",
      "binaries/ppapi/win_x64/manifest.json",
    ]
  } else {
    flapper_version_h_file = "flapper_version.h"
    flapper_binary_files = []
  }
} else {
  flapper_version_h_file = "flapper_version.h"
  flapper_binary_files = []
}

copy("flapper_version_h") {
  sources = [
    flapper_version_h_file,
  ]
  outputs = [
    "$root_gen_dir/{{source_file_part}}",
  ]
}

if (flapper_binary_files == []) {
  group("flapper_binaries") {
    # NOP
  }
} else {
  copy("flapper_binaries") {
    sources = flapper_binary_files
    outputs = [
      "$root_out_dir/PepperFlash/{{source_file_part}}",
    ]
  }
}
