# It really depends on order of the layers appearing in BBLAYERS
# variable in toplevel bblayers.conf file, where bitbake will search
# for .inc files and others where bitbake uses BBPATH since it will
# search the directories from first to last as specified in BBPATH
# Therefore if you want a given layer to be considered high priority
# for the .inc and .conf etc. then consider it adding at the beginning
# of BBPATH. For bblayers bitbake will use BBFILES_PRIORITY to resolve
# the recipe contention so the order of directories in BBFILES does 
# not matter.

# We have a conf and classes directory, append to BBPATH
BBPATH .= ":${LAYERDIR}"

# We have a recipes directory, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "openembedded-layer"
BBFILE_PATTERN_openembedded-layer := "^${LAYERDIR}/"

# Define the priority for recipes (.bb files) from this layer,
# choosing carefully how this layer interacts with all of the
# other layers.

BBFILE_PRIORITY_openembedded-layer = "6"

# only activates content when identified layers are present,
# to ensure yocto compatibility check pass
BBFILES_DYNAMIC += " \
meta-python:${LAYERDIR}/dynamic-layers/meta-python/recipes-*/*/*.bb \
networking-layer:${LAYERDIR}/dynamic-layers/networking-layer/recipes-*/*/*.bb \
gnome-layer:${LAYERDIR}/dynamic-layers/gnome-layer/recipes-*/*/*.bb \
perl-layer:${LAYERDIR}/dynamic-layers/perl-layer/recipes-*/*/*.bb \
"

# This should only be incremented on significant changes that will
# cause compatibility issues with other layers
LAYERVERSION_openembedded-layer = "1"

LAYERDEPENDS_openembedded-layer = "core"

LAYERSERIES_COMPAT_openembedded-layer = "gatesgarth hardknott"

LICENSE_PATH += "${LAYERDIR}/licenses"

PREFERRED_RPROVIDER_libdevmapper = "lvm2"
PREFERRED_PROVIDER_android-tools-conf ?= "android-tools-conf"

SIGGEN_EXCLUDERECIPES_ABISAFE += " \
  fbset-modes \
  gpsd-machine-conf \
  distro-feed-configs \
  ca-certificates \
  pointercal \
"

SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
  android-tools->android-tools-conf \
  usb-modeswitch-data->usb-modeswitch \
  lmsensors->lmsensors-config \
  phoronix-test-suite->bash \
  phoronix-test-suite->python3 \
  phoronix-test-suite->php \
  phoronix-test-suite->lsb-release \
  phoronix-test-suite->util-linux \
  phoronix-test-suite->busybox \
  phoronix-test-suite->shared-mime-info \
  phoronix-test-suite->desktop-file-utils \
"

# ttf.inc inherits fontcache which adds fontconfig-utils to RDEPENDS
SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
  terminus-font->fontconfig \
  ttf-abyssinica->fontconfig \
  ttf-arphic-uming->fontconfig \
  ttf-dejavu->fontconfig \
  ttf-droid->fontconfig \
  ttf-gentium->fontconfig \
  ttf-hunkyfonts->fontconfig \
  ttf-inconsolata->fontconfig \
  ttf-liberation->fontconfig \
  ttf-liberation-sans-narrow->fontconfig \
  ttf-lklug->fontconfig \
  ttf-lohit->fontconfig \
  ttf-noto-emoji->fontconfig \
  ttf-pt-sans->fontconfig \
  ttf-roboto->fontconfig \
  ttf-mplus->fontconfig \
  ttf-sazanami->fontconfig \
  ttf-tlwg->fontconfig \
  ttf-ubuntu-font-family->fontconfig \
  ttf-vlgothic->fontconfig \
  ttf-wqy-zenhei->fontconfig \
  source-han-sans-cn-fonts->fontconfig \
  source-han-sans-jp-fonts->fontconfig \
  source-han-sans-kr-fonts->fontconfig \
  source-han-sans-tw-fonts->fontconfig \
  source-code-pro-fonts->fontconfig \
"

DEFAULT_TEST_SUITES_pn-meta-oe-ptest-image = " ${PTESTTESTSUITE}"

NON_MULTILIB_RECIPES_append = " crash"
