diff --git a/meta-ohos-core/classes/ohos-sanity.bbclass b/meta-ohos-core/classes/ohos-sanity.bbclass new file mode 100644 index 0000000000000000000000000000000000000000..a25be161dc8dcd2c5552450ad69fe74665e5c313 --- /dev/null +++ b/meta-ohos-core/classes/ohos-sanity.bbclass @@ -0,0 +1,56 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 + +# Deprecated collections can be either completely removed or replaced by +# another layer. The format of OHOS_DEPRECATED_COLLECTIONS is a list of +# <DEPRECATED_COLLECTION>:<REPLACEMENT_COLLECTION>. When +# <REPLACEMENT_COLLECTION> is not provided, the layer was removed without a +# replacement. +OHOS_DEPRECATED_COLLECTIONS = " \ + " + +def unpack_deprecation(elem) -> 'Tuple[str, str]': + elem_split = elem.split(sep=':', maxsplit=1) + return (elem_split[0], elem_split[1] if len(elem_split) == 2 else '') + +def ohos_is_valid_config() -> bool: + """Handles OpenHarmony build configuration sanity checks.""" + + # By default assume no fatal errors + success = True + + # + # Layers deprecation + # + for deprecation in d.getVar('OHOS_DEPRECATED_COLLECTIONS').split(): + (deprecated, new) = unpack_deprecation(deprecation) + if deprecated in d.getVar('BBFILE_COLLECTIONS').split(): + if new: + if new in d.getVar('BBFILE_COLLECTIONS').split(): + bb.warn("bblayers.conf contains both deprecated ({0}) " + "and replaced ({1}) layers. Remove the " + "deprecated layer." \ + .format(deprecated, new)) + # Having both deprecated and replacement layers is + # unwanted. + success = False + msg = "{0} is a deprecated layer. Adapt your bblayers.conf " \ + "to use the {1} replacement.".format(deprecated, new) + else: + msg = "{0} is a deprecated layer. Adapt your bblayers.conf " \ + "accordingly.".format(deprecated) + bb.warn(msg) + + return success + +python ohos_sanity_handler() { + if d.getVar('OHOS_SANITY_SKIP', True) == "1": + bb.warn('OpenHarmony-specific sanity checks were skipped.') + return + if not ohos_is_valid_config(): + bb.fatal("OpenHarmony sanity checks included fatal errors. See above.") +} + +addhandler ohos_sanity_handler +ohos_sanity_handler[eventmask] = "bb.event.BuildStarted"