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

import("//build/config/linux/pkg_config.gni")
import("//build/config/features.gni")
import("//build/config/sysroot.gni")
import("//build/config/ui.gni")

config("sdk") {
  if (sysroot != "") {
    cflags = [ "--sysroot=" + sysroot ]
    ldflags = [ "--sysroot=" + sysroot ]

    # Need to get some linker flags out of the sysroot.
    ldflags += [ exec_script("../linux/sysroot_ld_path.py",
                             [
                               rebase_path("//build/linux/sysroot_ld_path.sh",
                                           root_build_dir),
                               sysroot,
                             ],
                             "value") ]
  }

  defines = [ "FNL_MUSL" ]

  if (use_ozone) {
    defines += [ "MESA_EGL_NO_X11_HEADERS" ]
  }
}

config("fontconfig") {
  libs = [ "fontconfig" ]
}

pkg_config("freetype2") {
  packages = [ "freetype2" ]
}

if (use_evdev_gestures) {
  pkg_config("libevdev-cros") {
    packages = [ "libevdev-cros" ]
  }

  pkg_config("libgestures") {
    packages = [ "libgestures" ]
  }
}
