# 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',
    #},
  }

  deps = [
    "//base",
    "//net",
    "//ppapi:ppapi_cpp",
    "//third_party/pdfium",
  ]
}

# TODO(GYP) pdf_linux_symbols target.
