meta-wolfssl/classes/wolfssl-compatibility.bbclass

136 lines
4.4 KiB
Plaintext

# wolfSSL Yocto Compatibility Helper Class
# Provides functions to work with both old (underscore) and new (colon) Yocto syntax
def wolfssl_uses_colon_syntax(d):
"""
Detect if this Yocto version uses colon syntax (Honister 3.4+ / LAYERVERSION_core >= 14).
Falls back to checking DISTRO_VERSION if LAYERVERSION_core unavailable.
"""
try:
# Check OE-Core layer version (most reliable)
layer_version = d.getVar('LAYERVERSION_core') or d.getVar('LAYERVERSION_core', True)
if layer_version:
return int(layer_version) >= 14
except:
pass
# Fallback: check DISTRO_VERSION
try:
distro_version = d.getVar('DISTRO_VERSION') or d.getVar('DISTRO_VERSION', True)
if distro_version:
# Versions 2.x and 3.x before 3.4 use underscore
if distro_version.startswith('2.') or distro_version.startswith('3.0') or \
distro_version.startswith('3.1') or distro_version.startswith('3.2') or \
distro_version.startswith('3.3'):
return False
except:
pass
# Default to colon syntax for unknown/newer versions
return True
def wolfssl_varAppend(d, base_var, package_name, value):
"""
Appends a value to a package-specific variable, handling both old and new Yocto syntax.
Args:
d: BitBake data store
base_var: Base variable name (e.g., 'RDEPENDS', 'FILES', 'RRECOMMENDS')
package_name: Package name (e.g., '${PN}')
value: Value to append
"""
import bb
package_name_expanded = d.expand(package_name)
if wolfssl_uses_colon_syntax(d):
var_name = base_var + ':' + package_name_expanded
else:
var_name = base_var + '_' + package_name_expanded
d.appendVar(var_name, value)
def wolfssl_varSet(d, base_var, package_name, value):
"""
Sets a package-specific variable, handling both old and new Yocto syntax.
Args:
d: BitBake data store
base_var: Base variable name (e.g., 'RDEPENDS', 'FILES', 'RRECOMMENDS')
package_name: Package name (e.g., '${PN}')
value: Value to set
"""
import bb
package_name_expanded = d.expand(package_name)
if wolfssl_uses_colon_syntax(d):
var_name = base_var + ':' + package_name_expanded
else:
var_name = base_var + '_' + package_name_expanded
d.setVar(var_name, value)
def wolfssl_varGet(d, base_var, package_name):
"""
Gets a package-specific variable, handling both old and new Yocto syntax.
Args:
d: BitBake data store
base_var: Base variable name (e.g., 'RDEPENDS', 'FILES', 'RRECOMMENDS')
package_name: Package name (e.g., '${PN}')
Returns:
Variable value or None
"""
import bb
package_name_expanded = d.expand(package_name)
if wolfssl_uses_colon_syntax(d):
var_name = base_var + ':' + package_name_expanded
else:
var_name = base_var + '_' + package_name_expanded
return d.getVar(var_name) or d.getVar(var_name, True)
def wolfssl_varPrepend(d, var_name, value):
"""
Prepends a value to a variable (for things like FILESEXTRAPATHS, PACKAGECONFIG).
Args:
d: BitBake data store
var_name: Variable name (e.g., 'FILESEXTRAPATHS', 'PACKAGECONFIG')
value: Value to prepend
"""
d.prependVar(var_name, value)
def wolfssl_varAppendNonOverride(d, var_name, value):
"""
Appends a value to a variable (for things like PACKAGECONFIG, EXTRA_OECONF).
Args:
d: BitBake data store
var_name: Variable name (e.g., 'PACKAGECONFIG', 'EXTRA_OECONF')
value: Value to append
"""
d.appendVar(var_name, value)
def wolfssl_varRemoveNonOverride(d, var_name, value):
"""
Removes one or more whitespace-delimited tokens from a list-style variable
(e.g. ERROR_QA, WARN_QA). Edits the datastore directly, so it is version-agnostic
and needs no colon/underscore override syntax (unlike ERROR_QA:remove / _remove).
No-op if a token is not present.
Args:
d: BitBake data store
var_name: Variable name (e.g., 'ERROR_QA', 'WARN_QA')
value: Whitespace-delimited token(s) to remove (e.g., 'patch-status')
"""
tokens = (d.getVar(var_name) or '').split()
remove = set(value.split())
filtered = [t for t in tokens if t not in remove]
if filtered != tokens:
d.setVar(var_name, ' '.join(filtered))