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

if (is_mac) {
  import("//build/config/mac/rules.gni")
}

# Declares a PPAPI example target of the correct type for the current platform
# and with the right linker flags.
template("ppapi_example") {
  if (!is_mac) {
    shared_library(target_name) {
      testonly = true

      if (defined(invoker.output_name)) {
        output_name = invoker.output_name
      }

      sources = invoker.sources
      deps = invoker.deps
    }
  } else {
    mac_plugin_bundle(target_name) {
      testonly = true

      if (defined(invoker.output_name)) {
        output_name = invoker.output_name
      }

      sources = invoker.sources
      deps = invoker.deps

      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",
      ]
    }
  }
}
