# 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.

pdf_engine = 0  # 0 PDFium

# TODO(GYP) need support for loadable modules
shared_library("pdf") {
  sources = [
    "button.h",
    "button.cc",
    "chunk_stream.h",
    "chunk_stream.cc",
    "control.h",
    "control.cc",
    "document_loader.h",
    "document_loader.cc",
    "draw_utils.cc",
    "draw_utils.h",
    "fading_control.cc",
    "fading_control.h",
    "fading_controls.cc",
    "fading_controls.h",
    "instance.cc",
    "instance.h",
    "number_image_generator.cc",
    "number_image_generator.h",
    "out_of_process_instance.cc",
    "out_of_process_instance.h",
    "page_indicator.cc",
    "page_indicator.h",
    "paint_aggregator.cc",
    "paint_aggregator.h",
    "paint_manager.cc",
    "paint_manager.h",
    "pdf.cc",
    "pdf.h",
    "pdf.rc",
    "progress_control.cc",
    "progress_control.h",
    "pdf_engine.h",
    "preview_mode_client.cc",
    "preview_mode_client.h",
    "resource.h",
    "resource_consts.h",
    "thumbnail_control.cc",
    "thumbnail_control.h",
    "../chrome/browser/chrome_page_zoom_constants.cc",
    "../content/common/page_zoom.cc",
  ]

  if (pdf_engine == 0) {
    sources += [
      "pdfium/pdfium_assert_matching_enums.cc",
      "pdfium/pdfium_engine.cc",
      "pdfium/pdfium_engine.h",
      "pdfium/pdfium_mem_buffer_file_read.cc",
      "pdfium/pdfium_mem_buffer_file_read.h",
      "pdfium/pdfium_mem_buffer_file_write.cc",
      "pdfium/pdfium_mem_buffer_file_write.h",
      "pdfium/pdfium_page.cc",
      "pdfium/pdfium_page.h",
      "pdfium/pdfium_range.cc",
      "pdfium/pdfium_range.h",
    ]
  }

  if (is_win) {
    defines = [ "COMPILE_CONTENT_STATICALLY" ]
    cflags = [ "/wd4267" ]  # TODO(jschuh) size_t to int truncations.
  }

  if (is_mac) {
    # TODO(GYP)
    #'mac_bundle': 1,
    #'product_name': 'PDF',
    #'product_extension': 'plugin',
    ## Strip the shipping binary of symbols so "Foxit" doesn't appear in
    ## the binary.  Symbols are stored in a separate .dSYM.
    #'variables': {
    #  'mac_real_dsym': 1,
    #},
    #'sources+': [
    #  'Info.plist'
    #]
    #'xcode_settings': {
    #  'INFOPLIST_FILE': 'Info.plist',
    #},
  }

  if (is_linux) {
    # TODO(GYP)
    ## Use a custom version script to prevent leaking the vendor name in
    ## visible symbols.
    #'ldflags': [
    #  '-Wl,--version-script=<!(cd <(DEPTH) && pwd -P)/pdf/libpdf.map'
    #],
  }

  deps = [
    "//base",
    "//net",
    "//ppapi:ppapi_cpp",
    "//third_party/pdfium",
  ]
}

# TODO(GYP) pdf_linux_symbols target.
