# 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 && !is_chromeos && 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 && !is_chromeos && 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}}",
    ]
  }
}
