# Copyright 2016 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/chromecast_build.gni")
import("//build/config/features.gni")
import("//build/config/sanitizers/sanitizers.gni")

declare_args() {
  # Enable basic printing support and UI.
  enable_basic_printing = !is_chromecast && !is_ios && !is_fuchsia

  # Enable printing with print preview. It implies enable_basic_printing.
  # Note: It would be convenient to not repeat many of the same conditions in
  # enable_basic_printing below. However, GN does not allow the use of
  # enable_basic_printing within the same declare_args() block.
  enable_print_preview = !is_android && !is_chromecast && !is_ios && !is_fuchsia

  if (use_fuzzing_engine && is_linux) {
    # For fuzzing, just restrict to chromeos and linux.
    use_cups = true
  } else {
    use_cups = (is_desktop_linux || is_mac) && !is_chromecast && !is_fuchsia
  }
}
