mirror of
https://git.yoctoproject.org/poky
synced 2026-03-24 08:01:43 +01:00
Compare commits
33 Commits
5.3_M1
...
walnascar-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
167f714a72 | ||
|
|
13f4119ccf | ||
|
|
9b96fdbb0c | ||
|
|
81c9c4f6d4 | ||
|
|
51d1210367 | ||
|
|
43909a9870 | ||
|
|
185a87256e | ||
|
|
22f3616aad | ||
|
|
58776612f0 | ||
|
|
62689ff1fb | ||
|
|
528b36636b | ||
|
|
5f6a1c9838 | ||
|
|
17b2110721 | ||
|
|
542eec1b1c | ||
|
|
a472092f33 | ||
|
|
3408d70d2c | ||
|
|
8df460977d | ||
|
|
fdf0ab1370 | ||
|
|
5c4cf4b573 | ||
|
|
e5577538c3 | ||
|
|
90e4af3eff | ||
|
|
15a7d7b881 | ||
|
|
39cbc37918 | ||
|
|
9f9e7bbace | ||
|
|
539ce63c81 | ||
|
|
43d807650a | ||
|
|
949c0bb2f5 | ||
|
|
0c32303252 | ||
|
|
ecacb6015a | ||
|
|
0990fceebe | ||
|
|
6b2bc1e4cb | ||
|
|
5ec826fa2e | ||
|
|
a287584563 |
@@ -27,7 +27,7 @@ from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException
|
||||
|
||||
bb.utils.check_system_locale()
|
||||
|
||||
__version__ = "2.15.0"
|
||||
__version__ = "2.12.0"
|
||||
|
||||
if __name__ == "__main__":
|
||||
if __version__ != bb.__version__:
|
||||
|
||||
@@ -10,7 +10,6 @@ import io
|
||||
import os
|
||||
import sys
|
||||
import warnings
|
||||
import logging
|
||||
warnings.simplefilter("default")
|
||||
|
||||
bindir = os.path.dirname(__file__)
|
||||
@@ -39,10 +38,6 @@ if __name__ == "__main__":
|
||||
sys.exit("--flag only makes sense with --value")
|
||||
|
||||
quiet = args.quiet or args.value
|
||||
if quiet:
|
||||
logger = logging.getLogger("BitBake")
|
||||
logger.setLevel(logging.WARNING)
|
||||
|
||||
with bb.tinfoil.Tinfoil(tracking=True, setup_logging=not quiet) as tinfoil:
|
||||
if args.recipe:
|
||||
tinfoil.prepare(quiet=3 if quiet else 2)
|
||||
|
||||
@@ -686,9 +686,9 @@ Such functionality is set by the variable:
|
||||
delegate access to resources, if this variable is set, the Az Fetcher will
|
||||
use it when fetching artifacts from the cloud.
|
||||
|
||||
You can specify the AZ_SAS variable prefixed with a ? as shown below::
|
||||
You can specify the AZ_SAS variable as shown below::
|
||||
|
||||
AZ_SAS = "?se=2021-01-01&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sig=<signature>"
|
||||
AZ_SAS = "se=2021-01-01&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sig=<signature>"
|
||||
|
||||
Here is an example URL::
|
||||
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-2.5
|
||||
|
||||
=================
|
||||
Library Functions
|
||||
=================
|
||||
|
||||
|
|
||||
|
||||
This chapter lists common library functions available under the ``lib/``
|
||||
directory in BitBake.
|
||||
|
||||
These functions can be used in recipes or configuration files with
|
||||
:ref:`inline-Python <bitbake-user-manual/bitbake-user-manual-metadata:Inline
|
||||
Python Variable Expansion>` or :ref:`Python
|
||||
<bitbake-user-manual/bitbake-user-manual-metadata:BitBake-Style Python
|
||||
Functions>` functions.
|
||||
|
||||
Logging utilities
|
||||
=================
|
||||
|
||||
Different logging utilities can be used from Python code in recipes or
|
||||
configuration files.
|
||||
|
||||
The strings passed below can be formatted with ``str.format()``, for example::
|
||||
|
||||
bb.warn("Houston, we have a %s", "bit of a problem")
|
||||
|
||||
Formatted string can also be used directly::
|
||||
|
||||
bb.error("%s, we have a %s" % ("Houston", "big problem"))
|
||||
|
||||
Python f-strings may also be used::
|
||||
|
||||
h = "Houston"
|
||||
bb.fatal(f"{h}, we have a critical problem")
|
||||
|
||||
.. automodule:: bb
|
||||
:members:
|
||||
debug,
|
||||
error,
|
||||
erroronce,
|
||||
fatal,
|
||||
note,
|
||||
plain,
|
||||
verbnote,
|
||||
warn,
|
||||
warnonce,
|
||||
|
||||
``bb.utils``
|
||||
============
|
||||
|
||||
.. automodule:: bb.utils
|
||||
:members:
|
||||
:exclude-members:
|
||||
LogCatcher,
|
||||
PrCtlError,
|
||||
VersionStringException,
|
||||
better_compile,
|
||||
better_exec,
|
||||
@@ -1405,8 +1405,8 @@ the task and other tasks. Here is an example that shows how to define a
|
||||
task and declare some dependencies::
|
||||
|
||||
python do_printdate () {
|
||||
import datetime
|
||||
bb.plain('Date: %s' % (datetime.date.today()))
|
||||
import time
|
||||
print time.strftime('%Y%m%d', time.gmtime())
|
||||
}
|
||||
addtask printdate after do_fetch before do_build
|
||||
|
||||
@@ -2074,8 +2074,11 @@ access. Here is a list of available operations:
|
||||
Other Functions
|
||||
---------------
|
||||
|
||||
Other functions are documented in the
|
||||
:doc:`/bitbake-user-manual/bitbake-user-manual-library-functions` document.
|
||||
You can find many other functions that can be called from Python by
|
||||
looking at the source code of the ``bb`` module, which is in
|
||||
``bitbake/lib/bb``. For example, ``bitbake/lib/bb/utils.py`` includes
|
||||
the commonly used functions ``bb.utils.contains()`` and
|
||||
``bb.utils.mkdirhier()``, which come with docstrings.
|
||||
|
||||
Extending Python Library Code
|
||||
-----------------------------
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
import sys
|
||||
import datetime
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
current_version = "dev"
|
||||
|
||||
# String used in sidebar
|
||||
@@ -49,7 +47,6 @@ extlinks = {
|
||||
extensions = [
|
||||
'sphinx.ext.autosectionlabel',
|
||||
'sphinx.ext.extlinks',
|
||||
'sphinx.ext.autodoc',
|
||||
]
|
||||
autosectionlabel_prefix_document = True
|
||||
|
||||
@@ -102,7 +99,3 @@ html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# Remove the trailing 'dot' in section numbers
|
||||
html_secnumber_suffix = " "
|
||||
|
||||
# autoconf needs the modules available to auto-generate documentation from the
|
||||
# code
|
||||
sys.path.insert(0, str(Path('..', 'lib').resolve()))
|
||||
|
||||
@@ -16,7 +16,6 @@ BitBake User Manual
|
||||
bitbake-user-manual/bitbake-user-manual-ref-variables-context
|
||||
bitbake-user-manual/bitbake-user-manual-fetching
|
||||
bitbake-user-manual/bitbake-user-manual-ref-variables
|
||||
bitbake-user-manual/bitbake-user-manual-library-functions
|
||||
bitbake-user-manual/bitbake-user-manual-hello
|
||||
|
||||
.. toctree::
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
BitBake Supported Release Manuals
|
||||
=================================
|
||||
|
||||
******************************
|
||||
Release Series 5.2 (walnascar)
|
||||
******************************
|
||||
****************************
|
||||
Release Series 5.1 (styhead)
|
||||
****************************
|
||||
|
||||
- :yocto_docs:`BitBake 2.12 User Manual </bitbake/2.12/>`
|
||||
- :yocto_docs:`BitBake 2.10 User Manual </bitbake/2.10/>`
|
||||
|
||||
*******************************
|
||||
Release Series 5.0 (scarthgap)
|
||||
@@ -26,12 +26,6 @@ Release Series 4.0 (kirkstone)
|
||||
BitBake Outdated Release Manuals
|
||||
================================
|
||||
|
||||
****************************
|
||||
Release Series 5.1 (styhead)
|
||||
****************************
|
||||
|
||||
- :yocto_docs:`BitBake 2.10 User Manual </bitbake/2.10/>`
|
||||
|
||||
*******************************
|
||||
Release Series 4.3 (nanbield)
|
||||
*******************************
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
|
||||
__version__ = "2.15.0"
|
||||
__version__ = "2.12.0"
|
||||
|
||||
import sys
|
||||
if sys.version_info < (3, 9, 0):
|
||||
@@ -129,25 +129,9 @@ sys.modules['bb.fetch'] = sys.modules['bb.fetch2']
|
||||
|
||||
# Messaging convenience functions
|
||||
def plain(*args):
|
||||
"""
|
||||
Prints a message at "plain" level (higher level than a ``bb.note()``).
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.plain(''.join(args))
|
||||
|
||||
def debug(lvl, *args):
|
||||
"""
|
||||
Prints a debug message.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``lvl``: debug level. Higher value increases the debug level
|
||||
(determined by ``bitbake -D``).
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
if isinstance(lvl, str):
|
||||
mainlogger.warning("Passed invalid debug level '%s' to bb.debug", lvl)
|
||||
args = (lvl,) + args
|
||||
@@ -155,81 +139,33 @@ def debug(lvl, *args):
|
||||
mainlogger.bbdebug(lvl, ''.join(args))
|
||||
|
||||
def note(*args):
|
||||
"""
|
||||
Prints a message at "note" level.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.info(''.join(args))
|
||||
|
||||
#
|
||||
# A higher prioity note which will show on the console but isn't a warning
|
||||
#
|
||||
# Something is happening the user should be aware of but they probably did
|
||||
# something to make it happen
|
||||
#
|
||||
def verbnote(*args):
|
||||
"""
|
||||
A higher priority note which will show on the console but isn't a warning.
|
||||
|
||||
Use in contexts when something is happening the user should be aware of but
|
||||
they probably did something to make it happen.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.verbnote(''.join(args))
|
||||
|
||||
#
|
||||
# Warnings - things the user likely needs to pay attention to and fix
|
||||
#
|
||||
def warn(*args):
|
||||
"""
|
||||
Prints a warning message.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.warning(''.join(args))
|
||||
|
||||
def warnonce(*args):
|
||||
"""
|
||||
Prints a warning message like ``bb.warn()``, but only prints the message
|
||||
once.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.warnonce(''.join(args))
|
||||
|
||||
def error(*args, **kwargs):
|
||||
"""
|
||||
Prints an error message.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.error(''.join(args), extra=kwargs)
|
||||
|
||||
def erroronce(*args):
|
||||
"""
|
||||
Prints an error message like ``bb.error()``, but only prints the message
|
||||
once.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.erroronce(''.join(args))
|
||||
|
||||
def fatal(*args, **kwargs):
|
||||
"""
|
||||
Prints an error message and stops the BitBake execution.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``args``: one or more strings to print.
|
||||
"""
|
||||
mainlogger.critical(''.join(args), extra=kwargs)
|
||||
raise BBHandledException()
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ def add_module_functions(fn, functions, namespace):
|
||||
name = "%s.%s" % (namespace, f)
|
||||
parser = PythonParser(name, logger)
|
||||
try:
|
||||
parser.parse_python(None, filename=fn, lineno=1, fixedhash=fixedhash+f, func=functions[f])
|
||||
parser.parse_python(None, filename=fn, lineno=1, fixedhash=fixedhash+f)
|
||||
#bb.warn("Cached %s" % f)
|
||||
except KeyError:
|
||||
try:
|
||||
@@ -87,7 +87,7 @@ def add_module_functions(fn, functions, namespace):
|
||||
# Builtin
|
||||
continue
|
||||
src = "".join(lines)
|
||||
parser.parse_python(src, filename=fn, lineno=lineno, fixedhash=fixedhash+f, func=functions[f])
|
||||
parser.parse_python(src, filename=fn, lineno=lineno, fixedhash=fixedhash+f)
|
||||
#bb.warn("Not cached %s" % f)
|
||||
execs = parser.execs.copy()
|
||||
# Expand internal module exec references
|
||||
@@ -348,7 +348,7 @@ class PythonParser():
|
||||
# For the python module code it is expensive to have the function text so it is
|
||||
# uses a different fixedhash to cache against. We can take the hit on obtaining the
|
||||
# text if it isn't in the cache.
|
||||
def parse_python(self, node, lineno=0, filename="<string>", fixedhash=None, func=None):
|
||||
def parse_python(self, node, lineno=0, filename="<string>", fixedhash=None):
|
||||
if not fixedhash and (not node or not node.strip()):
|
||||
return
|
||||
|
||||
@@ -390,10 +390,6 @@ class PythonParser():
|
||||
if n.__class__.__name__ == "Call":
|
||||
self.visit_Call(n)
|
||||
|
||||
if func is not None:
|
||||
self.references |= getattr(func, "bb_vardeps", set())
|
||||
self.references -= getattr(func, "bb_vardepsexclude", set())
|
||||
|
||||
self.execs.update(self.var_execs)
|
||||
self.extra = None
|
||||
if fixedhash:
|
||||
|
||||
@@ -431,16 +431,6 @@ class RecipeEvent(Event):
|
||||
self.fn = fn
|
||||
Event.__init__(self)
|
||||
|
||||
class RecipePreDeferredInherits(RecipeEvent):
|
||||
"""
|
||||
Called before deferred inherits are processed so code can snoop on class extensions for example
|
||||
Limitations: It won't see inherits of inherited classes and the data is unexpanded
|
||||
"""
|
||||
def __init__(self, fn, inherits):
|
||||
self.fn = fn
|
||||
self.inherits = inherits
|
||||
Event.__init__(self)
|
||||
|
||||
class RecipePreFinalise(RecipeEvent):
|
||||
""" Recipe Parsing Complete but not yet finalised"""
|
||||
|
||||
|
||||
@@ -1092,10 +1092,6 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
|
||||
# If that tarball is a local file:// we need to provide a symlink to it
|
||||
dldir = ld.getVar("DL_DIR")
|
||||
|
||||
if bb.utils.to_boolean(ld.getVar("BB_FETCH_PREMIRRORONLY")):
|
||||
ld = ld.createCopy()
|
||||
ld.setVar("BB_NO_NETWORK", "1")
|
||||
|
||||
if origud.mirrortarballs and os.path.basename(ud.localpath) in origud.mirrortarballs and os.path.basename(ud.localpath) != os.path.basename(origud.localpath):
|
||||
# Create donestamp in old format to avoid triggering a re-download
|
||||
if ud.donestamp:
|
||||
@@ -1117,10 +1113,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
|
||||
origud.method.build_mirror_data(origud, ld)
|
||||
return origud.localpath
|
||||
# Otherwise the result is a local file:// and we symlink to it
|
||||
# This may also be a link to a shallow archive
|
||||
# When using shallow mode, add a symlink to the original fullshallow
|
||||
# path to ensure a valid symlink even in the `PREMIRRORS` case
|
||||
origud.method.update_mirror_links(ud, origud)
|
||||
ensure_symlink(ud.localpath, origud.localpath)
|
||||
update_stamp(origud, ld)
|
||||
return ud.localpath
|
||||
|
||||
@@ -1154,6 +1147,25 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
|
||||
if ud.lockfile and ud.lockfile != origud.lockfile:
|
||||
bb.utils.unlockfile(lf)
|
||||
|
||||
|
||||
def ensure_symlink(target, link_name):
|
||||
if not os.path.exists(link_name):
|
||||
dirname = os.path.dirname(link_name)
|
||||
bb.utils.mkdirhier(dirname)
|
||||
if os.path.islink(link_name):
|
||||
# Broken symbolic link
|
||||
os.unlink(link_name)
|
||||
|
||||
# In case this is executing without any file locks held (as is
|
||||
# the case for file:// URLs), two tasks may end up here at the
|
||||
# same time, in which case we do not want the second task to
|
||||
# fail when the link has already been created by the first task.
|
||||
try:
|
||||
os.symlink(target, link_name)
|
||||
except FileExistsError:
|
||||
pass
|
||||
|
||||
|
||||
def try_mirrors(fetch, d, origud, mirrors, check = False):
|
||||
"""
|
||||
Try to use a mirrored version of the sources.
|
||||
@@ -1573,11 +1585,11 @@ class FetchMethod(object):
|
||||
datafile = None
|
||||
if output:
|
||||
for line in output.decode().splitlines():
|
||||
if line.startswith('data.tar.') or line == 'data.tar':
|
||||
if line.startswith('data.tar.'):
|
||||
datafile = line
|
||||
break
|
||||
else:
|
||||
raise UnpackError("Unable to unpack deb/ipk package - does not contain data.tar* file", urldata.url)
|
||||
raise UnpackError("Unable to unpack deb/ipk package - does not contain data.tar.* file", urldata.url)
|
||||
else:
|
||||
raise UnpackError("Unable to unpack deb/ipk package - could not list contents", urldata.url)
|
||||
cmd = 'ar x %s %s && %s -p -f %s && rm %s' % (file, datafile, tar_cmd, datafile, datafile)
|
||||
@@ -1639,28 +1651,6 @@ class FetchMethod(object):
|
||||
"""
|
||||
bb.utils.remove(urldata.localpath)
|
||||
|
||||
def ensure_symlink(self, target, link_name):
|
||||
if not os.path.exists(link_name):
|
||||
dirname = os.path.dirname(link_name)
|
||||
bb.utils.mkdirhier(dirname)
|
||||
if os.path.islink(link_name):
|
||||
# Broken symbolic link
|
||||
os.unlink(link_name)
|
||||
|
||||
# In case this is executing without any file locks held (as is
|
||||
# the case for file:// URLs), two tasks may end up here at the
|
||||
# same time, in which case we do not want the second task to
|
||||
# fail when the link has already been created by the first task.
|
||||
try:
|
||||
os.symlink(target, link_name)
|
||||
except FileExistsError:
|
||||
pass
|
||||
|
||||
def update_mirror_links(self, ud, origud):
|
||||
# For local file:// results, create a symlink to them
|
||||
# This may also be a link to a shallow archive
|
||||
self.ensure_symlink(ud.localpath, origud.localpath)
|
||||
|
||||
def try_premirror(self, urldata, d):
|
||||
"""
|
||||
Should premirrors be used?
|
||||
|
||||
@@ -36,8 +36,6 @@ class Az(Wget):
|
||||
|
||||
az_sas = d.getVar('AZ_SAS')
|
||||
if az_sas and az_sas not in ud.url:
|
||||
if not az_sas.startswith('?'):
|
||||
raise FetchError("When using AZ_SAS, it must start with a '?' character to mark the start of the query-parameters.")
|
||||
ud.url += az_sas
|
||||
|
||||
return Wget.checkstatus(self, fetch, ud, d, try_again)
|
||||
@@ -64,8 +62,6 @@ class Az(Wget):
|
||||
az_sas = d.getVar('AZ_SAS')
|
||||
|
||||
if az_sas:
|
||||
if not az_sas.startswith('?'):
|
||||
raise FetchError("When using AZ_SAS, it must start with a '?' character to mark the start of the query-parameters.")
|
||||
azuri = '%s%s%s%s' % ('https://', ud.host, ud.path, az_sas)
|
||||
else:
|
||||
azuri = '%s%s%s' % ('https://', ud.host, ud.path)
|
||||
|
||||
@@ -182,7 +182,7 @@ class Git(FetchMethod):
|
||||
ud.bareclone = ud.parm.get("bareclone","0") == "1"
|
||||
if ud.bareclone:
|
||||
ud.nocheckout = 1
|
||||
|
||||
|
||||
ud.unresolvedrev = ""
|
||||
ud.branch = ud.parm.get("branch", "")
|
||||
if not ud.branch and not ud.nobranch:
|
||||
@@ -324,13 +324,10 @@ class Git(FetchMethod):
|
||||
return False
|
||||
|
||||
def lfs_need_update(self, ud, d):
|
||||
if not self._need_lfs(ud):
|
||||
return False
|
||||
|
||||
if self.clonedir_need_update(ud, d):
|
||||
return True
|
||||
|
||||
if not self._lfs_objects_downloaded(ud, d, ud.clonedir):
|
||||
if not self._lfs_objects_downloaded(ud, d, ud.name, ud.clonedir):
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -348,13 +345,6 @@ class Git(FetchMethod):
|
||||
def tarball_need_update(self, ud):
|
||||
return ud.write_tarballs and not os.path.exists(ud.fullmirror)
|
||||
|
||||
def update_mirror_links(self, ud, origud):
|
||||
super().update_mirror_links(ud, origud)
|
||||
# When using shallow mode, add a symlink to the original fullshallow
|
||||
# path to ensure a valid symlink even in the `PREMIRRORS` case
|
||||
if ud.shallow and not os.path.exists(origud.fullshallow):
|
||||
self.ensure_symlink(ud.localpath, origud.fullshallow)
|
||||
|
||||
def try_premirror(self, ud, d):
|
||||
# If we don't do this, updating an existing checkout with only premirrors
|
||||
# is not possible
|
||||
@@ -489,14 +479,35 @@ class Git(FetchMethod):
|
||||
raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev)
|
||||
|
||||
if self.lfs_need_update(ud, d):
|
||||
self.lfs_fetch(ud, d, ud.clonedir, ud.revision)
|
||||
# Unpack temporary working copy, use it to run 'git checkout' to force pre-fetching
|
||||
# of all LFS blobs needed at the srcrev.
|
||||
#
|
||||
# It would be nice to just do this inline here by running 'git-lfs fetch'
|
||||
# on the bare clonedir, but that operation requires a working copy on some
|
||||
# releases of Git LFS.
|
||||
with tempfile.TemporaryDirectory(dir=d.getVar('DL_DIR')) as tmpdir:
|
||||
# Do the checkout. This implicitly involves a Git LFS fetch.
|
||||
Git.unpack(self, ud, tmpdir, d)
|
||||
|
||||
# Scoop up a copy of any stuff that Git LFS downloaded. Merge them into
|
||||
# the bare clonedir.
|
||||
#
|
||||
# As this procedure is invoked repeatedly on incremental fetches as
|
||||
# a recipe's SRCREV is bumped throughout its lifetime, this will
|
||||
# result in a gradual accumulation of LFS blobs in <ud.clonedir>/lfs
|
||||
# corresponding to all the blobs reachable from the different revs
|
||||
# fetched across time.
|
||||
#
|
||||
# Only do this if the unpack resulted in a .git/lfs directory being
|
||||
# created; this only happens if at least one blob needed to be
|
||||
# downloaded.
|
||||
if os.path.exists(os.path.join(ud.destdir, ".git", "lfs")):
|
||||
runfetchcmd("tar -cf - lfs | tar -xf - -C %s" % ud.clonedir, d, workdir="%s/.git" % ud.destdir)
|
||||
|
||||
def lfs_fetch(self, ud, d, clonedir, revision, fetchall=False, progresshandler=None):
|
||||
"""Helper method for fetching Git LFS data"""
|
||||
try:
|
||||
if self._need_lfs(ud) and self._contains_lfs(ud, d, clonedir) and len(revision):
|
||||
self._ensure_git_lfs(d, ud)
|
||||
|
||||
if self._need_lfs(ud) and self._contains_lfs(ud, d, clonedir) and self._find_git_lfs(d) and len(revision):
|
||||
# Using worktree with the revision because .lfsconfig may exists
|
||||
worktree_add_cmd = "%s worktree add wt %s" % (ud.basecmd, revision)
|
||||
runfetchcmd(worktree_add_cmd, d, log=progresshandler, workdir=clonedir)
|
||||
@@ -546,7 +557,7 @@ class Git(FetchMethod):
|
||||
try:
|
||||
self.clone_shallow_local(ud, shallowclone, d)
|
||||
except:
|
||||
logger.warning("Fast shallow clone failed, try to skip fast mode now.")
|
||||
logger.warning("Fash shallow clone failed, try to skip fast mode now.")
|
||||
bb.utils.remove(tempdir, recurse=True)
|
||||
os.mkdir(tempdir)
|
||||
ud.shallow_skip_fast = True
|
||||
@@ -623,8 +634,9 @@ class Git(FetchMethod):
|
||||
|
||||
runfetchcmd(fetch_cmd, d, workdir=dest)
|
||||
runfetchcmd("%s update-ref %s %s" % (ud.basecmd, ref, revision), d, workdir=dest)
|
||||
# Fetch Git LFS data
|
||||
self.lfs_fetch(ud, d, dest, ud.revision)
|
||||
# Fetch Git LFS data for fast shallow clones
|
||||
if not ud.shallow_skip_fast:
|
||||
self.lfs_fetch(ud, d, dest, ud.revision)
|
||||
|
||||
# Apply extra ref wildcards
|
||||
all_refs_remote = runfetchcmd("%s ls-remote origin 'refs/*'" % ud.basecmd, \
|
||||
@@ -646,7 +658,7 @@ class Git(FetchMethod):
|
||||
extra_refs.append(r)
|
||||
|
||||
for ref in extra_refs:
|
||||
ref_fetch = ref.replace('refs/heads/', '').replace('refs/remotes/origin/', '').replace('refs/tags/', '')
|
||||
ref_fetch = os.path.basename(ref)
|
||||
runfetchcmd("%s fetch origin --depth 1 %s" % (ud.basecmd, ref_fetch), d, workdir=dest)
|
||||
revision = runfetchcmd("%s rev-parse FETCH_HEAD" % ud.basecmd, d, workdir=dest)
|
||||
runfetchcmd("%s update-ref %s %s" % (ud.basecmd, ref, revision), d, workdir=dest)
|
||||
@@ -718,22 +730,17 @@ class Git(FetchMethod):
|
||||
output = runfetchcmd("%s rev-list -n 1 %s" % (ud.basecmd, ud.parm['tag']), d, workdir=destdir)
|
||||
output = output.strip()
|
||||
if output != ud.revision:
|
||||
# It is possible ud.revision is the revision on an annotated tag which won't match the output of rev-list
|
||||
# If it resolves to the same thing there isn't a problem.
|
||||
output2 = runfetchcmd("%s rev-list -n 1 %s" % (ud.basecmd, ud.revision), d, workdir=destdir)
|
||||
output2 = output2.strip()
|
||||
if output != output2:
|
||||
raise bb.fetch2.FetchError("The revision the git tag '%s' resolved to didn't match the SRCREV in use (%s vs %s)" % (ud.parm['tag'], output, ud.revision), ud.url)
|
||||
raise bb.fetch2.FetchError("The revision the git tag '%s' resolved to didn't match the SRCREV in use (%s vs %s)" % (ud.parm['tag'], output, ud.revision), ud.url)
|
||||
|
||||
repourl = self._get_repo_url(ud)
|
||||
runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=destdir)
|
||||
|
||||
if self._contains_lfs(ud, d, destdir):
|
||||
if not need_lfs:
|
||||
if need_lfs and not self._find_git_lfs(d):
|
||||
raise bb.fetch2.FetchError("Repository %s has LFS content, install git-lfs on host to download (or set lfs=0 to ignore it)" % (repourl))
|
||||
elif not need_lfs:
|
||||
bb.note("Repository %s has LFS content but it is not being fetched" % (repourl))
|
||||
else:
|
||||
self._ensure_git_lfs(d, ud)
|
||||
|
||||
runfetchcmd("%s lfs install --local" % ud.basecmd, d, workdir=destdir)
|
||||
|
||||
if not ud.nocheckout:
|
||||
@@ -791,16 +798,14 @@ class Git(FetchMethod):
|
||||
raise bb.fetch2.FetchError("The command '%s' gave output with more then 1 line unexpectedly, output: '%s'" % (cmd, output))
|
||||
return output.split()[0] != "0"
|
||||
|
||||
def _lfs_objects_downloaded(self, ud, d, wd):
|
||||
def _lfs_objects_downloaded(self, ud, d, name, wd):
|
||||
"""
|
||||
Verifies whether the LFS objects for requested revisions have already been downloaded
|
||||
"""
|
||||
# Bail out early if this repository doesn't use LFS
|
||||
if not self._contains_lfs(ud, d, wd):
|
||||
if not self._need_lfs(ud) or not self._contains_lfs(ud, d, wd):
|
||||
return True
|
||||
|
||||
self._ensure_git_lfs(d, ud)
|
||||
|
||||
# The Git LFS specification specifies ([1]) the LFS folder layout so it should be safe to check for file
|
||||
# existence.
|
||||
# [1] https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md#intercepting-git
|
||||
@@ -829,8 +834,18 @@ class Git(FetchMethod):
|
||||
"""
|
||||
Check if the repository has 'lfs' (large file) content
|
||||
"""
|
||||
|
||||
if ud.nobranch:
|
||||
# If no branch is specified, use the current git commit
|
||||
refname = self._build_revision(ud, d, ud.name)
|
||||
elif wd == ud.clonedir:
|
||||
# The bare clonedir doesn't use the remote names; it has the branch immediately.
|
||||
refname = ud.branch
|
||||
else:
|
||||
refname = "origin/%s" % ud.branch
|
||||
|
||||
cmd = "%s grep lfs %s:.gitattributes | wc -l" % (
|
||||
ud.basecmd, ud.revision)
|
||||
ud.basecmd, refname)
|
||||
|
||||
try:
|
||||
output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
|
||||
@@ -840,14 +855,11 @@ class Git(FetchMethod):
|
||||
pass
|
||||
return False
|
||||
|
||||
def _ensure_git_lfs(self, d, ud):
|
||||
def _find_git_lfs(self, d):
|
||||
"""
|
||||
Ensures that git-lfs is available, raising a FetchError if it isn't.
|
||||
Return True if git-lfs can be found, False otherwise.
|
||||
"""
|
||||
if shutil.which("git-lfs", path=d.getVar('PATH')) is None:
|
||||
raise bb.fetch2.FetchError(
|
||||
"Repository %s has LFS content, install git-lfs on host to download (or set lfs=0 "
|
||||
"to ignore it)" % self._get_repo_url(ud))
|
||||
return shutil.which("git-lfs", path=d.getVar('PATH')) is not None
|
||||
|
||||
def _get_repo_url(self, ud):
|
||||
"""
|
||||
@@ -855,7 +867,7 @@ class Git(FetchMethod):
|
||||
"""
|
||||
# Note that we do not support passwords directly in the git urls. There are several
|
||||
# reasons. SRC_URI can be written out to things like buildhistory and people don't
|
||||
# want to leak passwords like that. Its also all too easy to share metadata without
|
||||
# want to leak passwords like that. Its also all too easy to share metadata without
|
||||
# removing the password. ssh keys, ~/.netrc and ~/.ssh/config files can be used as
|
||||
# alternatives so we will not take patches adding password support here.
|
||||
if ud.user:
|
||||
@@ -979,7 +991,7 @@ class Git(FetchMethod):
|
||||
Return a sortable revision number by counting commits in the history
|
||||
Based on gitpkgv.bblass in meta-openembedded
|
||||
"""
|
||||
rev = ud.revision
|
||||
rev = self._build_revision(ud, d, name)
|
||||
localpath = ud.localpath
|
||||
rev_file = os.path.join(localpath, "oe-gitpkgv_" + rev)
|
||||
if not os.path.exists(localpath):
|
||||
|
||||
@@ -122,7 +122,7 @@ class GitSM(Git):
|
||||
url += ";name=%s" % module
|
||||
url += ";subpath=%s" % module
|
||||
url += ";nobranch=1"
|
||||
url += ";lfs=%s" % ("1" if self._need_lfs(ud) else "0")
|
||||
url += ";lfs=%s" % self._need_lfs(ud)
|
||||
# Note that adding "user=" here to give credentials to the
|
||||
# submodule is not supported. Since using SRC_URI to give git://
|
||||
# URL a password is not supported, one have to use one of the
|
||||
@@ -245,11 +245,12 @@ class GitSM(Git):
|
||||
ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d)
|
||||
|
||||
if not ud.bareclone and ret:
|
||||
cmdprefix = ""
|
||||
# Avoid LFS smudging (replacing the LFS pointers with the actual content) when LFS shouldn't be used but git-lfs is installed.
|
||||
if not self._need_lfs(ud):
|
||||
cmdprefix = "GIT_LFS_SKIP_SMUDGE=1 "
|
||||
runfetchcmd("%s%s submodule update --recursive --no-fetch" % (cmdprefix, ud.basecmd), d, quiet=True, workdir=ud.destdir)
|
||||
# All submodules should already be downloaded and configured in the tree. This simply
|
||||
# sets up the configuration and checks out the files. The main project config should
|
||||
# remain unmodified, and no download from the internet should occur. As such, lfs smudge
|
||||
# should also be skipped as these files were already smudged in the fetch stage if lfs
|
||||
# was enabled.
|
||||
runfetchcmd("GIT_LFS_SKIP_SMUDGE=1 %s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir)
|
||||
def clean(self, ud, d):
|
||||
def clean_submodule(ud, url, module, modpath, workdir, d):
|
||||
url += ";bareclone=1;nobranch=1"
|
||||
|
||||
@@ -176,41 +176,4 @@ def get_file_depends(d):
|
||||
dep_files.append(os.path.abspath(fn))
|
||||
return " ".join(dep_files)
|
||||
|
||||
def vardeps(*varnames):
|
||||
"""
|
||||
Function decorator that can be used to instruct the bitbake dependency
|
||||
parsing to add a dependency on the specified variables names
|
||||
|
||||
Example:
|
||||
|
||||
@bb.parse.vardeps("FOO", "BAR")
|
||||
def my_function():
|
||||
...
|
||||
|
||||
"""
|
||||
def inner(f):
|
||||
if not hasattr(f, "bb_vardeps"):
|
||||
f.bb_vardeps = set()
|
||||
f.bb_vardeps |= set(varnames)
|
||||
return f
|
||||
return inner
|
||||
|
||||
def vardepsexclude(*varnames):
|
||||
"""
|
||||
Function decorator that can be used to instruct the bitbake dependency
|
||||
parsing to ignore dependencies on the specified variable names in the code
|
||||
|
||||
Example:
|
||||
|
||||
@bb.parse.vardepsexclude("FOO", "BAR")
|
||||
def my_function():
|
||||
...
|
||||
"""
|
||||
def inner(f):
|
||||
if not hasattr(f, "bb_vardepsexclude"):
|
||||
f.bb_vardepsexclude = set()
|
||||
f.bb_vardepsexclude |= set(varnames)
|
||||
return f
|
||||
return inner
|
||||
|
||||
from bb.parse.parse_py import __version__, ConfHandler, BBHandler
|
||||
|
||||
@@ -340,7 +340,9 @@ class InheritDeferredNode(AstNode):
|
||||
self.inherit = (classes, filename, lineno)
|
||||
|
||||
def eval(self, data):
|
||||
bb.parse.BBHandler.inherit_defer(*self.inherit, data)
|
||||
inherits = data.getVar('__BBDEFINHERITS', False) or []
|
||||
inherits.append(self.inherit)
|
||||
data.setVar('__BBDEFINHERITS', inherits)
|
||||
|
||||
class AddFragmentsNode(AstNode):
|
||||
def __init__(self, filename, lineno, fragments_path_prefix, fragments_variable, flagged_variables_list_variable):
|
||||
@@ -469,17 +471,6 @@ def finalize(fn, d, variant = None):
|
||||
if d.getVar("_FAILPARSINGERRORHANDLED", False) == True:
|
||||
raise bb.BBHandledException()
|
||||
|
||||
inherits = [x[0] for x in (d.getVar('__BBDEFINHERITS', False) or [('',)])]
|
||||
bb.event.fire(bb.event.RecipePreDeferredInherits(fn, inherits), d)
|
||||
|
||||
while True:
|
||||
inherits = d.getVar('__BBDEFINHERITS', False) or []
|
||||
if not inherits:
|
||||
break
|
||||
inherit, filename, lineno = inherits.pop(0)
|
||||
d.setVar('__BBDEFINHERITS', inherits)
|
||||
bb.parse.BBHandler.inherit(inherit, filename, lineno, d, deferred=True)
|
||||
|
||||
for var in d.getVar('__BBHANDLERS', False) or []:
|
||||
# try to add the handler
|
||||
handlerfn = d.getVarFlag(var, "filename", False)
|
||||
@@ -534,6 +525,14 @@ def multi_finalize(fn, d):
|
||||
logger.debug("Appending .bbappend file %s to %s", append, fn)
|
||||
bb.parse.BBHandler.handle(append, d, True)
|
||||
|
||||
while True:
|
||||
inherits = d.getVar('__BBDEFINHERITS', False) or []
|
||||
if not inherits:
|
||||
break
|
||||
inherit, filename, lineno = inherits.pop(0)
|
||||
d.setVar('__BBDEFINHERITS', inherits)
|
||||
bb.parse.BBHandler.inherit(inherit, filename, lineno, d, deferred=True)
|
||||
|
||||
onlyfinalise = d.getVar("__ONLYFINALISE", False)
|
||||
|
||||
safe_d = d
|
||||
@@ -569,7 +568,7 @@ def multi_finalize(fn, d):
|
||||
d.setVar("BBEXTENDVARIANT", variantmap[name])
|
||||
else:
|
||||
d.setVar("PN", "%s-%s" % (pn, name))
|
||||
bb.parse.BBHandler.inherit_defer(extendedmap[name], fn, 0, d)
|
||||
bb.parse.BBHandler.inherit(extendedmap[name], fn, 0, d)
|
||||
|
||||
safe_d.setVar("BBCLASSEXTEND", extended)
|
||||
_create_variants(datastores, extendedmap.keys(), extendfunc, onlyfinalise)
|
||||
|
||||
@@ -42,22 +42,12 @@ def supports(fn, d):
|
||||
"""Return True if fn has a supported extension"""
|
||||
return os.path.splitext(fn)[-1] in [".bb", ".bbclass", ".inc"]
|
||||
|
||||
def inherit_defer(expression, fn, lineno, d):
|
||||
inherit = (expression, fn, lineno)
|
||||
inherits = d.getVar('__BBDEFINHERITS', False) or []
|
||||
inherits.append(inherit)
|
||||
d.setVar('__BBDEFINHERITS', inherits)
|
||||
|
||||
def inherit(files, fn, lineno, d, deferred=False):
|
||||
__inherit_cache = d.getVar('__inherit_cache', False) or []
|
||||
#if "${" in files and not deferred:
|
||||
# bb.warn("%s:%s has non deferred conditional inherit" % (fn, lineno))
|
||||
files = d.expand(files).split()
|
||||
for file in files:
|
||||
defer = (d.getVar("BB_DEFER_BBCLASSES") or "").split()
|
||||
if not deferred and file in defer:
|
||||
inherit_defer(file, fn, lineno, d)
|
||||
continue
|
||||
classtype = d.getVar("__bbclasstype", False)
|
||||
origfile = file
|
||||
for t in ["classes-" + classtype, "classes"]:
|
||||
|
||||
@@ -23,7 +23,7 @@ __config_regexp__ = re.compile( r"""
|
||||
(?P<var>[a-zA-Z0-9\-_+.${}/~:]*?)
|
||||
(\[(?P<flag>[a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@/]*)\])?
|
||||
|
||||
(?P<whitespace>\s*) (
|
||||
\s* (
|
||||
(?P<colon>:=) |
|
||||
(?P<lazyques>\?\?=) |
|
||||
(?P<ques>\?=) |
|
||||
@@ -32,7 +32,7 @@ __config_regexp__ = re.compile( r"""
|
||||
(?P<predot>=\.) |
|
||||
(?P<postdot>\.=) |
|
||||
=
|
||||
) (?P<whitespace2>\s*)
|
||||
) \s*
|
||||
|
||||
(?!'[^']*'[^']*'$)
|
||||
(?!\"[^\"]*\"[^\"]*\"$)
|
||||
@@ -168,8 +168,6 @@ def feeder(lineno, s, fn, statements, baseconfig=False, conffile=True):
|
||||
groupd = m.groupdict()
|
||||
if groupd['var'] == "":
|
||||
raise ParseError("Empty variable name in assignment: '%s'" % s, fn, lineno);
|
||||
if not groupd['whitespace'] or not groupd['whitespace2']:
|
||||
logger.warning("%s:%s has a lack of whitespace around the assignment: '%s'" % (fn, lineno, s))
|
||||
ast.handleData(statements, fn, lineno, groupd)
|
||||
return
|
||||
|
||||
|
||||
@@ -3034,13 +3034,14 @@ def build_scenequeue_data(sqdata, rqdata, sqrq):
|
||||
rqdata.init_progress_reporter.next_stage(len(rqdata.runtaskentries))
|
||||
|
||||
# Sanity check all dependencies could be changed to setscene task references
|
||||
for tid in rqdata.runtaskentries:
|
||||
for taskcounter, tid in enumerate(rqdata.runtaskentries):
|
||||
if tid in rqdata.runq_setscene_tids:
|
||||
pass
|
||||
elif sq_revdeps_squash[tid]:
|
||||
bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, halting. Please report this problem.")
|
||||
else:
|
||||
del sq_revdeps_squash[tid]
|
||||
rqdata.init_progress_reporter.update(taskcounter)
|
||||
|
||||
rqdata.init_progress_reporter.next_stage()
|
||||
|
||||
|
||||
@@ -7,10 +7,7 @@
|
||||
#
|
||||
|
||||
import contextlib
|
||||
import shutil
|
||||
import unittest
|
||||
import unittest.mock
|
||||
import urllib.parse
|
||||
import hashlib
|
||||
import tempfile
|
||||
import collections
|
||||
@@ -20,7 +17,6 @@ import tarfile
|
||||
from bb.fetch2 import URI
|
||||
from bb.fetch2 import FetchMethod
|
||||
import bb
|
||||
import bb.utils
|
||||
from bb.tests.support.httpserver import HTTPService
|
||||
|
||||
def skipIfNoNetwork():
|
||||
@@ -28,18 +24,6 @@ def skipIfNoNetwork():
|
||||
return unittest.skip("network test")
|
||||
return lambda f: f
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def hide_directory(directory):
|
||||
"""Hide the given directory and restore it after the context is left"""
|
||||
temp_name = directory + ".bak"
|
||||
os.rename(directory, temp_name)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
os.rename(temp_name, directory)
|
||||
|
||||
|
||||
class TestTimeout(Exception):
|
||||
# Indicate to pytest that this is not a test suite
|
||||
__test__ = False
|
||||
@@ -1291,6 +1275,7 @@ class FetcherNetworkTest(FetcherTest):
|
||||
|
||||
class SVNTest(FetcherTest):
|
||||
def skipIfNoSvn():
|
||||
import shutil
|
||||
if not shutil.which("svn"):
|
||||
return unittest.skip("svn not installed, tests being skipped")
|
||||
|
||||
@@ -1413,6 +1398,8 @@ class TrustedNetworksTest(FetcherTest):
|
||||
self.assertFalse(bb.fetch.trusted_network(self.d, url))
|
||||
|
||||
class URLHandle(unittest.TestCase):
|
||||
import urllib.parse
|
||||
|
||||
# Quote password as per RFC3986
|
||||
password = urllib.parse.quote(r"!#$%^&*()-_={}[]\|:?,.<>~`", r"!$&'/()*+,;=")
|
||||
datatable = {
|
||||
@@ -1439,6 +1426,7 @@ class URLHandle(unittest.TestCase):
|
||||
self.assertEqual(result, v)
|
||||
|
||||
def test_encodeurl(self):
|
||||
import urllib.parse
|
||||
for k, v in self.datatable.items():
|
||||
result = bb.fetch.encodeurl(v)
|
||||
if result.startswith("file:"):
|
||||
@@ -2237,33 +2225,6 @@ class GitShallowTest(FetcherTest):
|
||||
self.fetch_shallow()
|
||||
self.assertIn("Unable to find revision v0.0 even from upstream", cm.output[0])
|
||||
|
||||
@skipIfNoNetwork()
|
||||
def test_git_shallow_fetch_premirrors(self):
|
||||
url = "git://git.openembedded.org/bitbake;branch=master;protocol=https"
|
||||
|
||||
# Create a separate premirror directory within tempdir
|
||||
premirror = os.path.join(self.tempdir, "premirror")
|
||||
os.mkdir(premirror)
|
||||
|
||||
# Fetch a non-shallow clone into the premirror subdir
|
||||
self.d.setVar('BB_GIT_SHALLOW', '0')
|
||||
self.d.setVar("DL_DIR", premirror)
|
||||
fetcher, ud = self.fetch(url)
|
||||
|
||||
# Fetch a shallow clone from the premirror subdir with unpacking
|
||||
# using the original recipe URL and the premirror mapping
|
||||
self.d.setVar('BB_GIT_SHALLOW', '1')
|
||||
self.d.setVar("DL_DIR", self.dldir)
|
||||
self.d.setVar('BB_FETCH_PREMIRRORONLY', '1')
|
||||
self.d.setVar('BB_NO_NETWORK', '1')
|
||||
self.d.setVar('BB_GENERATE_MIRROR_TARBALLS', '0')
|
||||
self.d.setVar("PREMIRRORS", "git://.*/.* git://{0};protocol=file".format(premirror + "/git2/" + ud.host + ud.path.replace("/", ".")))
|
||||
fetcher = self.fetch_and_unpack(url)
|
||||
|
||||
# Verify that the unpacked sources are shallow clones
|
||||
self.assertRevCount(1)
|
||||
assert os.path.exists(os.path.join(self.gitdir, '.git', 'shallow'))
|
||||
|
||||
@skipIfNoNetwork()
|
||||
def test_bitbake(self):
|
||||
self.git('remote add --mirror=fetch origin https://github.com/openembedded/bitbake', cwd=self.srcdir)
|
||||
@@ -2308,21 +2269,9 @@ class GitShallowTest(FetcherTest):
|
||||
self.assertRevCount(1)
|
||||
assert os.path.exists(os.path.join(self.gitdir, '.git', 'shallow'))
|
||||
|
||||
def test_shallow_succeeds_with_tag_containing_slash(self):
|
||||
self.add_empty_file('a')
|
||||
self.add_empty_file('b')
|
||||
self.git('tag t1/t2/t3', cwd=self.srcdir)
|
||||
self.assertRevCount(2, cwd=self.srcdir)
|
||||
|
||||
srcrev = self.git('rev-parse HEAD', cwd=self.srcdir).strip()
|
||||
self.d.setVar('SRCREV', srcrev)
|
||||
uri = self.d.getVar('SRC_URI').split()[0]
|
||||
uri = '%s;tag=t1/t2/t3' % uri
|
||||
self.fetch_shallow(uri)
|
||||
self.assertRevCount(1)
|
||||
|
||||
class GitLfsTest(FetcherTest):
|
||||
def skipIfNoGitLFS():
|
||||
import shutil
|
||||
if not shutil.which('git-lfs'):
|
||||
return unittest.skip('git-lfs not installed')
|
||||
return lambda f: f
|
||||
@@ -2346,18 +2295,12 @@ class GitLfsTest(FetcherTest):
|
||||
self.git_init(cwd=self.srcdir)
|
||||
self.commit_file('.gitattributes', '*.mp3 filter=lfs -text')
|
||||
|
||||
def commit(self, *, cwd=None):
|
||||
cwd = cwd or self.srcdir
|
||||
self.git(["commit", "-m", "Change"], cwd=cwd)
|
||||
return self.git(["rev-parse", "HEAD"], cwd=cwd).strip()
|
||||
|
||||
def commit_file(self, filename, content, *, cwd=None):
|
||||
cwd = cwd or self.srcdir
|
||||
|
||||
with open(os.path.join(cwd, filename), "w") as f:
|
||||
def commit_file(self, filename, content):
|
||||
with open(os.path.join(self.srcdir, filename), "w") as f:
|
||||
f.write(content)
|
||||
self.git(["add", filename], cwd=cwd)
|
||||
return self.commit(cwd=cwd)
|
||||
self.git(["add", filename], cwd=self.srcdir)
|
||||
self.git(["commit", "-m", "Change"], cwd=self.srcdir)
|
||||
return self.git(["rev-parse", "HEAD"], cwd=self.srcdir).strip()
|
||||
|
||||
def fetch(self, uri=None, download=True):
|
||||
uris = self.d.getVar('SRC_URI').split()
|
||||
@@ -2377,113 +2320,26 @@ class GitLfsTest(FetcherTest):
|
||||
unpacked_lfs_file = os.path.join(self.d.getVar('WORKDIR'), 'git', "Cat_poster_1.jpg")
|
||||
return unpacked_lfs_file
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_gitsm_lfs(self):
|
||||
"""Test that the gitsm fetcher caches objects stored via LFS"""
|
||||
self.git(["lfs", "install", "--local"], cwd=self.srcdir)
|
||||
|
||||
def fetch_and_verify(revision, filename, content):
|
||||
self.d.setVar('SRCREV', revision)
|
||||
fetcher, ud = self.fetch()
|
||||
|
||||
with hide_directory(submoduledir), hide_directory(self.srcdir):
|
||||
workdir = self.d.getVar('WORKDIR')
|
||||
fetcher.unpack(workdir)
|
||||
|
||||
with open(os.path.join(workdir, "git", filename)) as f:
|
||||
self.assertEqual(f.read(), content)
|
||||
|
||||
# Create the git repository that will later be used as a submodule
|
||||
submoduledir = self.tempdir + "/submodule"
|
||||
bb.utils.mkdirhier(submoduledir)
|
||||
self.git_init(submoduledir)
|
||||
self.git(["lfs", "install", "--local"], cwd=submoduledir)
|
||||
self.commit_file('.gitattributes', '*.mp3 filter=lfs -text', cwd=submoduledir)
|
||||
|
||||
submodule_commit_1 = self.commit_file("a.mp3", "submodule version 1", cwd=submoduledir)
|
||||
_ = self.commit_file("a.mp3", "submodule version 2", cwd=submoduledir)
|
||||
|
||||
# Add the submodule to the repository at its current HEAD revision
|
||||
self.git(["-c", "protocol.file.allow=always", "submodule", "add", submoduledir, "submodule"],
|
||||
cwd=self.srcdir)
|
||||
base_commit_1 = self.commit()
|
||||
|
||||
# Let the submodule point at a different revision
|
||||
self.git(["checkout", submodule_commit_1], self.srcdir + "/submodule")
|
||||
self.git(["add", "submodule"], cwd=self.srcdir)
|
||||
base_commit_2 = self.commit()
|
||||
|
||||
# Add a LFS file to the repository
|
||||
base_commit_3 = self.commit_file("a.mp3", "version 1")
|
||||
# Update the added LFS file
|
||||
base_commit_4 = self.commit_file("a.mp3", "version 2")
|
||||
|
||||
self.d.setVar('SRC_URI', "gitsm://%s;protocol=file;lfs=1;branch=master" % self.srcdir)
|
||||
|
||||
# Verify that LFS objects referenced from submodules are fetched and checked out
|
||||
fetch_and_verify(base_commit_1, "submodule/a.mp3", "submodule version 2")
|
||||
# Verify that the repository inside the download cache of a submodile is extended with any
|
||||
# additional LFS objects needed when checking out a different revision.
|
||||
fetch_and_verify(base_commit_2, "submodule/a.mp3", "submodule version 1")
|
||||
# Verify that LFS objects referenced from the base repository are fetched and checked out
|
||||
fetch_and_verify(base_commit_3, "a.mp3", "version 1")
|
||||
# Verify that the cached repository is extended with any additional LFS objects required
|
||||
# when checking out a different revision.
|
||||
fetch_and_verify(base_commit_4, "a.mp3", "version 2")
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_gitsm_lfs_disabled(self):
|
||||
"""Test that the gitsm fetcher does not use LFS when explicitly disabled"""
|
||||
self.git(["lfs", "install", "--local"], cwd=self.srcdir)
|
||||
|
||||
def fetch_and_verify(revision, filename, content):
|
||||
self.d.setVar('SRCREV', revision)
|
||||
fetcher, ud = self.fetch()
|
||||
|
||||
with hide_directory(submoduledir), hide_directory(self.srcdir):
|
||||
workdir = self.d.getVar('WORKDIR')
|
||||
fetcher.unpack(workdir)
|
||||
|
||||
with open(os.path.join(workdir, "git", filename)) as f:
|
||||
# Assume that LFS did not perform smudging when the expected content is
|
||||
# missing.
|
||||
self.assertNotEqual(f.read(), content)
|
||||
|
||||
# Create the git repository that will later be used as a submodule
|
||||
submoduledir = self.tempdir + "/submodule"
|
||||
bb.utils.mkdirhier(submoduledir)
|
||||
self.git_init(submoduledir)
|
||||
self.git(["lfs", "install", "--local"], cwd=submoduledir)
|
||||
self.commit_file('.gitattributes', '*.mp3 filter=lfs -text', cwd=submoduledir)
|
||||
|
||||
submodule_commit_1 = self.commit_file("a.mp3", "submodule version 1", cwd=submoduledir)
|
||||
|
||||
# Add the submodule to the repository at its current HEAD revision
|
||||
self.git(["-c", "protocol.file.allow=always", "submodule", "add", submoduledir, "submodule"],
|
||||
cwd=self.srcdir)
|
||||
base_commit_1 = self.commit()
|
||||
|
||||
# Add a LFS file to the repository
|
||||
base_commit_2 = self.commit_file("a.mp3", "version 1")
|
||||
|
||||
self.d.setVar('SRC_URI', "gitsm://%s;protocol=file;lfs=1;branch=master;lfs=0" % self.srcdir)
|
||||
|
||||
# Verify that LFS objects referenced from submodules are not fetched nor checked out
|
||||
fetch_and_verify(base_commit_1, "submodule/a.mp3", "submodule version 1")
|
||||
# Verify that the LFS objects referenced from the base repository are not fetched nor
|
||||
# checked out
|
||||
fetch_and_verify(base_commit_2, "a.mp3", "version 1")
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_fetch_lfs_on_srcrev_change(self):
|
||||
"""Test if fetch downloads missing LFS objects when a different revision within an existing repository is requested"""
|
||||
self.git(["lfs", "install", "--local"], cwd=self.srcdir)
|
||||
|
||||
@contextlib.contextmanager
|
||||
def hide_upstream_repository():
|
||||
"""Hide the upstream repository to make sure that git lfs cannot pull from it"""
|
||||
temp_name = self.srcdir + ".bak"
|
||||
os.rename(self.srcdir, temp_name)
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
os.rename(temp_name, self.srcdir)
|
||||
|
||||
def fetch_and_verify(revision, filename, content):
|
||||
self.d.setVar('SRCREV', revision)
|
||||
fetcher, ud = self.fetch()
|
||||
|
||||
with hide_directory(self.srcdir):
|
||||
with hide_upstream_repository():
|
||||
workdir = self.d.getVar('WORKDIR')
|
||||
fetcher.unpack(workdir)
|
||||
|
||||
@@ -2535,6 +2391,8 @@ class GitLfsTest(FetcherTest):
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_lfs_enabled(self):
|
||||
import shutil
|
||||
|
||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
@@ -2545,6 +2403,8 @@ class GitLfsTest(FetcherTest):
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_lfs_disabled(self):
|
||||
import shutil
|
||||
|
||||
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
@@ -2553,64 +2413,48 @@ class GitLfsTest(FetcherTest):
|
||||
fetcher, ud = self.fetch()
|
||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||
|
||||
@skipIfNoGitLFS()
|
||||
def test_lfs_enabled_not_installed_during_unpack(self):
|
||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
# Careful: suppress initial attempt at downloading
|
||||
fetcher, ud = self.fetch(uri=None, download=False)
|
||||
|
||||
fetcher.download()
|
||||
# If git-lfs cannot be found, the unpack should throw an error
|
||||
with self.assertRaises(bb.fetch2.FetchError):
|
||||
with unittest.mock.patch("shutil.which", return_value=None):
|
||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||
|
||||
def test_lfs_enabled_not_installed(self):
|
||||
import shutil
|
||||
|
||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
# Careful: suppress initial attempt at downloading
|
||||
fetcher, ud = self.fetch(uri=None, download=False)
|
||||
|
||||
# If git-lfs cannot be found, the download should throw an error
|
||||
with unittest.mock.patch("shutil.which", return_value=None):
|
||||
# Artificially assert that git-lfs is not installed, so
|
||||
# we can verify a failure to unpack in it's absence.
|
||||
old_find_git_lfs = ud.method._find_git_lfs
|
||||
try:
|
||||
# If git-lfs cannot be found, the unpack should throw an error
|
||||
with self.assertRaises(bb.fetch2.FetchError):
|
||||
fetcher.download()
|
||||
ud.method._find_git_lfs = lambda d: False
|
||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||
finally:
|
||||
ud.method._find_git_lfs = old_find_git_lfs
|
||||
|
||||
def test_lfs_disabled_not_installed(self):
|
||||
import shutil
|
||||
|
||||
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
# Careful: suppress initial attempt at downloading
|
||||
fetcher, ud = self.fetch(uri=None, download=False)
|
||||
|
||||
# Even if git-lfs cannot be found, the download / unpack should be successful
|
||||
with unittest.mock.patch("shutil.which", return_value=None):
|
||||
fetcher.download()
|
||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||
|
||||
def test_lfs_enabled_not_installed_but_not_needed(self):
|
||||
srcdir = os.path.join(self.tempdir, "emptygit")
|
||||
bb.utils.mkdirhier(srcdir)
|
||||
self.git_init(srcdir)
|
||||
self.commit_file("test", "test content", cwd=srcdir)
|
||||
|
||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % srcdir
|
||||
self.d.setVar('SRC_URI', uri)
|
||||
|
||||
# Careful: suppress initial attempt at downloading
|
||||
fetcher, ud = self.fetch(uri=None, download=False)
|
||||
|
||||
# It shouldnt't matter that git-lfs cannot be found as the repository configuration does not
|
||||
# specify any LFS filters.
|
||||
with unittest.mock.patch("shutil.which", return_value=None):
|
||||
# Artificially assert that git-lfs is not installed, so
|
||||
# we can verify a failure to unpack in it's absence.
|
||||
old_find_git_lfs = ud.method._find_git_lfs
|
||||
try:
|
||||
# Even if git-lfs cannot be found, the unpack should be successful
|
||||
fetcher.download()
|
||||
ud.method._find_git_lfs = lambda d: False
|
||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||
finally:
|
||||
ud.method._find_git_lfs = old_find_git_lfs
|
||||
|
||||
class GitURLWithSpacesTest(FetcherTest):
|
||||
test_git_urls = {
|
||||
@@ -2767,6 +2611,7 @@ class CrateTest(FetcherTest):
|
||||
|
||||
class NPMTest(FetcherTest):
|
||||
def skipIfNoNpm():
|
||||
import shutil
|
||||
if not shutil.which('npm'):
|
||||
return unittest.skip('npm not installed')
|
||||
return lambda f: f
|
||||
@@ -3294,13 +3139,6 @@ class GitTagVerificationTests(FetcherTest):
|
||||
fetcher.download()
|
||||
fetcher.unpack(self.unpackdir)
|
||||
|
||||
def test_annotated_tag_rev_match(self):
|
||||
# Test a url with rev= and tag= set works
|
||||
# rev is the annotated tag revision in this case
|
||||
fetcher = bb.fetch.Fetch(["git://git.openembedded.org/bitbake;branch=2.8;protocol=https;rev=6d363159e4b7dc566fc40d069b2615e61774a7d8;tag=2.8.7"], self.d)
|
||||
fetcher.download()
|
||||
fetcher.unpack(self.unpackdir)
|
||||
|
||||
@skipIfNoNetwork()
|
||||
def test_tag_rev_match2(self):
|
||||
# Test a url with SRCREV and tag= set works
|
||||
@@ -3449,10 +3287,10 @@ class FetchPremirroronlyNetworkTest(FetcherTest):
|
||||
self.d.setVar("PREMIRRORS", self.recipe_url + " " + "file://{}".format(self.mirrordir) + " \n")
|
||||
|
||||
def make_git_repo(self):
|
||||
import shutil
|
||||
self.mirrorname = "git2_git.yoctoproject.org.fstests.tar.gz"
|
||||
os.makedirs(self.clonedir)
|
||||
self.git("clone --bare {}".format(self.recipe_url), self.clonedir)
|
||||
self.git("update-ref HEAD 15413486df1f5a5b5af699b6f3ba5f0984e52a9f", self.gitdir)
|
||||
self.git("clone --bare --shallow-since=\"01.01.2013\" {}".format(self.recipe_url), self.clonedir)
|
||||
bb.process.run('tar -czvf {} .'.format(os.path.join(self.mirrordir, self.mirrorname)), cwd = self.gitdir)
|
||||
shutil.rmtree(self.clonedir)
|
||||
|
||||
@@ -3460,7 +3298,7 @@ class FetchPremirroronlyNetworkTest(FetcherTest):
|
||||
def test_mirror_tarball_updated(self):
|
||||
self.make_git_repo()
|
||||
## Upstream commit is in the mirror
|
||||
self.d.setVar("SRCREV", "15413486df1f5a5b5af699b6f3ba5f0984e52a9f")
|
||||
self.d.setVar("SRCREV", "49d65d53c2bf558ae6e9185af0f3af7b79d255ec")
|
||||
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||
fetcher.download()
|
||||
|
||||
@@ -3468,7 +3306,7 @@ class FetchPremirroronlyNetworkTest(FetcherTest):
|
||||
def test_mirror_tarball_outdated(self):
|
||||
self.make_git_repo()
|
||||
## Upstream commit not in the mirror
|
||||
self.d.setVar("SRCREV", "49d65d53c2bf558ae6e9185af0f3af7b79d255ec")
|
||||
self.d.setVar("SRCREV", "15413486df1f5a5b5af699b6f3ba5f0984e52a9f")
|
||||
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||
with self.assertRaises(bb.fetch2.NetworkAccess):
|
||||
fetcher.download()
|
||||
@@ -3478,6 +3316,7 @@ class FetchPremirroronlyMercurialTest(FetcherTest):
|
||||
the test covers also basic hg:// clone (see fetch_and_create_tarball
|
||||
"""
|
||||
def skipIfNoHg():
|
||||
import shutil
|
||||
if not shutil.which('hg'):
|
||||
return unittest.skip('Mercurial not installed')
|
||||
return lambda f: f
|
||||
@@ -3533,6 +3372,7 @@ class FetchPremirroronlyBrokenTarball(FetcherTest):
|
||||
targz.write("This is not tar.gz file!")
|
||||
|
||||
def test_mirror_broken_download(self):
|
||||
import sys
|
||||
self.d.setVar("SRCREV", "0"*40)
|
||||
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||
with self.assertRaises(bb.fetch2.FetchError), self.assertLogs() as logs:
|
||||
|
||||
@@ -353,7 +353,7 @@ def print_event_log(event, includelogs, loglines, termfilter):
|
||||
termfilter.clearFooter()
|
||||
bb.error("Logfile of failure stored in: %s" % logfile)
|
||||
if includelogs and not event.errprinted:
|
||||
bb.plain("Log data follows:")
|
||||
print("Log data follows:")
|
||||
f = open(logfile, "r")
|
||||
lines = []
|
||||
while True:
|
||||
@@ -366,11 +366,11 @@ def print_event_log(event, includelogs, loglines, termfilter):
|
||||
if len(lines) > int(loglines):
|
||||
lines.pop(0)
|
||||
else:
|
||||
bb.plain('| %s' % l)
|
||||
print('| %s' % l)
|
||||
f.close()
|
||||
if lines:
|
||||
for line in lines:
|
||||
bb.plain(line)
|
||||
print(line)
|
||||
|
||||
def _log_settings_from_server(server, observe_only):
|
||||
# Get values of variables which control our output
|
||||
|
||||
@@ -82,16 +82,7 @@ def explode_version(s):
|
||||
return r
|
||||
|
||||
def split_version(s):
|
||||
"""Split a version string into its constituent parts (PE, PV, PR).
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``s``: version string. The format of the input string should be::
|
||||
|
||||
${PE}:${PV}-${PR}
|
||||
|
||||
Returns a tuple ``(pe, pv, pr)``.
|
||||
"""
|
||||
"""Split a version string into its constituent parts (PE, PV, PR)"""
|
||||
s = s.strip(" <>=")
|
||||
e = 0
|
||||
if s.count(':'):
|
||||
@@ -143,30 +134,16 @@ def vercmp(ta, tb):
|
||||
return r
|
||||
|
||||
def vercmp_string(a, b):
|
||||
""" Split version strings using ``bb.utils.split_version()`` and compare
|
||||
them with ``bb.utils.vercmp().``
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``a``: left version string operand.
|
||||
- ``b``: right version string operand.
|
||||
|
||||
Returns what ``bb.utils.vercmp()`` returns."""
|
||||
""" Split version strings and compare them """
|
||||
ta = split_version(a)
|
||||
tb = split_version(b)
|
||||
return vercmp(ta, tb)
|
||||
|
||||
def vercmp_string_op(a, b, op):
|
||||
"""
|
||||
Takes the return value ``bb.utils.vercmp()`` and returns the operation
|
||||
defined by ``op`` between the return value and 0.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``a``: left version string operand.
|
||||
- ``b``: right version string operand.
|
||||
- ``op``: operator string. Can be one of ``=``, ``==``, ``<=``, ``>=``,
|
||||
``>``, ``>>``, ``<``, ``<<`` or ``!=``.
|
||||
Compare two versions and check if the specified comparison operator matches the result of the comparison.
|
||||
This function is fairly liberal about what operators it will accept since there are a variety of styles
|
||||
depending on the context.
|
||||
"""
|
||||
res = vercmp_string(a, b)
|
||||
if op in ('=', '=='):
|
||||
@@ -186,16 +163,9 @@ def vercmp_string_op(a, b, op):
|
||||
|
||||
def explode_deps(s):
|
||||
"""
|
||||
Takes an RDEPENDS style string of format::
|
||||
|
||||
DEPEND1 (optional version) DEPEND2 (optional version) ...
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``s``: input RDEPENDS style string
|
||||
|
||||
Returns a list of dependencies.
|
||||
|
||||
Take an RDEPENDS style string of format:
|
||||
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||
and return a list of dependencies.
|
||||
Version information is ignored.
|
||||
"""
|
||||
r = []
|
||||
@@ -217,17 +187,9 @@ def explode_deps(s):
|
||||
|
||||
def explode_dep_versions2(s, *, sort=True):
|
||||
"""
|
||||
Takes an RDEPENDS style string of format::
|
||||
|
||||
DEPEND1 (optional version) DEPEND2 (optional version) ...
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``s``: input RDEPENDS style string
|
||||
- ``*``: *Unused*.
|
||||
- ``sort``: whether to sort the output or not.
|
||||
|
||||
Returns a dictionary of dependencies and versions.
|
||||
Take an RDEPENDS style string of format:
|
||||
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||
and return a dictionary of dependencies and versions.
|
||||
"""
|
||||
r = collections.OrderedDict()
|
||||
l = s.replace(",", "").split()
|
||||
@@ -292,17 +254,10 @@ def explode_dep_versions2(s, *, sort=True):
|
||||
|
||||
def explode_dep_versions(s):
|
||||
"""
|
||||
Take an RDEPENDS style string of format::
|
||||
|
||||
DEPEND1 (optional version) DEPEND2 (optional version) ...
|
||||
|
||||
Skips null values and items appeared in dependency string multiple times.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``s``: input RDEPENDS style string
|
||||
|
||||
Returns a dictionary of dependencies and versions.
|
||||
Take an RDEPENDS style string of format:
|
||||
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||
skip null value and items appeared in dependency string multiple times
|
||||
and return a dictionary of dependencies and versions.
|
||||
"""
|
||||
r = explode_dep_versions2(s)
|
||||
for d in r:
|
||||
@@ -316,17 +271,7 @@ def explode_dep_versions(s):
|
||||
|
||||
def join_deps(deps, commasep=True):
|
||||
"""
|
||||
Take a result from ``bb.utils.explode_dep_versions()`` and generate a
|
||||
dependency string.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``deps``: dictionary of dependencies and versions.
|
||||
- ``commasep``: makes the return value separated by commas if ``True``,
|
||||
separated by spaces otherwise.
|
||||
|
||||
Returns a comma-separated (space-separated if ``comma-sep`` is ``False``)
|
||||
string of dependencies and versions.
|
||||
Take the result from explode_dep_versions and generate a dependency string
|
||||
"""
|
||||
result = []
|
||||
for dep in deps:
|
||||
@@ -488,11 +433,7 @@ def better_eval(source, locals, extraglobals = None):
|
||||
|
||||
@contextmanager
|
||||
def fileslocked(files, *args, **kwargs):
|
||||
"""Context manager for locking and unlocking file locks. Uses
|
||||
``bb.utils.lockfile()`` and ``bb.utils.unlockfile()`` to lock and unlock
|
||||
files.
|
||||
|
||||
No return value."""
|
||||
"""Context manager for locking and unlocking file locks."""
|
||||
locks = []
|
||||
if files:
|
||||
for lockfile in files:
|
||||
@@ -509,23 +450,14 @@ def fileslocked(files, *args, **kwargs):
|
||||
|
||||
def lockfile(name, shared=False, retry=True, block=False):
|
||||
"""
|
||||
Use the specified file (with filename ``name``) as a lock file, return when
|
||||
the lock has been acquired. Returns a variable to pass to unlockfile().
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``shared``: sets the lock as a shared lock instead of an
|
||||
exclusive lock.
|
||||
- ``retry``: ``True`` to re-try locking if it fails, ``False``
|
||||
otherwise.
|
||||
- ``block``: ``True`` to block until the lock succeeds,
|
||||
``False`` otherwise.
|
||||
|
||||
Use the specified file as a lock file, return when the lock has
|
||||
been acquired. Returns a variable to pass to unlockfile().
|
||||
Parameters:
|
||||
retry: True to re-try locking if it fails, False otherwise
|
||||
block: True to block until the lock succeeds, False otherwise
|
||||
The retry and block parameters are kind of equivalent unless you
|
||||
consider the possibility of sending a signal to the process to break
|
||||
out - at which point you want block=True rather than retry=True.
|
||||
|
||||
Returns the locked file descriptor in case of success, ``None`` otherwise.
|
||||
"""
|
||||
basename = os.path.basename(name)
|
||||
if len(basename) > 255:
|
||||
@@ -584,13 +516,7 @@ def lockfile(name, shared=False, retry=True, block=False):
|
||||
|
||||
def unlockfile(lf):
|
||||
"""
|
||||
Unlock a file locked using ``bb.utils.lockfile()``.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``lf``: the locked file descriptor.
|
||||
|
||||
No return value.
|
||||
Unlock a file locked using lockfile()
|
||||
"""
|
||||
try:
|
||||
# If we had a shared lock, we need to promote to exclusive before
|
||||
@@ -618,11 +544,7 @@ def _hasher(method, filename):
|
||||
|
||||
def md5_file(filename):
|
||||
"""
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the input file.
|
||||
|
||||
Returns the hexadecimal string representation of the MD5 checksum of filename.
|
||||
Return the hex string representation of the MD5 checksum of filename.
|
||||
"""
|
||||
import hashlib
|
||||
try:
|
||||
@@ -634,59 +556,39 @@ def md5_file(filename):
|
||||
|
||||
def sha256_file(filename):
|
||||
"""
|
||||
Returns the hexadecimal representation of the 256-bit SHA checksum of
|
||||
Return the hex string representation of the 256-bit SHA checksum of
|
||||
filename.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the file.
|
||||
"""
|
||||
import hashlib
|
||||
return _hasher(hashlib.sha256(), filename)
|
||||
|
||||
def sha1_file(filename):
|
||||
"""
|
||||
Returns the hexadecimal representation of the SHA1 checksum of the filename
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the file.
|
||||
Return the hex string representation of the SHA1 checksum of the filename
|
||||
"""
|
||||
import hashlib
|
||||
return _hasher(hashlib.sha1(), filename)
|
||||
|
||||
def sha384_file(filename):
|
||||
"""
|
||||
Returns the hexadecimal representation of the SHA384 checksum of the filename
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the file.
|
||||
Return the hex string representation of the SHA384 checksum of the filename
|
||||
"""
|
||||
import hashlib
|
||||
return _hasher(hashlib.sha384(), filename)
|
||||
|
||||
def sha512_file(filename):
|
||||
"""
|
||||
Returns the hexadecimal representation of the SHA512 checksum of the filename
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the file.
|
||||
Return the hex string representation of the SHA512 checksum of the filename
|
||||
"""
|
||||
import hashlib
|
||||
return _hasher(hashlib.sha512(), filename)
|
||||
|
||||
def goh1_file(filename):
|
||||
"""
|
||||
Returns the hexadecimal string representation of the Go mod h1 checksum of the
|
||||
Return the hex string representation of the Go mod h1 checksum of the
|
||||
filename. The Go mod h1 checksum uses the Go dirhash package. The package
|
||||
defines hashes over directory trees and is used by go mod for mod files and
|
||||
zip archives.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: path to the file.
|
||||
"""
|
||||
import hashlib
|
||||
import zipfile
|
||||
@@ -707,8 +609,8 @@ def goh1_file(filename):
|
||||
return method.hexdigest()
|
||||
|
||||
def preserved_envvars_exported():
|
||||
"""Returns the list of variables which are taken from the environment and
|
||||
placed in and exported from the metadata."""
|
||||
"""Variables which are taken from the environment and placed in and exported
|
||||
from the metadata"""
|
||||
return [
|
||||
'BB_TASKHASH',
|
||||
'HOME',
|
||||
@@ -722,8 +624,7 @@ def preserved_envvars_exported():
|
||||
]
|
||||
|
||||
def preserved_envvars():
|
||||
"""Returns the list of variables which are taken from the environment and
|
||||
placed in the metadata."""
|
||||
"""Variables which are taken from the environment and placed in the metadata"""
|
||||
v = [
|
||||
'BBPATH',
|
||||
'BB_PRESERVE_ENV',
|
||||
@@ -732,9 +633,7 @@ def preserved_envvars():
|
||||
return v + preserved_envvars_exported()
|
||||
|
||||
def check_system_locale():
|
||||
"""Make sure the required system locale are available and configured.
|
||||
|
||||
No return value."""
|
||||
"""Make sure the required system locale are available and configured"""
|
||||
default_locale = locale.getlocale(locale.LC_CTYPE)
|
||||
|
||||
try:
|
||||
@@ -752,12 +651,6 @@ def filter_environment(good_vars):
|
||||
"""
|
||||
Create a pristine environment for bitbake. This will remove variables that
|
||||
are not known and may influence the build in a negative way.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``good_vars``: list of variable to exclude from the filtering.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
|
||||
removed_vars = {}
|
||||
@@ -802,8 +695,6 @@ def clean_environment():
|
||||
"""
|
||||
Clean up any spurious environment variables. This will remove any
|
||||
variables the user hasn't chosen to preserve.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
if 'BB_PRESERVE_ENV' not in os.environ:
|
||||
good_vars = approved_variables()
|
||||
@@ -814,8 +705,6 @@ def clean_environment():
|
||||
def empty_environment():
|
||||
"""
|
||||
Remove all variables from the environment.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
for s in list(os.environ.keys()):
|
||||
os.unsetenv(s)
|
||||
@@ -824,12 +713,6 @@ def empty_environment():
|
||||
def build_environment(d):
|
||||
"""
|
||||
Build an environment from all exported variables.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``d``: the data store.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
import bb.data
|
||||
for var in bb.data.keys(d):
|
||||
@@ -854,17 +737,7 @@ def _check_unsafe_delete_path(path):
|
||||
return False
|
||||
|
||||
def remove(path, recurse=False, ionice=False):
|
||||
"""Equivalent to rm -f or rm -rf.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``path``: path to file/directory to remove.
|
||||
- ``recurse``: deletes recursively if ``True``.
|
||||
- ``ionice``: prepends ``ionice -c 3`` to the ``rm`` command. See ``man
|
||||
ionice``.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
"""Equivalent to rm -f or rm -rf"""
|
||||
if not path:
|
||||
return
|
||||
if recurse:
|
||||
@@ -885,17 +758,7 @@ def remove(path, recurse=False, ionice=False):
|
||||
raise
|
||||
|
||||
def prunedir(topdir, ionice=False):
|
||||
"""
|
||||
Delete everything reachable from the directory named in ``topdir``.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``topdir``: directory path.
|
||||
- ``ionice``: prepends ``ionice -c 3`` to the ``rm`` command. See ``man
|
||||
ionice``.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
""" Delete everything reachable from the directory named in 'topdir'. """
|
||||
# CAUTION: This is dangerous!
|
||||
if _check_unsafe_delete_path(topdir):
|
||||
raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir)
|
||||
@@ -907,15 +770,8 @@ def prunedir(topdir, ionice=False):
|
||||
#
|
||||
def prune_suffix(var, suffixes, d):
|
||||
"""
|
||||
Check if ``var`` ends with any of the suffixes listed in ``suffixes`` and
|
||||
remove it if found.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``var``: string to check for suffixes.
|
||||
- ``suffixes``: list of strings representing suffixes to check for.
|
||||
|
||||
Returns the string ``var`` without the suffix.
|
||||
See if var ends with any of the suffixes listed and
|
||||
remove it if found
|
||||
"""
|
||||
for suffix in suffixes:
|
||||
if suffix and var.endswith(suffix):
|
||||
@@ -924,13 +780,7 @@ def prune_suffix(var, suffixes, d):
|
||||
|
||||
def mkdirhier(directory):
|
||||
"""Create a directory like 'mkdir -p', but does not complain if
|
||||
directory already exists like ``os.makedirs()``.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``directory``: path to the directory.
|
||||
|
||||
No return value.
|
||||
directory already exists like os.makedirs
|
||||
"""
|
||||
if '${' in str(directory):
|
||||
bb.fatal("Directory name {} contains unexpanded bitbake variable. This may cause build failures and WORKDIR polution.".format(directory))
|
||||
@@ -941,24 +791,10 @@ def mkdirhier(directory):
|
||||
raise e
|
||||
|
||||
def movefile(src, dest, newmtime = None, sstat = None):
|
||||
"""Moves a file from ``src`` to ``dest``, preserving all permissions and
|
||||
"""Moves a file from src to dest, preserving all permissions and
|
||||
attributes; mtime will be preserved even when moving across
|
||||
filesystems. Returns ``True`` on success and ``False`` on failure. Move is
|
||||
filesystems. Returns true on success and false on failure. Move is
|
||||
atomic.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``src`` -- Source file.
|
||||
- ``dest`` -- Destination file.
|
||||
- ``newmtime`` -- new mtime to be passed as float seconds since the epoch.
|
||||
- ``sstat`` -- os.stat_result to use for the destination file.
|
||||
|
||||
Returns an ``os.stat_result`` of the destination file if the
|
||||
source file is a symbolic link or the ``sstat`` argument represents a
|
||||
symbolic link - in which case the destination file will also be created as
|
||||
a symbolic link.
|
||||
|
||||
Otherwise, returns ``newmtime`` on success and ``False`` on failure.
|
||||
"""
|
||||
|
||||
#print "movefile(" + src + "," + dest + "," + str(newmtime) + "," + str(sstat) + ")"
|
||||
@@ -1049,24 +885,9 @@ def movefile(src, dest, newmtime = None, sstat = None):
|
||||
|
||||
def copyfile(src, dest, newmtime = None, sstat = None):
|
||||
"""
|
||||
Copies a file from ``src`` to ``dest``, preserving all permissions and
|
||||
Copies a file from src to dest, preserving all permissions and
|
||||
attributes; mtime will be preserved even when moving across
|
||||
filesystems.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``src``: Source file.
|
||||
- ``dest``: Destination file.
|
||||
- ``newmtime``: new mtime to be passed as float seconds since the epoch.
|
||||
- ``sstat``: os.stat_result to use for the destination file.
|
||||
|
||||
Returns an ``os.stat_result`` of the destination file if the
|
||||
source file is a symbolic link or the ``sstat`` argument represents a
|
||||
symbolic link - in which case the destination file will also be created as
|
||||
a symbolic link.
|
||||
|
||||
Otherwise, returns ``newmtime`` on success and ``False`` on failure.
|
||||
|
||||
filesystems. Returns true on success and false on failure.
|
||||
"""
|
||||
#print "copyfile(" + src + "," + dest + "," + str(newmtime) + "," + str(sstat) + ")"
|
||||
try:
|
||||
@@ -1144,16 +965,10 @@ def copyfile(src, dest, newmtime = None, sstat = None):
|
||||
|
||||
def break_hardlinks(src, sstat = None):
|
||||
"""
|
||||
Ensures ``src`` is the only hardlink to this file. Other hardlinks,
|
||||
Ensures src is the only hardlink to this file. Other hardlinks,
|
||||
if any, are not affected (other than in their st_nlink value, of
|
||||
course).
|
||||
course). Returns true on success and false on failure.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``src``: source file path.
|
||||
- ``sstat``: os.stat_result to use when checking if the file is a link.
|
||||
|
||||
Returns ``True`` on success and ``False`` on failure.
|
||||
"""
|
||||
try:
|
||||
if not sstat:
|
||||
@@ -1167,24 +982,11 @@ def break_hardlinks(src, sstat = None):
|
||||
|
||||
def which(path, item, direction = 0, history = False, executable=False):
|
||||
"""
|
||||
Locate ``item`` in the list of paths ``path`` (colon separated string like
|
||||
``$PATH``).
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``path``: list of colon-separated paths.
|
||||
- ``item``: string to search for.
|
||||
- ``direction``: if non-zero then the list is reversed.
|
||||
- ``history``: if ``True`` then the list of candidates also returned as
|
||||
``result,history`` where ``history`` is the list of previous path
|
||||
checked.
|
||||
- ``executable``: if ``True`` then the candidate defined by ``path`` has
|
||||
to be an executable file, otherwise if ``False`` the candidate simply
|
||||
has to exist.
|
||||
|
||||
Returns the item if found in the list of path, otherwise an empty string.
|
||||
If ``history`` is ``True``, return the list of previous path checked in a
|
||||
tuple with the found (or not found) item as ``(item, history)``.
|
||||
Locate `item` in the list of paths `path` (colon separated string like $PATH).
|
||||
If `direction` is non-zero then the list is reversed.
|
||||
If `history` is True then the list of candidates also returned as result,history.
|
||||
If `executable` is True then the candidate has to be an executable file,
|
||||
otherwise the candidate simply has to exist.
|
||||
"""
|
||||
|
||||
if executable:
|
||||
@@ -1215,8 +1017,6 @@ def which(path, item, direction = 0, history = False, executable=False):
|
||||
def umask(new_mask):
|
||||
"""
|
||||
Context manager to set the umask to a specific mask, and restore it afterwards.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
current_mask = os.umask(new_mask)
|
||||
try:
|
||||
@@ -1227,17 +1027,7 @@ def umask(new_mask):
|
||||
def to_boolean(string, default=None):
|
||||
"""
|
||||
Check input string and return boolean value True/False/None
|
||||
depending upon the checks.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``string``: input string.
|
||||
- ``default``: default return value if the input ``string`` is ``None``,
|
||||
``0``, ``False`` or an empty string.
|
||||
|
||||
Returns ``True`` if the string is one of "y", "yes", "1", "true", ``False``
|
||||
if the string is one of "n", "no", "0", or "false". Return ``default`` if
|
||||
the input ``string`` is ``None``, ``0``, ``False`` or an empty string.
|
||||
depending upon the checks
|
||||
"""
|
||||
if not string:
|
||||
return default
|
||||
@@ -1258,17 +1048,18 @@ def contains(variable, checkvalues, truevalue, falsevalue, d):
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
- ``checkvalues``: if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
- ``truevalue``: the value to return if checkvalues is a subset of variable.
|
||||
- ``falsevalue``: the value to return if variable is empty or if checkvalues is
|
||||
not a subset of variable.
|
||||
- ``d``: the data store.
|
||||
variable -- the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
|
||||
Returns ``True`` if the variable contains the values specified, ``False``
|
||||
otherwise.
|
||||
checkvalues -- if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
|
||||
truevalue -- the value to return if checkvalues is a subset of variable.
|
||||
|
||||
falsevalue -- the value to return if variable is empty or if checkvalues is
|
||||
not a subset of variable.
|
||||
|
||||
d -- the data store.
|
||||
"""
|
||||
|
||||
val = d.getVar(variable)
|
||||
@@ -1288,17 +1079,18 @@ def contains_any(variable, checkvalues, truevalue, falsevalue, d):
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
- ``checkvalues``: if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
- ``truevalue``: the value to return if checkvalues is a subset of variable.
|
||||
- ``falsevalue``: the value to return if variable is empty or if checkvalues is
|
||||
not a subset of variable.
|
||||
- ``d``: the data store.
|
||||
variable -- the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
|
||||
Returns ``True`` if the variable contains any of the values specified,
|
||||
``False`` otherwise.
|
||||
checkvalues -- if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
|
||||
truevalue -- the value to return if checkvalues is a subset of variable.
|
||||
|
||||
falsevalue -- the value to return if variable is empty or if checkvalues is
|
||||
not a subset of variable.
|
||||
|
||||
d -- the data store.
|
||||
"""
|
||||
val = d.getVar(variable)
|
||||
if not val:
|
||||
@@ -1313,17 +1105,17 @@ def contains_any(variable, checkvalues, truevalue, falsevalue, d):
|
||||
return falsevalue
|
||||
|
||||
def filter(variable, checkvalues, d):
|
||||
"""Return all words in the variable that are present in the ``checkvalues``.
|
||||
"""Return all words in the variable that are present in the checkvalues.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
- ``checkvalues``: if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
- ``d``: the data store.
|
||||
variable -- the variable name. This will be fetched and expanded (using
|
||||
d.getVar(variable)) and then split into a set().
|
||||
|
||||
Returns a list of string.
|
||||
checkvalues -- if this is a string it is split on whitespace into a set(),
|
||||
otherwise coerced directly into a set().
|
||||
|
||||
d -- the data store.
|
||||
"""
|
||||
|
||||
val = d.getVar(variable)
|
||||
@@ -1339,27 +1131,8 @@ def filter(variable, checkvalues, d):
|
||||
|
||||
def get_referenced_vars(start_expr, d):
|
||||
"""
|
||||
Get the names of the variables referenced in a given expression.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``start_expr``: the expression where to look for variables references.
|
||||
|
||||
For example::
|
||||
|
||||
${VAR_A} string ${VAR_B}
|
||||
|
||||
Or::
|
||||
|
||||
${@d.getVar('VAR')}
|
||||
|
||||
If a variables makes references to other variables, the latter are also
|
||||
returned recursively.
|
||||
|
||||
- ``d``: the data store.
|
||||
|
||||
Returns the names of vars referenced in ``start_expr`` (recursively), in
|
||||
quasi-BFS order (variables within the same level are ordered arbitrarily).
|
||||
:return: names of vars referenced in start_expr (recursively), in quasi-BFS order (variables within the same level
|
||||
are ordered arbitrarily)
|
||||
"""
|
||||
|
||||
seen = set()
|
||||
@@ -1439,9 +1212,7 @@ def multiprocessingpool(*args, **kwargs):
|
||||
return multiprocessing.Pool(*args, **kwargs)
|
||||
|
||||
def exec_flat_python_func(func, *args, **kwargs):
|
||||
"""Execute a flat python function (defined with ``def funcname(args): ...``)
|
||||
|
||||
Returns the return value of the function."""
|
||||
"""Execute a flat python function (defined with def funcname(args):...)"""
|
||||
# Prepare a small piece of python code which calls the requested function
|
||||
# To do this we need to prepare two things - a set of variables we can use to pass
|
||||
# the values of arguments into the calling function, and the list of arguments for
|
||||
@@ -1467,57 +1238,48 @@ def edit_metadata(meta_lines, variables, varfunc, match_overrides=False):
|
||||
"""Edit lines from a recipe or config file and modify one or more
|
||||
specified variable values set in the file using a specified callback
|
||||
function. Lines are expected to have trailing newlines.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``meta_lines``: lines from the file; can be a list or an iterable
|
||||
(e.g. file pointer)
|
||||
- ``variables``: a list of variable names to look for. Functions
|
||||
may also be specified, but must be specified with ``()`` at
|
||||
the end of the name. Note that the function doesn't have
|
||||
any intrinsic understanding of ``:append``, ``:prepend``, ``:remove``,
|
||||
or overrides, so these are considered as part of the name.
|
||||
These values go into a regular expression, so regular
|
||||
expression syntax is allowed.
|
||||
- ``varfunc``: callback function called for every variable matching
|
||||
one of the entries in the variables parameter.
|
||||
|
||||
The function should take four arguments:
|
||||
|
||||
- ``varname``: name of variable matched
|
||||
- ``origvalue``: current value in file
|
||||
- ``op``: the operator (e.g. ``+=``)
|
||||
- ``newlines``: list of lines up to this point. You can use
|
||||
this to prepend lines before this variable setting
|
||||
if you wish.
|
||||
|
||||
And should return a four-element tuple:
|
||||
|
||||
- ``newvalue``: new value to substitute in, or ``None`` to drop
|
||||
the variable setting entirely. (If the removal
|
||||
results in two consecutive blank lines, one of the
|
||||
blank lines will also be dropped).
|
||||
- ``newop``: the operator to use - if you specify ``None`` here,
|
||||
the original operation will be used.
|
||||
- ``indent``: number of spaces to indent multi-line entries,
|
||||
or ``-1`` to indent up to the level of the assignment
|
||||
and opening quote, or a string to use as the indent.
|
||||
- ``minbreak``: ``True`` to allow the first element of a
|
||||
multi-line value to continue on the same line as
|
||||
the assignment, ``False`` to indent before the first
|
||||
element.
|
||||
|
||||
To clarify, if you wish not to change the value, then you
|
||||
would return like this::
|
||||
|
||||
return origvalue, None, 0, True
|
||||
- ``match_overrides``: True to match items with _overrides on the end,
|
||||
False otherwise
|
||||
|
||||
Parameters:
|
||||
meta_lines: lines from the file; can be a list or an iterable
|
||||
(e.g. file pointer)
|
||||
variables: a list of variable names to look for. Functions
|
||||
may also be specified, but must be specified with '()' at
|
||||
the end of the name. Note that the function doesn't have
|
||||
any intrinsic understanding of :append, :prepend, :remove,
|
||||
or overrides, so these are considered as part of the name.
|
||||
These values go into a regular expression, so regular
|
||||
expression syntax is allowed.
|
||||
varfunc: callback function called for every variable matching
|
||||
one of the entries in the variables parameter. The function
|
||||
should take four arguments:
|
||||
varname: name of variable matched
|
||||
origvalue: current value in file
|
||||
op: the operator (e.g. '+=')
|
||||
newlines: list of lines up to this point. You can use
|
||||
this to prepend lines before this variable setting
|
||||
if you wish.
|
||||
and should return a four-element tuple:
|
||||
newvalue: new value to substitute in, or None to drop
|
||||
the variable setting entirely. (If the removal
|
||||
results in two consecutive blank lines, one of the
|
||||
blank lines will also be dropped).
|
||||
newop: the operator to use - if you specify None here,
|
||||
the original operation will be used.
|
||||
indent: number of spaces to indent multi-line entries,
|
||||
or -1 to indent up to the level of the assignment
|
||||
and opening quote, or a string to use as the indent.
|
||||
minbreak: True to allow the first element of a
|
||||
multi-line value to continue on the same line as
|
||||
the assignment, False to indent before the first
|
||||
element.
|
||||
To clarify, if you wish not to change the value, then you
|
||||
would return like this: return origvalue, None, 0, True
|
||||
match_overrides: True to match items with _overrides on the end,
|
||||
False otherwise
|
||||
Returns a tuple:
|
||||
|
||||
- ``updated``: ``True`` if changes were made, ``False`` otherwise.
|
||||
- ``newlines``: Lines after processing.
|
||||
updated:
|
||||
True if changes were made, False otherwise.
|
||||
newlines:
|
||||
Lines after processing
|
||||
"""
|
||||
|
||||
var_res = {}
|
||||
@@ -1661,13 +1423,12 @@ def edit_metadata(meta_lines, variables, varfunc, match_overrides=False):
|
||||
|
||||
|
||||
def edit_metadata_file(meta_file, variables, varfunc):
|
||||
"""Edit a recipe or configuration file and modify one or more specified
|
||||
"""Edit a recipe or config file and modify one or more specified
|
||||
variable values set in the file using a specified callback function.
|
||||
The file is only written to if the value(s) actually change.
|
||||
This is basically the file version of ``bb.utils.edit_metadata()``, see that
|
||||
This is basically the file version of edit_metadata(), see that
|
||||
function's description for parameter/usage information.
|
||||
|
||||
Returns ``True`` if the file was written to, ``False`` otherwise.
|
||||
Returns True if the file was written to, False otherwise.
|
||||
"""
|
||||
with open(meta_file, 'r') as f:
|
||||
(updated, newlines) = edit_metadata(f, variables, varfunc)
|
||||
@@ -1678,24 +1439,20 @@ def edit_metadata_file(meta_file, variables, varfunc):
|
||||
|
||||
|
||||
def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None):
|
||||
"""Edit ``bblayers.conf``, adding and/or removing layers.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``bblayers_conf``: path to ``bblayers.conf`` file to edit
|
||||
- ``add``: layer path (or list of layer paths) to add; ``None`` or empty
|
||||
list to add nothing
|
||||
- ``remove``: layer path (or list of layer paths) to remove; ``None`` or
|
||||
empty list to remove nothing
|
||||
- ``edit_cb``: optional callback function that will be called
|
||||
after processing adds/removes once per existing entry.
|
||||
|
||||
"""Edit bblayers.conf, adding and/or removing layers
|
||||
Parameters:
|
||||
bblayers_conf: path to bblayers.conf file to edit
|
||||
add: layer path (or list of layer paths) to add; None or empty
|
||||
list to add nothing
|
||||
remove: layer path (or list of layer paths) to remove; None or
|
||||
empty list to remove nothing
|
||||
edit_cb: optional callback function that will be called after
|
||||
processing adds/removes once per existing entry.
|
||||
Returns a tuple:
|
||||
|
||||
- ``notadded``: list of layers specified to be added but weren't
|
||||
(because they were already in the list)
|
||||
- ``notremoved``: list of layers that were specified to be removed
|
||||
but weren't (because they weren't in the list)
|
||||
notadded: list of layers specified to be added but weren't
|
||||
(because they were already in the list)
|
||||
notremoved: list of layers that were specified to be removed
|
||||
but weren't (because they weren't in the list)
|
||||
"""
|
||||
|
||||
def remove_trailing_sep(pth):
|
||||
@@ -1815,22 +1572,7 @@ def get_collection_res(d):
|
||||
|
||||
|
||||
def get_file_layer(filename, d, collection_res={}):
|
||||
"""Determine the collection (or layer name, as defined by a layer's
|
||||
``layer.conf`` file) containing the specified file.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``filename``: the filename to look for.
|
||||
- ``d``: the data store.
|
||||
- ``collection_res``: dictionary with the layer names as keys and file
|
||||
patterns to match as defined with the BBFILE_COLLECTIONS and
|
||||
BBFILE_PATTERN variables respectively. The return value of
|
||||
``bb.utils.get_collection_res()`` is the default if this variable is
|
||||
not specified.
|
||||
|
||||
Returns the layer name containing the file. If multiple layers contain the
|
||||
file, the last matching layer name from collection_res is returned.
|
||||
"""
|
||||
"""Determine the collection (as defined by a layer's layer.conf file) containing the specified file"""
|
||||
if not collection_res:
|
||||
collection_res = get_collection_res(d)
|
||||
|
||||
@@ -1868,13 +1610,7 @@ class PrCtlError(Exception):
|
||||
|
||||
def signal_on_parent_exit(signame):
|
||||
"""
|
||||
Trigger ``signame`` to be sent when the parent process dies.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``signame``: name of the signal. See ``man signal``.
|
||||
|
||||
No return value.
|
||||
Trigger signame to be sent when the parent process dies
|
||||
"""
|
||||
signum = getattr(signal, signame)
|
||||
# http://linux.die.net/man/2/prctl
|
||||
@@ -1961,13 +1697,6 @@ def disable_network(uid=None, gid=None):
|
||||
Disable networking in the current process if the kernel supports it, else
|
||||
just return after logging to debug. To do this we need to create a new user
|
||||
namespace, then map back to the original uid/gid.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``uid``: original user id.
|
||||
- ``gid``: original user group id.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
libc = ctypes.CDLL('libc.so.6')
|
||||
|
||||
@@ -2037,14 +1766,9 @@ class LogCatcher(logging.Handler):
|
||||
|
||||
def is_semver(version):
|
||||
"""
|
||||
Arguments:
|
||||
Is the version string following the semver semantic?
|
||||
|
||||
- ``version``: the version string.
|
||||
|
||||
Returns ``True`` if the version string follow semantic versioning, ``False``
|
||||
otherwise.
|
||||
|
||||
See https://semver.org/spec/v2.0.0.html.
|
||||
https://semver.org/spec/v2.0.0.html
|
||||
"""
|
||||
regex = re.compile(
|
||||
r"""
|
||||
@@ -2082,8 +1806,6 @@ def rename(src, dst):
|
||||
def environment(**envvars):
|
||||
"""
|
||||
Context manager to selectively update the environment with the specified mapping.
|
||||
|
||||
No return value.
|
||||
"""
|
||||
backup = dict(os.environ)
|
||||
try:
|
||||
@@ -2100,13 +1822,6 @@ def is_local_uid(uid=''):
|
||||
"""
|
||||
Check whether uid is a local one or not.
|
||||
Can't use pwd module since it gets all UIDs, not local ones only.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``uid``: user id. If not specified the user id is determined from
|
||||
``os.getuid()``.
|
||||
|
||||
Returns ``True`` is the user id is local, ``False`` otherwise.
|
||||
"""
|
||||
if not uid:
|
||||
uid = os.getuid()
|
||||
@@ -2121,7 +1836,7 @@ def is_local_uid(uid=''):
|
||||
|
||||
def mkstemp(suffix=None, prefix=None, dir=None, text=False):
|
||||
"""
|
||||
Generates a unique temporary file, independent of time.
|
||||
Generates a unique filename, independent of time.
|
||||
|
||||
mkstemp() in glibc (at least) generates unique file names based on the
|
||||
current system time. When combined with highly parallel builds, and
|
||||
@@ -2130,18 +1845,6 @@ def mkstemp(suffix=None, prefix=None, dir=None, text=False):
|
||||
|
||||
This function adds additional entropy to the file name so that a collision
|
||||
is independent of time and thus extremely unlikely.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``suffix``: filename suffix.
|
||||
- ``prefix``: filename prefix.
|
||||
- ``dir``: directory where the file will be created.
|
||||
- ``text``: if ``True``, the file is opened in text mode.
|
||||
|
||||
Returns a tuple containing:
|
||||
|
||||
- the file descriptor for the created file
|
||||
- the name of the file.
|
||||
"""
|
||||
entropy = "".join(random.choices("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", k=20))
|
||||
if prefix:
|
||||
@@ -2152,20 +1855,12 @@ def mkstemp(suffix=None, prefix=None, dir=None, text=False):
|
||||
|
||||
def path_is_descendant(descendant, ancestor):
|
||||
"""
|
||||
Returns ``True`` if the path ``descendant`` is a descendant of ``ancestor``
|
||||
(including being equivalent to ``ancestor`` itself). Otherwise returns
|
||||
``False``.
|
||||
|
||||
Returns True if the path `descendant` is a descendant of `ancestor`
|
||||
(including being equivalent to `ancestor` itself). Otherwise returns False.
|
||||
Correctly accounts for symlinks, bind mounts, etc. by using
|
||||
``os.path.samestat()`` to compare paths.
|
||||
os.path.samestat() to compare paths
|
||||
|
||||
May raise any exception that ``os.stat()`` raises.
|
||||
|
||||
Arguments:
|
||||
|
||||
- ``descendant``: path to check for being an ancestor.
|
||||
- ``ancestor``: path to the ancestor ``descendant`` will be checked
|
||||
against.
|
||||
May raise any exception that os.stat() raises
|
||||
"""
|
||||
|
||||
ancestor_stat = os.stat(ancestor)
|
||||
@@ -2203,7 +1898,6 @@ def lock_timeout(lock):
|
||||
# A version of lock_timeout without the check that the lock was locked and a shorter timeout
|
||||
@contextmanager
|
||||
def lock_timeout_nocheck(lock):
|
||||
l = False
|
||||
try:
|
||||
s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
|
||||
l = lock.acquire(timeout=10)
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
from datetime import datetime, timezone
|
||||
import sqlite3
|
||||
import logging
|
||||
from contextlib import closing
|
||||
@@ -54,22 +53,6 @@ CONFIG_TABLE_DEFINITION = (
|
||||
CONFIG_TABLE_COLUMNS = tuple(name for name, _, _ in CONFIG_TABLE_DEFINITION)
|
||||
|
||||
|
||||
def adapt_datetime_iso(val):
|
||||
"""Adapt datetime.datetime to UTC ISO 8601 date."""
|
||||
return val.astimezone(timezone.utc).isoformat()
|
||||
|
||||
|
||||
sqlite3.register_adapter(datetime, adapt_datetime_iso)
|
||||
|
||||
|
||||
def convert_datetime(val):
|
||||
"""Convert ISO 8601 datetime to datetime.datetime object."""
|
||||
return datetime.fromisoformat(val.decode())
|
||||
|
||||
|
||||
sqlite3.register_converter("DATETIME", convert_datetime)
|
||||
|
||||
|
||||
def _make_table(cursor, name, definition):
|
||||
cursor.execute(
|
||||
"""
|
||||
|
||||
@@ -41,9 +41,8 @@ current_releases = [
|
||||
# Release slot #3 'master'
|
||||
['Master','master','','Yocto Project master','master','','master'],
|
||||
# Release slot #4
|
||||
['Whinlatter','5.3','October 2025','5.3.0 (October 2024)','Support for 7 months (until May 2026)','','2.14'],
|
||||
['Walnascar','5.2','April 2025','5.2.0 (April 2025)','Support for 7 months (until October 2025)','','2.12'],
|
||||
#['Styhead','5.1','November 2024','5.1.0 (November 2024)','Support for 7 months (until May 2025)','','2.10'],
|
||||
['Walnascar','5.2','April 2025','5.2.0 (April 2024)','Support for 7 months (until October 2025)','','2.12'],
|
||||
['Styhead','5.1','November 2024','5.1.0 (November 2024)','Support for 7 months (until May 2025)','','2.10'],
|
||||
#['Nanbield','4.3','November 2023','4.3.0 (November 2023)','Support for 7 months (until May 2024)','','2.6'],
|
||||
#['Mickledore','4.2','April 2023','4.2.0 (April 2023)','Support for 7 months (until October 2023)','','2.4'],
|
||||
#['Langdale','4.1','October 2022','4.1.2 (January 2023)','Support for 7 months (until May 2023)','','2.2'],
|
||||
|
||||
@@ -23,21 +23,16 @@
|
||||
<field type="CharField" name="branch">master</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="4">
|
||||
<field type="CharField" name="name">whinlatter</field>
|
||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||
<field type="CharField" name="branch">2.14</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="5">
|
||||
<field type="CharField" name="name">walnascar</field>
|
||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||
<field type="CharField" name="branch">2.12</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="6">
|
||||
<object model="orm.bitbakeversion" pk="5">
|
||||
<field type="CharField" name="name">styhead</field>
|
||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||
<field type="CharField" name="branch">2.10</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="7">
|
||||
<object model="orm.bitbakeversion" pk="6">
|
||||
<field type="CharField" name="name">kirkstone</field>
|
||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||
<field type="CharField" name="branch">2.0</field>
|
||||
@@ -66,30 +61,23 @@
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/\">OpenEmbedded master</a> branch.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="4">
|
||||
<field type="CharField" name="name">whinlatter</field>
|
||||
<field type="CharField" name="description">Openembedded Whinlatter</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
|
||||
<field type="CharField" name="branch_name">whinlatter</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=whinlatter\">OpenEmbedded Whinlatter</a> branch.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="5">
|
||||
<field type="CharField" name="name">walnascar</field>
|
||||
<field type="CharField" name="description">Openembedded Walnascar</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
|
||||
<field type="CharField" name="branch_name">walnascar</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=walnascar\">OpenEmbedded Walnascar</a> branch.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="6">
|
||||
<object model="orm.release" pk="5">
|
||||
<field type="CharField" name="name">styhead</field>
|
||||
<field type="CharField" name="description">Openembedded Styhead</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">6</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
|
||||
<field type="CharField" name="branch_name">styhead</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=styhead\">OpenEmbedded Styhead</a> branch.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="7">
|
||||
<object model="orm.release" pk="6">
|
||||
<field type="CharField" name="name">kirkstone</field>
|
||||
<field type="CharField" name="description">Openembedded Kirkstone</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">7</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">6</field>
|
||||
<field type="CharField" name="branch_name">kirkstone</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=kirkstone\">OpenEmbedded Kirkstone</a> branch.</field>
|
||||
</object>
|
||||
@@ -119,10 +107,6 @@
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field type="CharField" name="layer_name">openembedded-core</field>
|
||||
</object>
|
||||
<object model="orm.releasedefaultlayer" pk="7">
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="layer_name">openembedded-core</field>
|
||||
</object>
|
||||
|
||||
|
||||
<!-- Layer for the Local release -->
|
||||
|
||||
@@ -26,24 +26,18 @@
|
||||
<field type="CharField" name="dirpath">bitbake</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="4">
|
||||
<field type="CharField" name="name">whinlatter</field>
|
||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||
<field type="CharField" name="branch">whinlatter</field>
|
||||
<field type="CharField" name="dirpath">bitbake</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="5">
|
||||
<field type="CharField" name="name">walnascar</field>
|
||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="dirpath">bitbake</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="6">
|
||||
<object model="orm.bitbakeversion" pk="5">
|
||||
<field type="CharField" name="name">styhead</field>
|
||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">bitbake</field>
|
||||
</object>
|
||||
<object model="orm.bitbakeversion" pk="7">
|
||||
<object model="orm.bitbakeversion" pk="6">
|
||||
<field type="CharField" name="name">kirkstone</field>
|
||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||
<field type="CharField" name="branch">kirkstone</field>
|
||||
@@ -74,30 +68,23 @@
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/">Yocto Project Master branch</a>.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="4">
|
||||
<field type="CharField" name="name">whinlatter</field>
|
||||
<field type="CharField" name="description">Yocto Project 5.3 "Whinlatter"</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
|
||||
<field type="CharField" name="branch_name">whinlatter</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=whinlatter">Yocto Project Whinlatter branch</a>.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="5">
|
||||
<field type="CharField" name="name">walnascar</field>
|
||||
<field type="CharField" name="description">Yocto Project 5.2 "Walnascar"</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
|
||||
<field type="CharField" name="branch_name">walnascar</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=walnascar">Yocto Project Walnascar branch</a>.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="6">
|
||||
<object model="orm.release" pk="5">
|
||||
<field type="CharField" name="name">styhead</field>
|
||||
<field type="CharField" name="description">Yocto Project 5.1 "Styhead"</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">6</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
|
||||
<field type="CharField" name="branch_name">styhead</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=styhead">Yocto Project Styhead branch</a>.</field>
|
||||
</object>
|
||||
<object model="orm.release" pk="7">
|
||||
<object model="orm.release" pk="6">
|
||||
<field type="CharField" name="name">kirkstone</field>
|
||||
<field type="CharField" name="description">Yocto Project 4.0 "Kirkstone"</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">7</field>
|
||||
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">6</field>
|
||||
<field type="CharField" name="branch_name">kirkstone</field>
|
||||
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=kirkstone">Yocto Project Kirkstone branch</a>.</field>
|
||||
</object>
|
||||
@@ -175,18 +162,6 @@
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.releasedefaultlayer" pk="19">
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="layer_name">openembedded-core</field>
|
||||
</object>
|
||||
<object model="orm.releasedefaultlayer" pk="20">
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="layer_name">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.releasedefaultlayer" pk="21">
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
|
||||
</object>
|
||||
|
||||
<!-- Default layers provided by poky
|
||||
openembedded-core
|
||||
@@ -227,27 +202,20 @@
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
|
||||
<field type="CharField" name="branch">whinlatter</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="dirpath">meta</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="5">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">meta</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="6">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">meta</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="7">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="branch">kirkstone</field>
|
||||
<field type="CharField" name="dirpath">meta</field>
|
||||
</object>
|
||||
@@ -260,14 +228,14 @@
|
||||
<field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||
<field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="8">
|
||||
<object model="orm.layer_version" pk="7">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
||||
<field type="CharField" name="branch">scarthgap</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="9">
|
||||
<object model="orm.layer_version" pk="8">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
|
||||
@@ -275,38 +243,31 @@
|
||||
<field type="CharField" name="commit">HEAD</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="10">
|
||||
<object model="orm.layer_version" pk="9">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
||||
<field type="CharField" name="branch">master</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="11">
|
||||
<object model="orm.layer_version" pk="10">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
|
||||
<field type="CharField" name="branch">whinlatter</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="11">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="12">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="13">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="14">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field type="CharField" name="branch">kirkstone</field>
|
||||
<field type="CharField" name="dirpath">meta-poky</field>
|
||||
</object>
|
||||
@@ -319,14 +280,14 @@
|
||||
<field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||
<field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="15">
|
||||
<object model="orm.layer_version" pk="13">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
||||
<field type="CharField" name="branch">scarthgap</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="16">
|
||||
<object model="orm.layer_version" pk="14">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
|
||||
@@ -334,38 +295,31 @@
|
||||
<field type="CharField" name="commit">HEAD</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="17">
|
||||
<object model="orm.layer_version" pk="15">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
||||
<field type="CharField" name="branch">master</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="18">
|
||||
<object model="orm.layer_version" pk="16">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
|
||||
<field type="CharField" name="branch">whinlatter</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="19">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</field>
|
||||
<field type="CharField" name="branch">walnascar</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="20">
|
||||
<object model="orm.layer_version" pk="17">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</field>
|
||||
<field type="CharField" name="branch">styhead</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
<object model="orm.layer_version" pk="21">
|
||||
<object model="orm.layer_version" pk="18">
|
||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||
<field type="IntegerField" name="layer_source">0</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">7</field>
|
||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||
<field type="CharField" name="branch">kirkstone</field>
|
||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||
</object>
|
||||
|
||||
@@ -128,7 +128,7 @@ class BuildTest(unittest.TestCase):
|
||||
if os.environ.get("TOASTER_TEST_USE_SSTATE_MIRROR"):
|
||||
ProjectVariable.objects.get_or_create(
|
||||
name="SSTATE_MIRRORS",
|
||||
value="file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH",
|
||||
value="file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH",
|
||||
project=project)
|
||||
|
||||
ProjectTarget.objects.create(project=project,
|
||||
|
||||
@@ -53,7 +53,7 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
|
||||
- Release: Yocto Project 4.0 "Kirkstone" (option value: 6)
|
||||
- Merge Toaster settings: True
|
||||
"""
|
||||
release = '7'
|
||||
release = '6'
|
||||
release_title = 'Yocto Project 4.0 "Kirkstone"'
|
||||
project_name = 'projectkirkstone'
|
||||
self.create_new_project(
|
||||
|
||||
@@ -406,22 +406,5 @@ both the Yocto Project and BitBake manuals:
|
||||
Submitting documentation changes
|
||||
================================
|
||||
|
||||
Please refer to our contributor guide here: https://docs.yoctoproject.org/contributor-guide/
|
||||
for full details on how to submit changes.
|
||||
|
||||
As a quick guide, patches should be sent to docs@lists.yoctoproject.org
|
||||
The git command to do that would be:
|
||||
|
||||
git send-email -M -1 --to docs@lists.yoctoproject.org
|
||||
|
||||
The 'To' header can be set as default for this repository:
|
||||
|
||||
git config sendemail.to docs@lists.yoctoproject.org
|
||||
|
||||
Now you can just do 'git send-email origin/master..' to send all local patches.
|
||||
|
||||
Read the other sections in this document and documentation/standards.md for
|
||||
rules to follow when contributing to the documentation.
|
||||
|
||||
Git repository: https://git.yoctoproject.org/yocto-docs
|
||||
Mailing list: docs@lists.yoctoproject.org
|
||||
Please see the top level README file in this repository for details of where
|
||||
to send patches.
|
||||
|
||||
@@ -57,7 +57,7 @@ following requirements:
|
||||
:ref:`dev-manual/start:preparing the build host`
|
||||
section in the Yocto Project Development Tasks Manual.
|
||||
|
||||
- Ensure that the following utilities have these minimum version numbers:
|
||||
-
|
||||
|
||||
- Git &MIN_GIT_VERSION; or greater
|
||||
- tar &MIN_TAR_VERSION; or greater
|
||||
@@ -65,7 +65,7 @@ following requirements:
|
||||
- gcc &MIN_GCC_VERSION; or greater.
|
||||
- GNU make &MIN_MAKE_VERSION; or greater
|
||||
|
||||
If your build host does not satisfy all of the above version
|
||||
If your build host does not meet any of these three listed version
|
||||
requirements, you can take steps to prepare the system so that you
|
||||
can still use the Yocto Project. See the
|
||||
:ref:`ref-manual/system-requirements:required git, tar, python, make and gcc versions`
|
||||
@@ -76,10 +76,9 @@ Build Host Packages
|
||||
|
||||
You must install essential host packages on your build host. The
|
||||
following command installs the host packages based on an Ubuntu
|
||||
distribution:
|
||||
distribution::
|
||||
|
||||
.. literalinclude:: ../tools/host_packages_scripts/ubuntu_essential.sh
|
||||
:language: shell
|
||||
$ sudo apt install &UBUNTU_DEBIAN_HOST_PACKAGES_ESSENTIAL;
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -183,7 +182,7 @@ an entire Linux distribution, including the toolchain, from source.
|
||||
page of the Yocto Project Wiki.
|
||||
|
||||
#. **Initialize the Build Environment:** From within the ``poky``
|
||||
directory, run the :ref:`ref-manual/structure:``oe-init-build-env```
|
||||
directory, run the :ref:`ref-manual/structure:\`\`oe-init-build-env\`\``
|
||||
environment
|
||||
setup script to define Yocto Project's build environment on your
|
||||
build host.
|
||||
@@ -253,7 +252,7 @@ an entire Linux distribution, including the toolchain, from source.
|
||||
file in the :term:`Build Directory`::
|
||||
|
||||
BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws"
|
||||
SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
|
||||
SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
|
||||
BB_HASHSERVE = "auto"
|
||||
BB_SIGNATURE_HANDLER = "OEEquivHash"
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ directory of that Layer. This directory is what you add to the
|
||||
``conf/bblayers.conf`` file found in your
|
||||
:term:`Build Directory`, which is
|
||||
established after you run the OpenEmbedded build environment setup
|
||||
script (i.e. :ref:`ref-manual/structure:``oe-init-build-env```).
|
||||
script (i.e. :ref:`ref-manual/structure:\`\`oe-init-build-env\`\``).
|
||||
Adding the root directory allows the :term:`OpenEmbedded Build System`
|
||||
to recognize the BSP
|
||||
layer and from it build an image. Here is an example::
|
||||
@@ -229,7 +229,7 @@ section.
|
||||
|
||||
#. *Initialize the Build Environment:* While in the root directory of
|
||||
the Source Directory (i.e. ``poky``), run the
|
||||
:ref:`ref-manual/structure:``oe-init-build-env``` environment
|
||||
:ref:`ref-manual/structure:\`\`oe-init-build-env\`\`` environment
|
||||
setup script to define the OpenEmbedded build environment on your
|
||||
build host. ::
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import datetime
|
||||
try:
|
||||
@@ -174,24 +173,6 @@ latex_elements = {
|
||||
'preamble': '\\usepackage[UTF8]{ctex}\n\\setcounter{tocdepth}{2}',
|
||||
}
|
||||
|
||||
|
||||
from sphinx.search import SearchEnglish
|
||||
from sphinx.search import languages
|
||||
class DashFriendlySearchEnglish(SearchEnglish):
|
||||
|
||||
# Accept words that can include hyphens
|
||||
_word_re = re.compile(r'[\w\-]+')
|
||||
|
||||
js_splitter_code = r"""
|
||||
function splitQuery(query) {
|
||||
return query
|
||||
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}-]+/gu)
|
||||
.filter(term => term.length > 0);
|
||||
}
|
||||
"""
|
||||
|
||||
languages['en'] = DashFriendlySearchEnglish
|
||||
|
||||
# Make the EPUB builder prefer PNG to SVG because of issues rendering Inkscape SVG
|
||||
from sphinx.builders.epub3 import Epub3Builder
|
||||
Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg']
|
||||
|
||||
@@ -776,38 +776,6 @@ argument to ``git format-patch`` with a version number::
|
||||
|
||||
git format-patch -v2 <ref-branch>
|
||||
|
||||
|
||||
After generating updated patches (v2, v3, and so on) via ``git
|
||||
format-patch``, ideally developers will add a patch version changelog
|
||||
to each patch that describes what has changed between each revision of
|
||||
the patch. Add patch version changelogs after the ``---`` marker in the
|
||||
patch, indicating that this information is part of this patch, but is not
|
||||
suitable for inclusion in the commit message (i.e. the git history) itself.
|
||||
Providing a patch version changelog makes it easier for maintainers and
|
||||
reviewers to succinctly understand what changed in all versions of the
|
||||
patch, without having to consult alternate sources of information, such as
|
||||
searching through messages on a mailing list. For example::
|
||||
|
||||
<patch title>
|
||||
|
||||
<commit message>
|
||||
|
||||
<Signed-off-by/other trailers>
|
||||
---
|
||||
changes in v4:
|
||||
- provide a clearer commit message
|
||||
- fix spelling mistakes
|
||||
|
||||
changes in v3:
|
||||
- replace func() to use other_func() instead
|
||||
|
||||
changes in v2:
|
||||
- this patch was added in v2
|
||||
---
|
||||
<diffstat output>
|
||||
|
||||
<unified diff>
|
||||
|
||||
Lastly please ensure that you also test your revised changes. In particular
|
||||
please don't just edit the patch file written out by ``git format-patch`` and
|
||||
resend it.
|
||||
|
||||
@@ -36,7 +36,7 @@ section:
|
||||
use the BitBake ``-e`` option to examine variable values after a
|
||||
recipe has been parsed.
|
||||
|
||||
- ":ref:`dev-manual/debugging:viewing package information with ``oe-pkgdata-util```"
|
||||
- ":ref:`dev-manual/debugging:viewing package information with \`\`oe-pkgdata-util\`\``"
|
||||
describes how to use the ``oe-pkgdata-util`` utility to query
|
||||
:term:`PKGDATA_DIR` and
|
||||
display package-related information for built packages.
|
||||
|
||||
@@ -552,7 +552,7 @@ the two modes:
|
||||
|
||||
This instance of VSCode uses plugins that are useful for the development
|
||||
of the application. ``devtool ide-sdk`` generates the necessary
|
||||
``extensions.json``, ``settings.json``, ``tasks.json`` and ``launch.json``
|
||||
``extensions.json``, ``settings.json``, ``tasks.json``and ``launch.json``
|
||||
configuration files for all the involved plugins.
|
||||
|
||||
When the source code folder present in the workspace folder is opened in
|
||||
|
||||
@@ -56,7 +56,7 @@ necessary when adding a recipe to build a new piece of software to be
|
||||
included in a build.
|
||||
|
||||
You can find a complete description of the ``devtool add`` command in
|
||||
the ":ref:`dev-manual/devtool:a closer look at ``devtool add```" section
|
||||
the ":ref:`dev-manual/devtool:a closer look at \`\`devtool add\`\``" section
|
||||
in the Yocto Project Application Development and the Extensible Software
|
||||
Development Kit (eSDK) manual.
|
||||
|
||||
|
||||
@@ -24,20 +24,12 @@ users can read in standardized format.
|
||||
:term:`SBOM` information is also critical to performing vulnerability exposure
|
||||
assessments, as all the components used in the Software Supply Chain are listed.
|
||||
|
||||
The OpenEmbedded build system doesn't generate such information by default,
|
||||
though the :term:`Poky` reference distribution has it enabled out of the box.
|
||||
|
||||
To enable it, inherit the :ref:`ref-classes-create-spdx` class from a
|
||||
configuration file::
|
||||
The OpenEmbedded build system doesn't generate such information by default.
|
||||
To make this happen, you must inherit the
|
||||
:ref:`ref-classes-create-spdx` class from a configuration file::
|
||||
|
||||
INHERIT += "create-spdx"
|
||||
|
||||
In the :term:`Poky` reference distribution, :term:`SPDX` generation does
|
||||
consume some build time resources and thus if needed it can be disabled from a
|
||||
:term:`configuration file`::
|
||||
|
||||
INHERIT:remove = "create-spdx"
|
||||
|
||||
Upon building an image, you will then get:
|
||||
|
||||
- :term:`SPDX` output in JSON format as an ``IMAGE-MACHINE.spdx.json`` file in
|
||||
|
||||
@@ -858,9 +858,9 @@ Initializing the Build Environment
|
||||
==================================
|
||||
|
||||
Before you can use Yocto you need to setup the build environment.
|
||||
From within the ``poky`` directory, source the :ref:`ref-manual/structure:``oe-init-build-env``` environment
|
||||
From within the ``poky`` directory, source the :ref:`ref-manual/structure:\`\`oe-init-build-env\`\`` environment
|
||||
setup script to define Yocto Project's build environment on your build host::
|
||||
|
||||
$ source oe-init-build-env
|
||||
|
||||
$ source oe-init-build-env
|
||||
|
||||
Note, that this step will have to be repeated every time you open a new shell.
|
||||
|
||||
@@ -333,7 +333,7 @@ Manually Upgrading a Recipe
|
||||
|
||||
If for some reason you choose not to upgrade recipes using
|
||||
:ref:`dev-manual/upgrading-recipes:Using the Auto Upgrade Helper (AUH)` or
|
||||
by :ref:`dev-manual/upgrading-recipes:Using ``devtool upgrade```,
|
||||
by :ref:`dev-manual/upgrading-recipes:Using \`\`devtool upgrade\`\``,
|
||||
you can manually edit the recipe files to upgrade the versions.
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -672,7 +672,7 @@ The steps in this procedure show you how you can patch the kernel using
|
||||
|
||||
Before attempting this procedure, be sure you have performed the
|
||||
steps to get ready for updating the kernel as described in the
|
||||
":ref:`kernel-dev/common:getting ready to develop using ``devtool```"
|
||||
":ref:`kernel-dev/common:getting ready to develop using \`\`devtool\`\``"
|
||||
section.
|
||||
|
||||
Patching the kernel involves changing or adding configurations to an
|
||||
@@ -685,7 +685,7 @@ output at boot time through ``printk`` statements in the kernel's
|
||||
``calibrate.c`` source code file. Applying the patch and booting the
|
||||
modified image causes the added messages to appear on the emulator's
|
||||
console. The example is a continuation of the setup procedure found in
|
||||
the ":ref:`kernel-dev/common:getting ready to develop using ``devtool```" Section.
|
||||
the ":ref:`kernel-dev/common:getting ready to develop using \`\`devtool\`\``" Section.
|
||||
|
||||
#. *Check Out the Kernel Source Files:* First you must use ``devtool``
|
||||
to checkout the kernel source code in its workspace.
|
||||
@@ -693,7 +693,7 @@ the ":ref:`kernel-dev/common:getting ready to develop using ``devtool```" Sectio
|
||||
.. note::
|
||||
|
||||
See this step in the
|
||||
":ref:`kernel-dev/common:getting ready to develop using ``devtool```"
|
||||
":ref:`kernel-dev/common:getting ready to develop using \`\`devtool\`\``"
|
||||
section for more information.
|
||||
|
||||
Use the following ``devtool`` command to check out the code::
|
||||
@@ -804,7 +804,7 @@ the ":ref:`kernel-dev/common:getting ready to develop using ``devtool```" Sectio
|
||||
.. note::
|
||||
|
||||
See Step 3 of the
|
||||
":ref:`kernel-dev/common:getting ready to develop using ``devtool```"
|
||||
":ref:`kernel-dev/common:getting ready to develop using \`\`devtool\`\``"
|
||||
section for information on setting up this layer.
|
||||
|
||||
Once the command
|
||||
@@ -1190,7 +1190,7 @@ appear in the ``.config`` file, which is in the :term:`Build Directory`.
|
||||
|
||||
For more information about where the ``.config`` file is located, see the
|
||||
example in the
|
||||
":ref:`kernel-dev/common:using ``menuconfig```"
|
||||
":ref:`kernel-dev/common:using \`\`menuconfig\`\``"
|
||||
section.
|
||||
|
||||
It is simple to create a configuration fragment. One method is to use
|
||||
@@ -1286,7 +1286,7 @@ when you override a policy configuration in a hardware configuration
|
||||
fragment.
|
||||
|
||||
In order to run this task, you must have an existing ``.config`` file.
|
||||
See the ":ref:`kernel-dev/common:using ``menuconfig```" section for
|
||||
See the ":ref:`kernel-dev/common:using \`\`menuconfig\`\``" section for
|
||||
information on how to create a configuration file.
|
||||
|
||||
Here is sample output from the :ref:`ref-tasks-kernel_configcheck` task:
|
||||
@@ -1359,7 +1359,7 @@ and
|
||||
tasks until they produce no warnings.
|
||||
|
||||
For more information on how to use the ``menuconfig`` tool, see the
|
||||
:ref:`kernel-dev/common:using ``menuconfig``` section.
|
||||
:ref:`kernel-dev/common:using \`\`menuconfig\`\`` section.
|
||||
|
||||
Fine-Tuning the Kernel Configuration File
|
||||
-----------------------------------------
|
||||
|
||||
@@ -122,7 +122,7 @@ general information and references for further information.
|
||||
Using ``devtool`` requires that you have a clean build
|
||||
of the image. For
|
||||
more information, see the
|
||||
":ref:`kernel-dev/common:getting ready to develop using ``devtool```"
|
||||
":ref:`kernel-dev/common:getting ready to develop using \`\`devtool\`\``"
|
||||
section.
|
||||
|
||||
Using traditional kernel development requires that you have the
|
||||
|
||||
@@ -12,7 +12,6 @@ to move to one release of the Yocto Project from the previous one.
|
||||
.. toctree::
|
||||
|
||||
migration-general
|
||||
release-5.3
|
||||
release-5.2
|
||||
release-5.1
|
||||
release-5.0
|
||||
|
||||
@@ -83,7 +83,7 @@ systemd changes
|
||||
files by starting them via
|
||||
`Also <https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html#Also=>`__,
|
||||
the other service files were automatically added to the :term:`FILES` variable of
|
||||
the same package. Example:
|
||||
the same package. Example:
|
||||
|
||||
a.service contains::
|
||||
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
.. |yocto-codename| replace:: whinlatter
|
||||
.. |yocto-ver| replace:: 5.3
|
||||
.. Note: anchors id below cannot contain substitutions so replace them with the
|
||||
value of |yocto-ver| above.
|
||||
|
||||
Release |yocto-ver| (|yocto-codename|)
|
||||
======================================
|
||||
|
||||
Migration notes for |yocto-ver| (|yocto-codename|)
|
||||
--------------------------------------------------
|
||||
|
||||
This section provides migration information for moving to the Yocto
|
||||
Project |yocto-ver| Release (codename "|yocto-codename|") from the prior release.
|
||||
|
||||
Supported kernel versions
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The :term:`OLDEST_KERNEL` setting is XXX in this release, meaning that
|
||||
out the box, older kernels are not supported. See :ref:`4.3 migration notes
|
||||
<migration-4.3-supported-kernel-versions>` for details.
|
||||
|
||||
Supported distributions
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Compared to the previous releases, running BitBake is supported on new
|
||||
GNU/Linux distributions:
|
||||
|
||||
- XXX
|
||||
|
||||
On the other hand, some earlier distributions are no longer supported:
|
||||
|
||||
- XXX
|
||||
|
||||
See :ref:`all supported distributions <system-requirements-supported-distros>`.
|
||||
|
||||
Rust language changes
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
systemd changes
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Recipe changes
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
Removed variables
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following variables have been removed:
|
||||
|
||||
Removed recipes
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
The following recipes have been removed in this release:
|
||||
|
||||
Removed classes
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
The following classes have been removed in this release:
|
||||
|
||||
Removed features
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
The following features have been removed in this release:
|
||||
|
||||
Miscellaneous changes
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -32,5 +32,3 @@ Release 4.0 (kirkstone)
|
||||
release-notes-4.0.23
|
||||
release-notes-4.0.24
|
||||
release-notes-4.0.25
|
||||
release-notes-4.0.26
|
||||
release-notes-4.0.27
|
||||
|
||||
@@ -15,4 +15,3 @@ Release 5.0 (scarthgap)
|
||||
release-notes-5.0.6
|
||||
release-notes-5.0.7
|
||||
release-notes-5.0.8
|
||||
release-notes-5.0.9
|
||||
|
||||
@@ -7,4 +7,3 @@ Release 5.2 (walnascar)
|
||||
|
||||
migration-5.2
|
||||
release-notes-5.2
|
||||
release-notes-5.2.1
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Release 5.3 (whinlatter)
|
||||
========================
|
||||
|
||||
.. toctree::
|
||||
|
||||
migration-5.3
|
||||
release-notes-5.3
|
||||
@@ -1,263 +0,0 @@
|
||||
Release notes for Yocto-4.0.26 (Kirkstone)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-4.0.26
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
- bind: Fix :cve_nist:`2024-11187` and :cve_nist:`2024-12705`
|
||||
- binutils: Fix :cve_nist:`2025-0840`
|
||||
- elfutils: Fix :cve_nist:`2025-1352` and :cve_nist:`2025-1372`
|
||||
- ffmpeg: Fix CVE-2024-28661, :cve_nist:`2024-35369`, :cve_nist:`2024-36613`, :cve_nist:`2024-36616`,
|
||||
:cve_nist:`2024-36617`, :cve_nist:`2024-36618`, :cve_nist:`2025-0518` and :cve_nist:`2025-25473`
|
||||
- ffmpeg: Ignore :cve_nist:`2023-46407`, :cve_nist:`2023-47470`, :cve_nist:`2024-7272`,
|
||||
:cve_nist:`2024-22860`, :cve_nist:`2024-22861` and :cve_nist:`2024-22862`
|
||||
- freetype: Fix :cve_nist:`2025-27363`
|
||||
- gnutls: Fix :cve_nist:`2024-12243`
|
||||
- grub: Fix :cve_nist:`2024-45774`, :cve_nist:`2024-45775`, :cve_nist:`2024-45776`,
|
||||
:cve_nist:`2024-45777`, :cve_nist:`2024-45778`, :cve_nist:`2024-45779`, :cve_nist:`2024-45780`,
|
||||
:cve_nist:`2024-45781`, :cve_nist:`2024-45782`, :cve_nist:`2024-45783`, :cve_nist:`2024-56737`,
|
||||
:cve_nist:`2025-0622`, :cve_nist:`2025-0624`, :cve_nist:`2025-0677`, :cve_nist:`2025-0684`,
|
||||
:cve_nist:`2025-0685`, :cve_nist:`2025-0686`, :cve_nist:`2025-0689`, :cve_nist:`2025-0678`,
|
||||
:cve_nist:`2025-0690`, :cve_nist:`2025-1118` and :cve_nist:`2025-1125`
|
||||
- gstreamer1.0-rtsp-server: fix :cve_nist:`2024-44331`
|
||||
- libarchive: Fix :cve_nist:`2025-25724`
|
||||
- libarchive: Ignore :cve_nist:`2025-1632`
|
||||
- libcap: Fix :cve_nist:`2025-1390`
|
||||
- linux-yocto/5.10: Fix :cve_nist:`2024-36476`, :cve_nist:`2024-43098`, :cve_nist:`2024-47143`,
|
||||
:cve_nist:`2024-48881`, :cve_nist:`2024-50051`, :cve_nist:`2024-50074`, :cve_nist:`2024-50082`,
|
||||
:cve_nist:`2024-50083`, :cve_nist:`2024-50099`, :cve_nist:`2024-50115`, :cve_nist:`2024-50116`,
|
||||
:cve_nist:`2024-50117`, :cve_nist:`2024-50142`, :cve_nist:`2024-50148`, :cve_nist:`2024-50150`,
|
||||
:cve_nist:`2024-50151`, :cve_nist:`2024-50167`, :cve_nist:`2024-50168`, :cve_nist:`2024-50171`,
|
||||
:cve_nist:`2024-50185`, :cve_nist:`2024-50192`, :cve_nist:`2024-50193`, :cve_nist:`2024-50194`,
|
||||
:cve_nist:`2024-50195`, :cve_nist:`2024-50198`, :cve_nist:`2024-50201`, :cve_nist:`2024-50202`,
|
||||
:cve_nist:`2024-50205`, :cve_nist:`2024-50208`, :cve_nist:`2024-50209`, :cve_nist:`2024-50229`,
|
||||
:cve_nist:`2024-50230`, :cve_nist:`2024-50233`, :cve_nist:`2024-50234`, :cve_nist:`2024-50236`,
|
||||
:cve_nist:`2024-50237`, :cve_nist:`2024-50251`, :cve_nist:`2024-50262`, :cve_nist:`2024-50264`,
|
||||
:cve_nist:`2024-50265`, :cve_nist:`2024-50267`, :cve_nist:`2024-50268`, :cve_nist:`2024-50269`,
|
||||
:cve_nist:`2024-50273`, :cve_nist:`2024-50278`, :cve_nist:`2024-50279`, :cve_nist:`2024-50282`,
|
||||
:cve_nist:`2024-50287`, :cve_nist:`2024-50292`, :cve_nist:`2024-50296`, :cve_nist:`2024-50299`,
|
||||
:cve_nist:`2024-50301`, :cve_nist:`2024-50302`, :cve_nist:`2024-53042`, :cve_nist:`2024-53052`,
|
||||
:cve_nist:`2024-53057`, :cve_nist:`2024-53059`, :cve_nist:`2024-53060`, :cve_nist:`2024-53061`,
|
||||
:cve_nist:`2024-53063`, :cve_nist:`2024-53066`, :cve_nist:`2024-53096`, :cve_nist:`2024-53097`,
|
||||
:cve_nist:`2024-53101`, :cve_nist:`2024-53103`, :cve_nist:`2024-53104`, :cve_nist:`2024-53145`,
|
||||
:cve_nist:`2024-53146`, :cve_nist:`2024-53150`, :cve_nist:`2024-53155`, :cve_nist:`2024-53156`,
|
||||
:cve_nist:`2024-53157`, :cve_nist:`2024-53161`, :cve_nist:`2024-53165`, :cve_nist:`2024-53171`,
|
||||
:cve_nist:`2024-53173`, :cve_nist:`2024-53174`, :cve_nist:`2024-53194`, :cve_nist:`2024-53197`,
|
||||
:cve_nist:`2024-53217`, :cve_nist:`2024-53226`, :cve_nist:`2024-53227`, :cve_nist:`2024-53237`,
|
||||
:cve_nist:`2024-53239`, :cve_nist:`2024-55916`, :cve_nist:`2024-56548`, :cve_nist:`2024-56558`,
|
||||
:cve_nist:`2024-56567`, :cve_nist:`2024-56568`, :cve_nist:`2024-56569`, :cve_nist:`2024-56572`,
|
||||
:cve_nist:`2024-56574`, :cve_nist:`2024-56581`, :cve_nist:`2024-56587`, :cve_nist:`2024-56593`,
|
||||
:cve_nist:`2024-56595`, :cve_nist:`2024-56596`, :cve_nist:`2024-56598`, :cve_nist:`2024-56600`,
|
||||
:cve_nist:`2024-56601`, :cve_nist:`2024-56602`, :cve_nist:`2024-56603`, :cve_nist:`2024-56605`,
|
||||
:cve_nist:`2024-56606`, :cve_nist:`2024-56615`, :cve_nist:`2024-56619`, :cve_nist:`2024-56623`,
|
||||
:cve_nist:`2024-56629`, :cve_nist:`2024-56634`, :cve_nist:`2024-56642`, :cve_nist:`2024-56643`,
|
||||
:cve_nist:`2024-56648`, :cve_nist:`2024-56650`, :cve_nist:`2024-56659`, :cve_nist:`2024-56662`,
|
||||
:cve_nist:`2024-56670`, :cve_nist:`2024-56688`, :cve_nist:`2024-56698`, :cve_nist:`2024-56704`,
|
||||
:cve_nist:`2024-56716`, :cve_nist:`2024-56720`, :cve_nist:`2024-56723`, :cve_nist:`2024-56724`,
|
||||
:cve_nist:`2024-56728`, :cve_nist:`2024-56739`, :cve_nist:`2024-56746`, :cve_nist:`2024-56747`,
|
||||
:cve_nist:`2024-56748`, :cve_nist:`2024-56754`, :cve_nist:`2024-56756`, :cve_nist:`2024-56770`,
|
||||
:cve_nist:`2024-56779`, :cve_nist:`2024-56780`, :cve_nist:`2024-56781`, :cve_nist:`2024-56785`,
|
||||
:cve_nist:`2024-57802`, :cve_nist:`2024-57807`, :cve_nist:`2024-57850`, :cve_nist:`2024-57874`,
|
||||
:cve_nist:`2024-57890`, :cve_nist:`2024-57896`, :cve_nist:`2024-57900`, :cve_nist:`2024-57901`,
|
||||
:cve_nist:`2024-57902`, :cve_nist:`2024-57910`, :cve_nist:`2024-57911`, :cve_nist:`2024-57913`,
|
||||
:cve_nist:`2024-57922`, :cve_nist:`2024-57938`, :cve_nist:`2024-57939`, :cve_nist:`2024-57946`,
|
||||
:cve_nist:`2024-57951`, :cve_nist:`2025-21638`, :cve_nist:`2025-21687`, :cve_nist:`2025-21689`,
|
||||
:cve_nist:`2025-21692`, :cve_nist:`2025-21694`, :cve_nist:`2025-21697` and :cve_nist:`2025-21699`
|
||||
- linux-yocto/5.15: Fix :cve_nist:`2024-57979`, :cve_nist:`2024-58034`, :cve_nist:`2024-58052`,
|
||||
:cve_nist:`2024-58055`, :cve_nist:`2024-58058`, :cve_nist:`2024-58063`, :cve_nist:`2024-58069`,
|
||||
:cve_nist:`2024-58071`, :cve_nist:`2024-58076`, :cve_nist:`2024-58083`, :cve_nist:`2025-21700`,
|
||||
:cve_nist:`2025-21703`, :cve_nist:`2025-21715`, :cve_nist:`2025-21722`, :cve_nist:`2025-21727`,
|
||||
:cve_nist:`2025-21731`, :cve_nist:`2025-21753`, :cve_nist:`2025-21756`, :cve_nist:`2025-21760`,
|
||||
:cve_nist:`2025-21761`, :cve_nist:`2025-21762`, :cve_nist:`2025-21763`, :cve_nist:`2025-21764`,
|
||||
:cve_nist:`2025-21796`, :cve_nist:`2025-21811`, :cve_nist:`2025-21887`, :cve_nist:`2025-21898`,
|
||||
:cve_nist:`2025-21904`, :cve_nist:`2025-21905`, :cve_nist:`2025-21912`, :cve_nist:`2025-21917`,
|
||||
:cve_nist:`2025-21919`, :cve_nist:`2025-21920`, :cve_nist:`2025-21922`, :cve_nist:`2025-21934`,
|
||||
:cve_nist:`2025-21943`, :cve_nist:`2025-21948` and :cve_nist:`2025-21951`
|
||||
- libpcre2: Ignore :cve_nist:`2022-1586`
|
||||
- libtasn1: Fix :cve_nist:`2024-12133`
|
||||
- libxml2: Fix :cve_nist:`2022-49043`, :cve_nist:`2024-56171`, :cve_nist:`2025-24928` and
|
||||
:cve_nist:`2025-27113`
|
||||
- libxslt: Fix :cve_nist:`2024-55549` and :cve_nist:`2025-24855`
|
||||
- llvm: Fix :cve_nist:`2024-0151`
|
||||
- mpg123: Fix :cve_nist:`2024-10573`
|
||||
- openssh: Fix :cve_nist:`2025-26465`
|
||||
- ovmf: Revert Fix for CVE-2023-45236 :cve_nist:`2023-45237`
|
||||
- perl: Ignore :cve_nist:`2023-47038`
|
||||
- puzzles: Ignore :cve_nist:`2024-13769`, :cve_nist:`2024-13770` and :cve_nist:`2025-0837`
|
||||
- python3: Fix :cve_nist:`2025-0938`
|
||||
- ruby: Fix :cve_nist:`2024-41946`, :cve_nist:`2025-27219` and :cve_nist:`2025-27220`
|
||||
- subversion: Ignore :cve_nist:`2024-45720`
|
||||
- systemd: Fix :cve_nist:`2022-3821`, :cve_nist:`2022-4415`, :cve_nist:`2022-45873` and
|
||||
:cve_nist:`2023-7008`
|
||||
- tiff: mark :cve_nist:`2023-30774` as patched with existing patch
|
||||
- u-boot: Fix :cve_nist:`2022-2347`, :cve_nist:`2022-30767`, :cve_nist:`2022-30790`,
|
||||
:cve_nist:`2024-57254`, :cve_nist:`2024-57255`, :cve_nist:`2024-57256`, :cve_nist:`2024-57257`,
|
||||
:cve_nist:`2024-57258` and :cve_nist:`2024-57259`
|
||||
- vim: Fix :cve_nist:`2025-1215`, :cve_nist:`2025-22134`, :cve_nist:`2025-24014`,
|
||||
:cve_nist:`2025-26603`, :cve_nist:`2025-27423` and :cve_nist:`2025-29768`
|
||||
- xserver-xorg: Fix :cve_nist:`2022-49737`, :cve_nist:`2025-26594`, :cve_nist:`2025-26595`,
|
||||
:cve_nist:`2025-26596`, :cve_nist:`2025-26597`, :cve_nist:`2025-26598`, :cve_nist:`2025-26599`,
|
||||
:cve_nist:`2025-26600` and :cve_nist:`2025-26601`
|
||||
- xwayland: Fix :cve_nist:`2022-49737`, :cve_nist:`2024-9632`, :cve_nist:`2024-21885`,
|
||||
:cve_nist:`2024-21886`, :cve_nist:`2024-31080`, :cve_nist:`2024-31081`, :cve_nist:`2024-31083`,
|
||||
:cve_nist:`2025-26594`, :cve_nist:`2025-26595`, :cve_nist:`2025-26596`, :cve_nist:`2025-26597`,
|
||||
:cve_nist:`2025-26598`, :cve_nist:`2025-26599`, :cve_nist:`2025-26600` and :cve_nist:`2025-26601`
|
||||
- zlib: Fix :cve_nist:`2014-9485`
|
||||
|
||||
|
||||
|
||||
Fixes in Yocto-4.0.26
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- bind: Upgrade to 9.18.33
|
||||
- bitbake: cache: bump cache version
|
||||
- bitbake: siggen.py: Improve taskhash reproducibility
|
||||
- boost: fix do_fetch error
|
||||
- build-appliance-image: Update to kirkstone head revision
|
||||
- contributor-guide/submit-changes: add policy on AI generated code
|
||||
- cve-update-nvd2-native: handle missing vulnStatus
|
||||
- docs: Add favicon for the documentation html
|
||||
- docs: Remove all mention of core-image-lsb
|
||||
- libtasn1: upgrade to 4.20.0
|
||||
- libxcrypt-compat: Remove libcrypt.so to fix conflict with libcrypt
|
||||
- libxml2: fix compilation of explicit child axis in pattern
|
||||
- linux-yocto/5.10: update to v5.10.234
|
||||
- linux-yocto/5.15: update to v5.15.179
|
||||
- mesa: Fix missing GLES3 headers in SDK sysroot
|
||||
- mesa: Update :term:`SRC_URI`
|
||||
- meta: Enable '-o pipefail' for the SDK installer
|
||||
- migration-guides: add release notes for 4.0.25
|
||||
- poky.conf: add ubuntu2404 to :term:`SANITY_TESTED_DISTROS`
|
||||
- poky.conf: bump version for 4.0.26
|
||||
- procps: replaced one use of fputs(3) with a write(2) call
|
||||
- ref-manual: don't refer to poky-lsb
|
||||
- scripts/install-buildtools: Update to 4.0.24
|
||||
- scritps/runqemu: Ensure we only have two serial ports
|
||||
- systemd: upgrade to 250.14
|
||||
- tzcode-native: Fix compiler setting from 2023d version
|
||||
- tzcode: Update :term:`SRC_URI`
|
||||
- tzdata/tzcode-native: upgrade 2025a
|
||||
- vim: Upgrade to 9.1.1198
|
||||
- virglrenderer: fix do_fetch error
|
||||
- vulnerabilities/classes: remove references to cve-check text format
|
||||
- xz: Update :term:`SRC_URI`
|
||||
- yocto-uninative: Update to 4.7 for glibc 2.41
|
||||
|
||||
|
||||
Known Issues in Yocto-4.0.26
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
|
||||
Contributors to Yocto-4.0.26
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
|
||||
- Aleksandar Nikolic
|
||||
- Alessio Cascone
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- Ashish Sharma
|
||||
- Bruce Ashfield
|
||||
- Carlos Dominguez
|
||||
- Deepesh Varatharajan
|
||||
- Divya Chellam
|
||||
- Guocai He
|
||||
- Hitendra Prajapati
|
||||
- Hongxu Jia
|
||||
- Jiaying Song
|
||||
- Johannes Kauffmann
|
||||
- Kai Kang
|
||||
- Lee Chee Yang
|
||||
- Libo Chen
|
||||
- Marta Rybczynska
|
||||
- Michael Halstead
|
||||
- Mingli Yu
|
||||
- Moritz Haase
|
||||
- Narpat Mali
|
||||
- Paulo Neves
|
||||
- Peter Marko
|
||||
- Priyal Doshi
|
||||
- Richard Purdie
|
||||
- Robert Yang
|
||||
- Ross Burton
|
||||
- Sakib Sajal
|
||||
- Steve Sakoman
|
||||
- Vijay Anusuri
|
||||
- Yogita Urade
|
||||
- Zhang Peng
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-4.0.26
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`kirkstone </poky/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.26 </poky/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :yocto_git:`d70d287a77d5026b698ac237ab865b2dafd36bb8 </poky/commit/?id=d70d287a77d5026b698ac237ab865b2dafd36bb8>`
|
||||
- Release Artefact: poky-d70d287a77d5026b698ac237ab865b2dafd36bb8
|
||||
- sha: 3ebfadb8bff4c1ca12b3cf3e4ef6e3ac2ce52b73570266daa98436c9959249f2
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.26/poky-d70d287a77d5026b698ac237ab865b2dafd36bb8.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.26/poky-d70d287a77d5026b698ac237ab865b2dafd36bb8.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`kirkstone </openembedded-core/log/?h=kirkstone>`
|
||||
- Tag: :oe_git:`yocto-4.0.26 </openembedded-core/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :oe_git:`1efbe1004bc82e7c14c1e8bd4ce644f5015c3346 </openembedded-core/commit/?id=1efbe1004bc82e7c14c1e8bd4ce644f5015c3346>`
|
||||
- Release Artefact: oecore-1efbe1004bc82e7c14c1e8bd4ce644f5015c3346
|
||||
- sha: d3805e034dabd0865dbf55488b2c16d4ea0351d37aa826f0054a6bfdde5a8be9
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.26/oecore-1efbe1004bc82e7c14c1e8bd4ce644f5015c3346.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.26/oecore-1efbe1004bc82e7c14c1e8bd4ce644f5015c3346.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`kirkstone </meta-mingw/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.26 </meta-mingw/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :yocto_git:`87c22abb1f11be430caf4372e6b833dc7d77564e </meta-mingw/commit/?id=87c22abb1f11be430caf4372e6b833dc7d77564e>`
|
||||
- Release Artefact: meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e
|
||||
- sha: f0bc4873e2e0319fb9d6d6ab9b98eb3f89664d4339a167d2db6a787dd12bc1a8
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.26/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.26/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
|
||||
meta-gplv2
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-gplv2`
|
||||
- Branch: :yocto_git:`kirkstone </meta-gplv2/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.26 </meta-gplv2/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :yocto_git:`d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a </meta-gplv2/commit/?id=d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a>`
|
||||
- Release Artefact: meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a
|
||||
- sha: c386f59f8a672747dc3d0be1d4234b6039273d0e57933eb87caa20f56b9cca6d
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.26/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.26/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.0 </bitbake/log/?h=2.0>`
|
||||
- Tag: :oe_git:`yocto-4.0.26 </bitbake/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :oe_git:`046871d9fd76efdca7b72718b328d8f545523f7e </bitbake/commit/?id=046871d9fd76efdca7b72718b328d8f545523f7e>`
|
||||
- Release Artefact: bitbake-046871d9fd76efdca7b72718b328d8f545523f7e
|
||||
- sha: e9df0a9f5921b583b539188d66b23f120e1751000e7822e76c3391d5c76ee21a
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.26/bitbake-046871d9fd76efdca7b72718b328d8f545523f7e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.26/bitbake-046871d9fd76efdca7b72718b328d8f545523f7e.tar.bz2
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`kirkstone </yocto-docs/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.26 </yocto-docs/log/?h=yocto-4.0.26>`
|
||||
- Git Revision: :yocto_git:`9b4c36f7b02dd4bedfec90206744a1e90e37733c </yocto-docs/commit/?id=9b4c36f7b02dd4bedfec90206744a1e90e37733c>`
|
||||
|
||||
@@ -1,153 +0,0 @@
|
||||
Release notes for Yocto-4.0.27 (Kirkstone)
|
||||
------------------------------------------
|
||||
|
||||
Security Fixes in Yocto-4.0.27
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: Fix :cve_nist:`2025-1178`
|
||||
- busybox: fix :cve_nist:`2023-39810`
|
||||
- connman :fix :cve_nist:`2025-32743`
|
||||
- curl: Ignore :cve_nist:`2025-0725`
|
||||
- ghostscript: Fix :cve_nist:`2025-27830`, :cve_nist:`2025-27831`, :cve_nist:`2025-27832`,
|
||||
:cve_nist:`2025-27834`, :cve_nist:`2025-27835` and :cve_nist:`2025-27836`
|
||||
- ghostscript: Ignore :cve_nist:`2024-29507`, :cve_nist:`2025-27833` and :cve_nist:`2025-27837`
|
||||
- glib-2.0: Fix :cve_nist:`2025-3360`
|
||||
- go: Fix :cve_nist:`2025-22871`
|
||||
- libarchive: Ignore :cve_nist:`2024-48615`
|
||||
- libpam: Fix :cve_nist:`2024-10041`
|
||||
- libsoup-2.4: Fix :cve_nist:`2024-52532`, :cve_nist:`2025-32906` and :cve_nist:`2025-32909`
|
||||
- libsoup: Fix :cve_nist:`2024-52532`, :cve_nist:`2025-32906`, :cve_nist:`2025-32909`,
|
||||
:cve_nist:`2025-32910`, :cve_nist:`2025-32911`, :cve_nist:`2025-32912`, :cve_nist:`2025-32913`
|
||||
and :cve_nist:`2025-32914`
|
||||
- libxml2: Fix :cve_nist:`2025-32414` and :cve_nist:`2025-32415`
|
||||
- ofono: Fix :cve_nist:`2024-7537`
|
||||
- perl: Fix :cve_nist:`2024-56406`
|
||||
- ppp: Fix :cve_nist:`2024-58250`
|
||||
- python3-setuptools: Fix :cve_nist:`2024-6345`
|
||||
- qemu: Ignore :cve_nist:`2023-1386`
|
||||
- ruby: Fix :cve_nist:`2024-43398`
|
||||
- sqlite3: Fix :cve_nist:`2025-29088`
|
||||
- systemd: Ignore :cve_nist:`2022-3821`, :cve_nist:`2022-4415` and :cve_nist:`2022-45873`
|
||||
|
||||
|
||||
Fixes in Yocto-4.0.27
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Revert "cve-update-nvd2-native: Tweak to work better with NFS DL_DIR"
|
||||
- build-appliance-image: Update to kirkstone head revision
|
||||
- cve-update-nvd2-native: add workaround for json5 style list
|
||||
- docs: Fix dead links that use the :term:`DISTRO` macro
|
||||
- docs: manuals: remove repeated word
|
||||
- docs: poky.yaml: introduce DISTRO_LATEST_TAG
|
||||
- glibc: Add single-threaded fast path to rand()
|
||||
- glibc: stable 2.35 branch updates
|
||||
- module.bbclass: add KBUILD_EXTRA_SYMBOLS to install
|
||||
- perl: enable _GNU_SOURCE define via d_gnulibc
|
||||
- poky.conf: bump version for 4.0.27
|
||||
- ref-manual/variables.rst: document autotools class related variables
|
||||
- scripts/install-buildtools: Update to 4.0.26
|
||||
- systemd: backport patch to fix journal issue
|
||||
- systemd: systemd-journald fails to setup LogNamespace
|
||||
- tzdata/tzcode-native: upgrade to 2025b
|
||||
|
||||
|
||||
Known Issues in Yocto-4.0.27
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
|
||||
Contributors to Yocto-4.0.27
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Aleksandar Nikolic
|
||||
- Alexander Kanavin
|
||||
- Alon Bar-Lev
|
||||
- Andrew Kreimer
|
||||
- Antonin Godard
|
||||
- Chen Qi
|
||||
- Deepesh Varatharajan
|
||||
- Divya Chellam
|
||||
- Haitao Liu
|
||||
- Haixiao Yan
|
||||
- Hitendra Prajapati
|
||||
- Peter Marko
|
||||
- Praveen Kumar
|
||||
- Priyal Doshi
|
||||
- Shubham Kulkarni
|
||||
- Soumya Sambu
|
||||
- Steve Sakoman
|
||||
- Vijay Anusuri
|
||||
- Yogita Urade
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-4.0.27
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`kirkstone </poky/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.27 </poky/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :yocto_git:`ab9a994a8cd8e06b519a693db444030999d273b7 </poky/commit/?id=ab9a994a8cd8e06b519a693db444030999d273b7>`
|
||||
- Release Artefact: poky-ab9a994a8cd8e06b519a693db444030999d273b7
|
||||
- sha: 77a366c17cf29eef15c6ff3f44e73f81c07288c723fd4a6dbd8c7ee9b79933f3
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.27/poky-ab9a994a8cd8e06b519a693db444030999d273b7.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.27/poky-ab9a994a8cd8e06b519a693db444030999d273b7.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`kirkstone </openembedded-core/log/?h=kirkstone>`
|
||||
- Tag: :oe_git:`yocto-4.0.27 </openembedded-core/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :oe_git:`e8be08a624b2d024715a5c8b0c37f2345a02336b </openembedded-core/commit/?id=e8be08a624b2d024715a5c8b0c37f2345a02336b>`
|
||||
- Release Artefact: oecore-e8be08a624b2d024715a5c8b0c37f2345a02336b
|
||||
- sha: cc5b0fadab021c6dc61f37fc4ff01a1cf657e7c219488ce264bede42f7f6212f
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.27/oecore-e8be08a624b2d024715a5c8b0c37f2345a02336b.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.27/oecore-e8be08a624b2d024715a5c8b0c37f2345a02336b.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`kirkstone </meta-mingw/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.27 </meta-mingw/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :yocto_git:`87c22abb1f11be430caf4372e6b833dc7d77564e </meta-mingw/commit/?id=87c22abb1f11be430caf4372e6b833dc7d77564e>`
|
||||
- Release Artefact: meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e
|
||||
- sha: f0bc4873e2e0319fb9d6d6ab9b98eb3f89664d4339a167d2db6a787dd12bc1a8
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.27/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.27/meta-mingw-87c22abb1f11be430caf4372e6b833dc7d77564e.tar.bz2
|
||||
|
||||
meta-gplv2
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-gplv2`
|
||||
- Branch: :yocto_git:`kirkstone </meta-gplv2/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.27 </meta-gplv2/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :yocto_git:`d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a </meta-gplv2/commit/?id=d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a>`
|
||||
- Release Artefact: meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a
|
||||
- sha: c386f59f8a672747dc3d0be1d4234b6039273d0e57933eb87caa20f56b9cca6d
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.27/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.27/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.0 </bitbake/log/?h=2.0>`
|
||||
- Tag: :oe_git:`yocto-4.0.27 </bitbake/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :oe_git:`046871d9fd76efdca7b72718b328d8f545523f7e </bitbake/commit/?id=046871d9fd76efdca7b72718b328d8f545523f7e>`
|
||||
- Release Artefact: bitbake-046871d9fd76efdca7b72718b328d8f545523f7e
|
||||
- sha: e9df0a9f5921b583b539188d66b23f120e1751000e7822e76c3391d5c76ee21a
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-4.0.27/bitbake-046871d9fd76efdca7b72718b328d8f545523f7e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-4.0.27/bitbake-046871d9fd76efdca7b72718b328d8f545523f7e.tar.bz2
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`kirkstone </yocto-docs/log/?h=kirkstone>`
|
||||
- Tag: :yocto_git:`yocto-4.0.27 </yocto-docs/log/?h=yocto-4.0.27>`
|
||||
- Git Revision: :yocto_git:`0d51e553d5f83eea6634e03ddc9c7740bf72fcea </yocto-docs/commit/?id=0d51e553d5f83eea6634e03ddc9c7740bf72fcea>`
|
||||
|
||||
@@ -295,7 +295,7 @@ New Features / Enhancements in 4.3
|
||||
- Generation of :term:`SPDX` manifests is now enabled by default.
|
||||
|
||||
- Git based recipes in OE-Core which used the ``git`` protocol have been
|
||||
changed to use ``https`` where possible, as it is typically faster and
|
||||
changed to use `https`` where possible, as it is typically faster and
|
||||
more reliable.
|
||||
|
||||
- The ``os-release`` recipe added a ``CPE_NAME`` to the fields provided, with the
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
Release notes for Yocto-5.0.9 (Scarthgap)
|
||||
-----------------------------------------
|
||||
|
||||
Security Fixes in Yocto-5.0.9
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: Fix :cve_nist:`2024-57360`, :cve_nist:`2025-1176`, :cve_nist:`2025-1178` and
|
||||
:cve_nist:`2025-1181`
|
||||
- expat: Fix :cve_nist:`2024-8176`
|
||||
- freetype: Fix :cve_nist:`2025-27363`
|
||||
- ghostscript: Fix :cve_nist:`2025-27830`, :cve_nist:`2025-27831`, :cve_nist:`2025-27832`,
|
||||
:cve_nist:`2025-27833`, :cve_nist:`2025-27833`, :cve_nist:`2025-27834`, :cve_nist:`2025-27835`
|
||||
and :cve_nist:`2025-27836`
|
||||
- go: fix :cve_nist:`2025-22870` and :cve_nist:`2025-22871`
|
||||
- grub: Fix :cve_nist:`2024-45781`, :cve_nist:`2024-45774`, :cve_nist:`2024-45775`,
|
||||
:cve_nist:`2024-45776`, :cve_nist:`2024-45777`, :cve_nist:`2024-45778`, :cve_nist:`2024-45779`,
|
||||
:cve_nist:`2024-45780`, :cve_nist:`2024-45782`, :cve_nist:`2024-45783`, :cve_nist:`2024-56737`,
|
||||
:cve_nist:`2025-0622`, :cve_nist:`2025-0624`, :cve_nist:`2025-0677`, :cve_nist:`2025-0678`,
|
||||
:cve_nist:`2025-0684`, :cve_nist:`2025-0685`, :cve_nist:`2025-0686`, :cve_nist:`2025-0689`,
|
||||
:cve_nist:`2025-0690`, :cve_nist:`2025-1118` and :cve_nist:`2025-1125`
|
||||
- libarchive: Fix :cve_nist:`2024-20696`, :cve_nist:`2024-48957`, :cve_nist:`2024-48958`,
|
||||
:cve_nist:`2025-1632` and :cve_nist:`2025-25724`
|
||||
- libxslt: Fix :cve_nist:`2024-24855` and :cve_nist:`2024-55549`
|
||||
- linux-yocto/6.6: Fix :cve_nist:`2024-54458`, :cve_nist:`2024-57834`, :cve_nist:`2024-57973`,
|
||||
:cve_nist:`2024-57978`, :cve_nist:`2024-57979`, :cve_nist:`2024-57980`, :cve_nist:`2024-57981`,
|
||||
:cve_nist:`2024-57984`, :cve_nist:`2024-57996`, :cve_nist:`2024-57997`, :cve_nist:`2024-58002`,
|
||||
:cve_nist:`2024-58005`, :cve_nist:`2024-58007`, :cve_nist:`2024-58010`, :cve_nist:`2024-58011`,
|
||||
:cve_nist:`2024-58013`, :cve_nist:`2024-58017`, :cve_nist:`2024-58020`, :cve_nist:`2024-58034`,
|
||||
:cve_nist:`2024-58052`, :cve_nist:`2024-58055`, :cve_nist:`2024-58058`, :cve_nist:`2024-58063`,
|
||||
:cve_nist:`2024-58068`, :cve_nist:`2024-58069`, :cve_nist:`2024-58070`, :cve_nist:`2024-58071`,
|
||||
:cve_nist:`2024-58076`, :cve_nist:`2024-58080`, :cve_nist:`2024-58083`, :cve_nist:`2024-58088`,
|
||||
:cve_nist:`2025-21700`, :cve_nist:`2025-21703`, :cve_nist:`2025-21707`, :cve_nist:`2025-21711`,
|
||||
:cve_nist:`2025-21715`, :cve_nist:`2025-21716`, :cve_nist:`2025-21718`, :cve_nist:`2025-21726`,
|
||||
:cve_nist:`2025-21727`, :cve_nist:`2025-21731`, :cve_nist:`2025-21735`, :cve_nist:`2025-21736`,
|
||||
:cve_nist:`2025-21741`, :cve_nist:`2025-21742`, :cve_nist:`2025-21743`, :cve_nist:`2025-21744`,
|
||||
:cve_nist:`2025-21745`, :cve_nist:`2025-21748`, :cve_nist:`2025-21749`, :cve_nist:`2025-21753`,
|
||||
:cve_nist:`2025-21756`, :cve_nist:`2025-21759`, :cve_nist:`2025-21760`, :cve_nist:`2025-21761`,
|
||||
:cve_nist:`2025-21762`, :cve_nist:`2025-21763`, :cve_nist:`2025-21764`, :cve_nist:`2025-21773`,
|
||||
:cve_nist:`2025-21775`, :cve_nist:`2025-21776`, :cve_nist:`2025-21779`, :cve_nist:`2025-21780`,
|
||||
:cve_nist:`2025-21782`, :cve_nist:`2025-21783`, :cve_nist:`2025-21785`, :cve_nist:`2025-21787`,
|
||||
:cve_nist:`2025-21789`, :cve_nist:`2025-21790`, :cve_nist:`2025-21791`, :cve_nist:`2025-21792`,
|
||||
:cve_nist:`2025-21793`, :cve_nist:`2025-21796`, :cve_nist:`2025-21811`, :cve_nist:`2025-21812`,
|
||||
:cve_nist:`2025-21814`, :cve_nist:`2025-21820`, :cve_nist:`2025-21844`, :cve_nist:`2025-21846`,
|
||||
:cve_nist:`2025-21847`, :cve_nist:`2025-21848`, :cve_nist:`2025-21853`, :cve_nist:`2025-21854`,
|
||||
:cve_nist:`2025-21855`, :cve_nist:`2025-21856`, :cve_nist:`2025-21857`, :cve_nist:`2025-21858`,
|
||||
:cve_nist:`2025-21859`, :cve_nist:`2025-21862`, :cve_nist:`2025-21863`, :cve_nist:`2025-21864`,
|
||||
:cve_nist:`2025-21865`, :cve_nist:`2025-21866`, :cve_nist:`2025-21867`, :cve_nist:`2025-21887`,
|
||||
:cve_nist:`2025-21891`, :cve_nist:`2025-21898`, :cve_nist:`2025-21904`, :cve_nist:`2025-21905`,
|
||||
:cve_nist:`2025-21908`, :cve_nist:`2025-21912`, :cve_nist:`2025-21915`, :cve_nist:`2025-21917`,
|
||||
:cve_nist:`2025-21918`, :cve_nist:`2025-21919`, :cve_nist:`2025-21920`, :cve_nist:`2025-21922`,
|
||||
:cve_nist:`2025-21928`, :cve_nist:`2025-21934`, :cve_nist:`2025-21936`, :cve_nist:`2025-21937`,
|
||||
:cve_nist:`2025-21941`, :cve_nist:`2025-21943`, :cve_nist:`2025-21945`, :cve_nist:`2025-21947`,
|
||||
:cve_nist:`2025-21948`, :cve_nist:`2025-21951`, :cve_nist:`2025-21957`, :cve_nist:`2025-21959`,
|
||||
:cve_nist:`2025-21962`, :cve_nist:`2025-21963`, :cve_nist:`2025-21964`, :cve_nist:`2025-21966`,
|
||||
:cve_nist:`2025-21967`, :cve_nist:`2025-21968`, :cve_nist:`2025-21969`, :cve_nist:`2025-21979`,
|
||||
:cve_nist:`2025-21980`, :cve_nist:`2025-21981`, :cve_nist:`2025-21991` and :cve_nist:`2025-21993`
|
||||
- mpg123: Fix :cve_nist:`2024-10573`
|
||||
- ofono: Fix :cve_nist:`2024-7537`
|
||||
- openssh: Fix :cve_nist:`2025-26465`
|
||||
- puzzles: Ignore :cve_nist:`2024-13769`, :cve_nist:`2024-13770` and :cve_nist:`2025-0837`
|
||||
- qemu: Ignore :cve_nist:`2023-1386`
|
||||
- ruby: Fix :cve_nist:`2025-27219` and :cve_nist:`2025-27220`
|
||||
- rust-cross-canadian: Ignore :cve_nist:`2024-43402`
|
||||
- vim: Fix :cve_nist:`2025-1215`, :cve_nist:`2025-26603`, :cve_nist:`2025-27423` and
|
||||
:cve_nist:`2025-29768`
|
||||
- xserver-xorg: Fix :cve_nist:`2025-26594`, :cve_nist:`2025-26595`, :cve_nist:`2025-26596`,
|
||||
:cve_nist:`2025-26597`, :cve_nist:`2025-26598`, :cve_nist:`2025-26599`, :cve_nist:`2025-26600`
|
||||
and :cve_nist:`2025-26601`
|
||||
- xz: Fix :cve_nist:`2025-31115`
|
||||
|
||||
|
||||
Fixes in Yocto-5.0.9
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- babeltrace2: extend to nativesdk
|
||||
- babeltrace: extend to nativesdk
|
||||
- bitbake: event/utils: Avoid deadlock from lock_timeout() and recursive events
|
||||
- bitbake: utils: Add signal blocking for lock_timeout
|
||||
- bitbake: utils: Print information about lock issue before exiting
|
||||
- bitbake: utils: Tweak lock_timeout logic
|
||||
- build-appliance-image: Update to scarthgap head revision
|
||||
- cve-check.bbclass: Mitigate symlink related error
|
||||
- cve-update-nvd2-native: add workaround for json5 style list
|
||||
- cve-update-nvd2-native: handle missing vulnStatus
|
||||
- gcc: remove paths to sysroot from configargs.h and checksum-options for gcc-cross-canadian
|
||||
- gcc: unify cleanup of include-fixed, apply to cross-canadian
|
||||
- ghostscript: upgrade to 10.05.0
|
||||
- grub: backport strlcpy function
|
||||
- grub: drop obsolete CVE statuses
|
||||
- icu: Adjust ICU_DATA_DIR path on big endian targets
|
||||
- kernel-arch: add macro-prefix-map in KERNEL_CC
|
||||
- libarchive: upgrade to 3.7.9
|
||||
- libxslt: upgrade to 1.1.43
|
||||
- linux-yocto/6.6: update to v6.6.84
|
||||
- mc: set ac_cv_path_ZIP to avoid buildpaths QA issues
|
||||
- mpg123: upgrade to 1.32.10
|
||||
- nativesdk-libtool: sanitize the script, remove buildpaths
|
||||
- openssl: rewrite ptest installation
|
||||
- overview-manual/concepts: remove :term:`PR` from the build dir list
|
||||
- patch.py: set commituser and commitemail for addNote
|
||||
- poky.conf: bump version for 5.0.9
|
||||
- vim: Upgrade to 9.1.1198
|
||||
- xserver-xf86-config: add a configuration fragment to disable screen blanking
|
||||
- xserver-xf86-config: remove obsolete configuration files
|
||||
- xserver-xorg: upgrade to 21.1.16
|
||||
- xz: upgrade to 5.4.7
|
||||
- yocto-uninative: Update to 4.7 for glibc 2.41
|
||||
|
||||
|
||||
Known Issues in Yocto-5.0.9
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
Contributors to Yocto-5.0.9
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- Ashish Sharma
|
||||
- Bruce Ashfield
|
||||
- Changqing Li
|
||||
- Denys Dmytriyenko
|
||||
- Divya Chellam
|
||||
- Hitendra Prajapati
|
||||
- Madhu Marri
|
||||
- Makarios Christakis
|
||||
- Martin Jansa
|
||||
- Michael Halstead
|
||||
- Niko Mauno
|
||||
- Oleksandr Hnatiuk
|
||||
- Peter Marko
|
||||
- Richard Purdie
|
||||
- Ross Burton
|
||||
- Sana Kazi
|
||||
- Stefan Mueller-Klieser
|
||||
- Steve Sakoman
|
||||
- Vijay Anusuri
|
||||
- Virendra Thakur
|
||||
- Vishwas Udupa
|
||||
- Wang Mingyu
|
||||
- Zhang Peng
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-5.0.9
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`scarthgap </poky/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.9 </poky/log/?h=yocto-5.0.9>`
|
||||
- Git Revision: :yocto_git:`bab0f9f62af9af580744948dd3240f648a99879a </poky/commit/?id=bab0f9f62af9af580744948dd3240f648a99879a>`
|
||||
- Release Artefact: poky-bab0f9f62af9af580744948dd3240f648a99879a
|
||||
- sha: ee6811d9fb6c4913e19d6e3569f1edc8ccd793779b237520596506446a6b4531
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.9/poky-bab0f9f62af9af580744948dd3240f648a99879a.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.9/poky-bab0f9f62af9af580744948dd3240f648a99879a.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`scarthgap </openembedded-core/log/?h=scarthgap>`
|
||||
- Tag: :oe_git:`yocto-5.0.9 </openembedded-core/log/?h=yocto-5.0.9>`
|
||||
- Git Revision: :oe_git:`04038ecd1edd6592b826665a2b787387bb7074fa </openembedded-core/commit/?id=04038ecd1edd6592b826665a2b787387bb7074fa>`
|
||||
- Release Artefact: oecore-04038ecd1edd6592b826665a2b787387bb7074fa
|
||||
- sha: 6e201a4b486dfbdfcb7e96d83b962a205ec4764db6ad0e34bd623db18910eddb
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.9/oecore-04038ecd1edd6592b826665a2b787387bb7074fa.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.9/oecore-04038ecd1edd6592b826665a2b787387bb7074fa.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`scarthgap </meta-mingw/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.9 </meta-mingw/log/?h=yocto-5.0.9>`
|
||||
- Git Revision: :yocto_git:`bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f </meta-mingw/commit/?id=bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f>`
|
||||
- Release Artefact: meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f
|
||||
- sha: ab073def6487f237ac125d239b3739bf02415270959546b6b287778664f0ae65
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.9/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.9/meta-mingw-bd9fef71ec005be3c3a6d7f8b99d8116daf70c4f.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.8 </bitbake/log/?h=2.8>`
|
||||
- Tag: :oe_git:`yocto-5.0.9 </bitbake/log/?h=yocto-5.0.9>`
|
||||
- Git Revision: :oe_git:`696c2c1ef095f8b11c7d2eff36fae50f58c62e5e </bitbake/commit/?id=696c2c1ef095f8b11c7d2eff36fae50f58c62e5e>`
|
||||
- Release Artefact: bitbake-696c2c1ef095f8b11c7d2eff36fae50f58c62e5e
|
||||
- sha: fc83f879cd6dd14b9b7eba0161fec23ecc191fed0fb00556ba729dceef6c145f
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.0.9/bitbake-696c2c1ef095f8b11c7d2eff36fae50f58c62e5e.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.0.9/bitbake-696c2c1ef095f8b11c7d2eff36fae50f58c62e5e.tar.bz2
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`scarthgap </yocto-docs/log/?h=scarthgap>`
|
||||
- Tag: :yocto_git:`yocto-5.0.9 </yocto-docs/log/?h=yocto-5.0.9>`
|
||||
- Git Revision: :yocto_git:`56db4fd81f6235428bef9e46a61c11ca0ba89733 </yocto-docs/commit/?id=56db4fd81f6235428bef9e46a61c11ca0ba89733>`
|
||||
|
||||
@@ -1,161 +0,0 @@
|
||||
Release notes for Yocto-5.2.1 (Walnascar)
|
||||
-----------------------------------------
|
||||
|
||||
Security Fixes in Yocto-5.2.1
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- connman :Fix :cve_nist:`2025-32366` and :cve_nist:`2025-32743`
|
||||
- ffmpeg: Fix :cve_nist:`2025-22921`
|
||||
- go: Fix :cve_nist:`2025-22871` and CVE-2025-22873
|
||||
- iputils: Fix :cve_nist:`2025-47268`
|
||||
- libsoup-2.4: Fix :cve_nist:`2024-52532` and :cve_nist:`2025-32911`
|
||||
- libxml2: Fix :cve_nist:`2025-32414` and :cve_nist:`2025-32415`
|
||||
- openssh: Fix :cve_nist:`2025-32728`
|
||||
- perl: Fix :cve_nist:`2024-56406`
|
||||
- qemu: Ignore :cve_nist:`2023-1386`
|
||||
- ruby: Fix :cve_nist:`2025-27219`, :cve_nist:`2025-27220` and :cve_nist:`2025-27221`
|
||||
- webkitgtk: Fix :cve_nist:`2024-54551`, :cve_nist:`2025-24208`, :cve_nist:`2025-24209`,
|
||||
:cve_nist:`2025-24213`, :cve_nist:`2025-24216`, :cve_nist:`2025-24264` and :cve_nist:`2025-30427`
|
||||
|
||||
|
||||
Fixes in Yocto-5.2.1
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- binutils: stable 2.44 branch updates
|
||||
- bluez5: add missing tools to noinst-tools package
|
||||
- build-appliance-image: Update to walnascar head revision
|
||||
- buildtools-tarball: Make buildtools respects host CA certificates
|
||||
- buildtools-tarball: add envvars into :term:`BB_ENV_PASSTHROUGH_ADDITIONS`
|
||||
- buildtools-tarball: move setting of envvars to respective envfile
|
||||
- cdrtools-native: fix booting EFI ISO live failed
|
||||
- contributor-guide/submit-changes: encourage patch version changelogs
|
||||
- gcc: Fix LDRD register overlap in register-indexed mode
|
||||
- glibc-y2038-tests: remove glibc-y2038-tests_2.41.bb recipe
|
||||
- glibc: Add single-threaded fast path to rand()
|
||||
- glibc: stable 2.41 branch update
|
||||
- go: upgrade to 1.24.3
|
||||
- gobject-introspection: Fix wrong :term:`PN` used in MULTILIB_SCRIPTS
|
||||
- icu: set ac_cv_path_install to ensure install tool reproducibility
|
||||
- initscripts: add function log_success_msg/log_failure_msg/log_warning_msg
|
||||
- insane.bbclass: Move test for invalid PACKAGECONFIGs to do_recipe_qa
|
||||
- insane.bbclass: Report all invalid PACKAGECONFIGs for a recipe at once
|
||||
- libxml2: upgrade to 2.13.8
|
||||
- makedumpfile: upgrade to 1.7.7
|
||||
- migration-guides: add release notes for 4.0.26 and 5.0.9
|
||||
- module.bbclass: add KBUILD_EXTRA_SYMBOLS to install
|
||||
- patch.py: set commituser and commitemail for addNote
|
||||
- perl: upgrade to 5.40.2
|
||||
- perlcross: upgrade to 1.6.2
|
||||
- poky.conf: bump version for 5.2.1
|
||||
- ref-manual/release-process: update releases.svg
|
||||
- ref-manual/variables.rst: document :term:`WIC_CREATE_EXTRA_ARGS`
|
||||
- ref-manual/variables.rst: update :term:`ROOT_HOME` documentation
|
||||
- ref-manual: classes: uki: Fix git links
|
||||
- ref-manual: kernel-fitimage.bbclass does not use :term:`SPL_SIGN_KEYNAME`
|
||||
- ruby: upgrade to 3.4.3
|
||||
- sbom.rst: how to disable :term:`SPDX` generation
|
||||
- scripts/install-buildtools: Update to 5.2
|
||||
- sphinx-lint: various fixes
|
||||
- syslinux: improve isohybrid to process extra sector count for ISO 9660 image
|
||||
- test-manual/intro: remove Buildbot version used
|
||||
- tzdata/tzcode-native: upgrade to 2025b
|
||||
- webkitgtk: Use WTF_CPU_UNKNOWN when building for riscv64
|
||||
- webkitgtk: upgrade to 2.48.1
|
||||
|
||||
|
||||
Known Issues in Yocto-5.2.1
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- N/A
|
||||
|
||||
|
||||
Contributors to Yocto-5.2.1
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Adrian Freihofer
|
||||
- Aleksandar Nikolic
|
||||
- Alon Bar-Lev
|
||||
- Antonin Godard
|
||||
- Archana Polampalli
|
||||
- Changqing Li
|
||||
- Deepesh Varatharajan
|
||||
- Divya Chellam
|
||||
- Enrico Jörns
|
||||
- Guðni Már Gilbert
|
||||
- Haixiao Yan
|
||||
- Hongxu Jia
|
||||
- Jiaying Song
|
||||
- Khem Raj
|
||||
- Lee Chee Yang
|
||||
- Leonard Anderweit
|
||||
- Madhu Marri
|
||||
- Mikko Rapeli
|
||||
- Peter Kjellerstedt
|
||||
- Peter Marko
|
||||
- Praveen Kumar
|
||||
- Priyal Doshi
|
||||
- Steve Sakoman
|
||||
- Trevor Woerner
|
||||
- Yi Zhao
|
||||
- Yogita Urade
|
||||
- rajmohan r
|
||||
|
||||
|
||||
Repositories / Downloads for Yocto-5.2.1
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`walnascar </poky/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2.1 </poky/log/?h=yocto-5.2.1>`
|
||||
- Git Revision: :yocto_git:`fd9b605507a20d850a9991316cd190c1d20dc4a6 </poky/commit/?id=fd9b605507a20d850a9991316cd190c1d20dc4a6>`
|
||||
- Release Artefact: poky-fd9b605507a20d850a9991316cd190c1d20dc4a6
|
||||
- sha: 0234a96fc28e60e0acaae2a03118ecde76810c47e8bb259f4950492bd75fc050
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.1/poky-fd9b605507a20d850a9991316cd190c1d20dc4a6.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2.1/poky-fd9b605507a20d850a9991316cd190c1d20dc4a6.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`walnascar </openembedded-core/log/?h=walnascar>`
|
||||
- Tag: :oe_git:`yocto-5.2.1 </openembedded-core/log/?h=yocto-5.2.1>`
|
||||
- Git Revision: :oe_git:`17affdaa600896282e07fb4d64cb23195673baa1 </openembedded-core/commit/?id=17affdaa600896282e07fb4d64cb23195673baa1>`
|
||||
- Release Artefact: oecore-17affdaa600896282e07fb4d64cb23195673baa1
|
||||
- sha: b6c3c15004fcd1efbaa26c9695202806402730dde8e41552a70140cff67c97c9
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.1/oecore-17affdaa600896282e07fb4d64cb23195673baa1.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2.1/oecore-17affdaa600896282e07fb4d64cb23195673baa1.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`walnascar </meta-mingw/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2.1 </meta-mingw/log/?h=yocto-5.2.1>`
|
||||
- Git Revision: :yocto_git:`edce693e1b8fabd84651aa6c0888aafbcf238577 </meta-mingw/commit/?id=edce693e1b8fabd84651aa6c0888aafbcf238577>`
|
||||
- Release Artefact: meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577
|
||||
- sha: 6cfed41b54f83da91a6cf201ec1c2cd4ac284f642b1268c8fa89d2335ea2bce1
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.1/meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2.1/meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.12 </bitbake/log/?h=2.12>`
|
||||
- Tag: :oe_git:`yocto-5.2.1 </bitbake/log/?h=yocto-5.2.1>`
|
||||
- Git Revision: :oe_git:`5b4e20377eea8d428edf1aeb2187c18f82ca6757 </bitbake/commit/?id=5b4e20377eea8d428edf1aeb2187c18f82ca6757>`
|
||||
- Release Artefact: bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757
|
||||
- sha: 48cff22c1e61f47adce474b636ca865e7e0b62293fc5c8829d09e7f1ac5252af
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2.1/bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2.1/bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757.tar.bz2
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`walnascar </yocto-docs/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2.1 </yocto-docs/log/?h=yocto-5.2.1>`
|
||||
- Git Revision: :yocto_git:`6b7019c13054bf11fb16657a3fac85831352cea9 </yocto-docs/commit/?id=6b7019c13054bf11fb16657a3fac85831352cea9>`
|
||||
|
||||
@@ -25,7 +25,7 @@ New Features / Enhancements in |yocto-ver|
|
||||
:ref:`Shared State <overview-manual/concepts:Shared State>` for the
|
||||
dependencies. See :doc:`/test-manual/reproducible-builds`.
|
||||
|
||||
- ``systemd``: Add :term:`WATCHDOG_RUNTIME_SEC`: for controlling the
|
||||
- ``systemd``: Add term:`WATCHDOG_RUNTIME_SEC`: for controlling the
|
||||
``RuntimeWatchdogSec`` option in ``/etc/systemd/system.conf``.
|
||||
|
||||
- :term:`FIT_UBOOT_ENV` to allow including a u-boot script as a text in a
|
||||
@@ -354,7 +354,7 @@ New Features / Enhancements in |yocto-ver|
|
||||
HTTPS tokens may not be required.
|
||||
|
||||
- ``compress``: use ``lz4`` instead of ``lz4c``, as ``lz4c`` as been
|
||||
considered deprecated since 2018.
|
||||
considered deprecrated since 2018.
|
||||
|
||||
- ``server/process``: decrease idle/main loop frequency, as it is idle and
|
||||
main loops have socket select calls to know when to execute.
|
||||
@@ -373,7 +373,7 @@ New Features / Enhancements in |yocto-ver|
|
||||
- ``bb/build``: add a function ``bb.build.listtasks()`` to list the tasks in
|
||||
a datastore.
|
||||
|
||||
- Remove custom exception backtrace formatting, and replace occurrences of
|
||||
- Remove custom exception backtrace formatting, and replace occurences of
|
||||
``bb.exception.format_exception()`` by ``traceback.format_exception()``.
|
||||
|
||||
- ``runqueue``: various performance optimizations including:
|
||||
@@ -598,7 +598,7 @@ New Features / Enhancements in |yocto-ver|
|
||||
code in :oe_git:`meta/lib/oe/license.py </openembedded-core/tree/meta/lib/oe/license.py>`.
|
||||
|
||||
- The recipe ``cairo`` now disables the features ``symbol-lookup``,
|
||||
``spectre``, and ``tests`` by default.
|
||||
``spectre`, and ``tests`` by default.
|
||||
|
||||
- The recipe ``glib-2.0`` now disables the feature ``sysprof`` by default.
|
||||
|
||||
@@ -671,7 +671,7 @@ New Features / Enhancements in |yocto-ver|
|
||||
- New ``bbverbnote`` log utility which can be used to print on the console
|
||||
(equivalent to the ``bb.verbnote`` Python implementation).
|
||||
|
||||
- :ref:`ref-classes-grub-efi`: Add :term:`GRUB_TITLE` variable to set
|
||||
- :ref:``ref-classes-grub-efi``: Add :term:`GRUB_TITLE` variable to set
|
||||
custom GRUB titles.
|
||||
|
||||
- ``gawk``: Enable high precision arithmetic support by default (``mpfr``
|
||||
@@ -2241,60 +2241,3 @@ Thanks to the following people who contributed to this release:
|
||||
|
||||
Repositories / Downloads for Yocto-|yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
poky
|
||||
|
||||
- Repository Location: :yocto_git:`/poky`
|
||||
- Branch: :yocto_git:`walnascar </poky/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2 </poky/log/?h=yocto-5.2>`
|
||||
- Git Revision: :yocto_git:`9b96fdbb0cab02f4a6180e812b02bc9d4c41b1a5 </poky/commit/?id=9b96fdbb0cab02f4a6180e812b02bc9d4c41b1a5>`
|
||||
- Release Artefact: poky-9b96fdbb0cab02f4a6180e812b02bc9d4c41b1a5
|
||||
- sha: 2d3c0e216c7fa71a364986be6754549e2059d37581aad0a53f0f95c33fb1eefe
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2/poky-9b96fdbb0cab02f4a6180e812b02bc9d4c41b1a5.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2/poky-9b96fdbb0cab02f4a6180e812b02bc9d4c41b1a5.tar.bz2
|
||||
|
||||
openembedded-core
|
||||
|
||||
- Repository Location: :oe_git:`/openembedded-core`
|
||||
- Branch: :oe_git:`walnascar </openembedded-core/log/?h=walnascar>`
|
||||
- Tag: :oe_git:`yocto-5.2 </openembedded-core/log/?h=yocto-5.2>`
|
||||
- Git Revision: :oe_git:`6ec2c52b938302b894f119f701ffcf0a847eee85 </openembedded-core/commit/?id=6ec2c52b938302b894f119f701ffcf0a847eee85>`
|
||||
- Release Artefact: oecore-6ec2c52b938302b894f119f701ffcf0a847eee85
|
||||
- sha: 00453354efdd9c977d559f7c0047691bb974170ce313ac9a1e6cb94108d6c648
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2/oecore-6ec2c52b938302b894f119f701ffcf0a847eee85.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2/oecore-6ec2c52b938302b894f119f701ffcf0a847eee85.tar.bz2
|
||||
|
||||
meta-mingw
|
||||
|
||||
- Repository Location: :yocto_git:`/meta-mingw`
|
||||
- Branch: :yocto_git:`walnascar </meta-mingw/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2 </meta-mingw/log/?h=yocto-5.2>`
|
||||
- Git Revision: :yocto_git:`edce693e1b8fabd84651aa6c0888aafbcf238577 </meta-mingw/commit/?id=edce693e1b8fabd84651aa6c0888aafbcf238577>`
|
||||
- Release Artefact: meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577
|
||||
- sha: 6cfed41b54f83da91a6cf201ec1c2cd4ac284f642b1268c8fa89d2335ea2bce1
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2/meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2/meta-mingw-edce693e1b8fabd84651aa6c0888aafbcf238577.tar.bz2
|
||||
|
||||
bitbake
|
||||
|
||||
- Repository Location: :oe_git:`/bitbake`
|
||||
- Branch: :oe_git:`2.12 </bitbake/log/?h=2.12>`
|
||||
- Tag: :oe_git:`yocto-5.2 </bitbake/log/?h=yocto-5.2>`
|
||||
- Git Revision: :oe_git:`5b4e20377eea8d428edf1aeb2187c18f82ca6757 </bitbake/commit/?id=5b4e20377eea8d428edf1aeb2187c18f82ca6757>`
|
||||
- Release Artefact: bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757
|
||||
- sha: 48cff22c1e61f47adce474b636ca865e7e0b62293fc5c8829d09e7f1ac5252af
|
||||
- Download Locations:
|
||||
https://downloads.yoctoproject.org/releases/yocto/yocto-5.2/bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757.tar.bz2
|
||||
https://mirrors.kernel.org/yocto/yocto/yocto-5.2/bitbake-5b4e20377eea8d428edf1aeb2187c18f82ca6757.tar.bz2
|
||||
|
||||
yocto-docs
|
||||
|
||||
- Repository Location: :yocto_git:`/yocto-docs`
|
||||
- Branch: :yocto_git:`walnascar </yocto-docs/log/?h=walnascar>`
|
||||
- Tag: :yocto_git:`yocto-5.2 </yocto-docs/log/?h=yocto-5.2>`
|
||||
- Git Revision: :yocto_git:`b8d9cf79d299b2e553e6bc962527d835206022ec </yocto-docs/commit/?id=b8d9cf79d299b2e553e6bc962527d835206022ec>`
|
||||
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
.. |yocto-codename| replace:: whinlatter
|
||||
.. |yocto-ver| replace:: 5.3
|
||||
.. Note: anchors id below cannot contain substitutions so replace them with the
|
||||
value of |yocto-ver| above.
|
||||
|
||||
Release notes for |yocto-ver| (|yocto-codename|)
|
||||
------------------------------------------------
|
||||
|
||||
New Features / Enhancements in |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Linux kernel XXX, gcc XXX, glibc XXX, LLVM XXX, and over XXX other
|
||||
recipe upgrades.
|
||||
|
||||
- Minimum Python version required on the host: XXX.
|
||||
|
||||
- New variables:
|
||||
|
||||
- Kernel-related changes:
|
||||
|
||||
- New core recipes:
|
||||
|
||||
- New core classes:
|
||||
|
||||
- Architecture-specific changes:
|
||||
|
||||
- QEMU / ``runqemu`` changes:
|
||||
|
||||
- Documentation changes:
|
||||
|
||||
- Go changes:
|
||||
|
||||
- Rust changes:
|
||||
|
||||
- Wic Image Creator changes:
|
||||
|
||||
- SDK-related changes:
|
||||
|
||||
- Testing-related changes:
|
||||
|
||||
- Utility script changes:
|
||||
|
||||
- BitBake changes:
|
||||
|
||||
- Packaging changes:
|
||||
|
||||
- LLVM related changes:
|
||||
|
||||
- SPDX-related changes:
|
||||
|
||||
- ``devtool`` changes:
|
||||
|
||||
- Patchtest-related changes:
|
||||
|
||||
- :ref:`ref-classes-insane` class related changes:
|
||||
|
||||
- Security changes:
|
||||
|
||||
- :ref:`ref-classes-cve-check` changes:
|
||||
|
||||
- New :term:`PACKAGECONFIG` options for individual recipes:
|
||||
|
||||
- Systemd related changes:
|
||||
|
||||
- :ref:`ref-classes-sanity` class changes:
|
||||
|
||||
- Miscellaneous changes:
|
||||
|
||||
Known Issues in |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Recipe License changes in |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following changes have been made to the :term:`LICENSE` values set by recipes:
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 40 40
|
||||
:header-rows: 1
|
||||
|
||||
* - Recipe
|
||||
- Previous value
|
||||
- New value
|
||||
* - ``recipe name``
|
||||
- Previous value
|
||||
- New value
|
||||
|
||||
Security Fixes in |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following CVEs have been fixed:
|
||||
|
||||
.. list-table::
|
||||
:widths: 30 70
|
||||
:header-rows: 1
|
||||
|
||||
* - Recipe
|
||||
- CVE IDs
|
||||
* - ``recipe name``
|
||||
- :cve_nist:`xxx-xxxx`, ...
|
||||
|
||||
Recipe Upgrades in |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following recipes have been upgraded:
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 40 40
|
||||
:header-rows: 1
|
||||
|
||||
* - Recipe
|
||||
- Previous version
|
||||
- New version
|
||||
* - ``recipe name``
|
||||
- Previous version
|
||||
- New version
|
||||
|
||||
Contributors to |yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Thanks to the following people who contributed to this release:
|
||||
|
||||
Repositories / Downloads for Yocto-|yocto-ver|
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -956,7 +956,7 @@ package.
|
||||
|
||||
For more information on the ``oe-pkgdata-util`` utility, see the section
|
||||
:ref:`dev-manual/debugging:Viewing Package Information with
|
||||
``oe-pkgdata-util``` of the Yocto Project Development Tasks Manual.
|
||||
\`\`oe-pkgdata-util\`\`` of the Yocto Project Development Tasks Manual.
|
||||
|
||||
To add a custom package variant of the ``${PN}`` recipe named
|
||||
``${PN}-extra`` (name is arbitrary), one can add it to the
|
||||
|
||||
@@ -47,12 +47,10 @@ Here are features and advantages of the Yocto Project:
|
||||
see the "COMMUNITY" and "ECOSYSTEM" tabs on the
|
||||
:yocto_home:`Yocto Project <>` home page.
|
||||
|
||||
- *Architecture Agnostic:* Yocto Project supports Intel, ARM, MIPS, AMD, PPC,
|
||||
RISC-V and other architectures. Most ODMs, OSVs, and chip vendors create and
|
||||
supply BSPs that support their hardware. If you have custom silicon, you can
|
||||
create a BSP that supports that architecture. See
|
||||
:doc:`ref-manual/yocto-project-supported-features` for details on the level
|
||||
of support for some of these architectures.
|
||||
- *Architecture Agnostic:* Yocto Project supports Intel, ARM, MIPS,
|
||||
AMD, PPC and other architectures. Most ODMs, OSVs, and chip vendors
|
||||
create and supply BSPs that support their hardware. If you have
|
||||
custom silicon, you can create a BSP that supports that architecture.
|
||||
|
||||
Aside from broad architecture support, the Yocto Project fully
|
||||
supports a wide range of devices emulated by the Quick EMUlator
|
||||
|
||||
@@ -4,18 +4,18 @@
|
||||
|
||||
# The DISTRO variable represents the current docs version. It should be used
|
||||
# when referring to the current docs version. See also DISTRO_LATEST_TAG.
|
||||
DISTRO : "5.2"
|
||||
DISTRO : "5.1"
|
||||
# The DISTRO_LATEST_TAG represents the latest tag on the current branch. It
|
||||
# should be used in HTTP link referring to the current docs version. In these
|
||||
# cases, the DISTRO may point to A.B.999 which does not exist (just used to
|
||||
# represent the latest HEAD revision on the branch). DISTRO_LATEST_TAG should
|
||||
# always point to an existing tag.
|
||||
DISTRO_LATEST_TAG : "5.2"
|
||||
DISTRO_NAME_NO_CAP : "walnascar"
|
||||
DISTRO_NAME : "Walnascar"
|
||||
DISTRO_NAME_NO_CAP_MINUS_ONE : "styhead"
|
||||
DISTRO_LATEST_TAG : "5.1"
|
||||
DISTRO_NAME_NO_CAP : "styhead"
|
||||
DISTRO_NAME : "Styhead"
|
||||
DISTRO_NAME_NO_CAP_MINUS_ONE : "scarthgap"
|
||||
DISTRO_NAME_NO_CAP_LTS : "scarthgap"
|
||||
YOCTO_DOC_VERSION : "5.2"
|
||||
YOCTO_DOC_VERSION : "5.1"
|
||||
DISTRO_REL_TAG : "yocto-$DISTRO;"
|
||||
DISTRO_REL_LATEST_TAG : "yocto-&DISTRO_LATEST_TAG;"
|
||||
DOCCONF_VERSION : "dev"
|
||||
|
||||
@@ -3426,8 +3426,6 @@ The variables used by this class are:
|
||||
- :term:`UBOOT_FIT_USER_SETTINGS`: adds a user-specific snippet to the U-Boot
|
||||
Image Tree Source (ITS). Users can include their custom U-Boot Image Tree
|
||||
Source (ITS) snippet in this variable.
|
||||
- :term:`UBOOT_FIT_CONF_FIRMWARE`: adds one image to the ``firmware`` property
|
||||
of the configuration node.
|
||||
- :term:`UBOOT_FIT_CONF_USER_LOADABLES`: adds one or more user-defined images
|
||||
to the ``loadables`` property of the configuration node.
|
||||
|
||||
@@ -3454,7 +3452,7 @@ on target hardware. Using ``systemd`` as init is recommended. Image builds
|
||||
should create an ESP partition for UEFI firmware and copy ``systemd-boot`` and
|
||||
UKI files there. Sample configuration for Wic images is provided in
|
||||
:oe_git:`scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.in
|
||||
</openembedded-core/tree/scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.in>`.
|
||||
<openembedded-core/tree/scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.in>`.
|
||||
UKIs are generated using ``systemd`` reference implementation `ukify
|
||||
<https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__.
|
||||
This class uses a number of variables but tries to find sensible defaults for
|
||||
@@ -3464,7 +3462,7 @@ The variables used by this class are:
|
||||
|
||||
- :term:`EFI_ARCH`: architecture name within EFI standard, set in
|
||||
:oe_git:`meta/conf/image-uefi.conf
|
||||
</openembedded-core/tree/meta/conf/image-uefi.conf>`
|
||||
<openembedded-core/tree/meta/conf/image-uefi.conf>`
|
||||
- :term:`IMAGE_EFI_BOOT_FILES`: files to install to EFI boot partition
|
||||
created by the ``bootimg-efi`` Wic plugin
|
||||
- :term:`INITRAMFS_IMAGE`: initramfs recipe name
|
||||
@@ -3483,9 +3481,9 @@ The variables used by this class are:
|
||||
|
||||
For examples on how to use this class see oeqa selftest
|
||||
:oe_git:`meta/lib/oeqa/selftest/cases/uki.py
|
||||
</openembedded-core/tree/meta/lib/oeqa/selftest/cases/uki.py>`.
|
||||
<openembedded-core/tree/meta/lib/oeqa/selftest/cases/uki.py>`.
|
||||
Also an oeqa runtime test :oe_git:`meta/lib/oeqa/runtime/cases/uki.py
|
||||
</openembedded-core/tree/meta/lib/oeqa/runtime/cases/uki.py>` is provided which
|
||||
<openembedded-core/tree/meta/lib/oeqa/runtime/cases/uki.py>` is provided which
|
||||
verifies that the target system booted the same UKI binary as was set at
|
||||
buildtime via :term:`UKI_FILENAME`.
|
||||
|
||||
|
||||
@@ -435,7 +435,7 @@ You can read more on the ``devtool upgrade`` workflow in the
|
||||
":ref:`dev-manual/devtool:use \`\`devtool upgrade\`\` to create a version of the recipe that supports a newer version of the software`"
|
||||
section in the Yocto Project Application Development and the Extensible
|
||||
Software Development Kit (eSDK) manual. You can also see an example of
|
||||
how to use ``devtool upgrade`` in the ":ref:`dev-manual/upgrading-recipes:using ``devtool upgrade```"
|
||||
how to use ``devtool upgrade`` in the ":ref:`dev-manual/upgrading-recipes:using \`\`devtool upgrade\`\``"
|
||||
section in the Yocto Project Development Tasks Manual.
|
||||
|
||||
.. _devtool-resetting-a-recipe:
|
||||
|
||||
@@ -11,7 +11,6 @@ Yocto Project Reference Manual
|
||||
:numbered:
|
||||
|
||||
system-requirements
|
||||
yocto-project-supported-features
|
||||
terms
|
||||
release-process
|
||||
structure
|
||||
|
||||
@@ -515,7 +515,7 @@ generated during the :ref:`ref-tasks-packagedata` task. The files stored in this
|
||||
directory contain information about each output package produced by the
|
||||
OpenEmbedded build system, and are used in different ways by the build system
|
||||
such as ":ref:`dev-manual/debugging:viewing package information with
|
||||
``oe-pkgdata-util```".
|
||||
\`\`oe-pkgdata-util\`\``".
|
||||
|
||||
.. _structure-build-tmp-sstate-control:
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
width="1992.7236"
|
||||
height="613.35602"
|
||||
viewBox="0 0 1992.7236 613.35599"
|
||||
width="1523.001"
|
||||
height="504.30499"
|
||||
viewBox="0 0 1523.001 504.30497"
|
||||
sodipodi:docname="releases.svg"
|
||||
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||
inkscape:export-filename="../../../../../../../../tmp/releases.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
@@ -70,7 +70,7 @@
|
||||
scale_width="1"
|
||||
end_linecap_type="zerowidth"
|
||||
not_jump="false"
|
||||
message="" />
|
||||
message="<b>Ctrl + click</b> on existing node and move it" />
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="marker5783"
|
||||
@@ -412,9 +412,9 @@
|
||||
inkscape:window-height="2069"
|
||||
id="namedview4"
|
||||
showgrid="true"
|
||||
inkscape:zoom="1.5536106"
|
||||
inkscape:cx="1158.2696"
|
||||
inkscape:cy="273.55632"
|
||||
inkscape:zoom="2.1971372"
|
||||
inkscape:cx="1068.2082"
|
||||
inkscape:cy="287.87461"
|
||||
inkscape:window-x="2256"
|
||||
inkscape:window-y="60"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -433,8 +433,8 @@
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid1257"
|
||||
originx="-289.06071"
|
||||
originy="478.43017"
|
||||
originx="-289.99936"
|
||||
originy="369.99997"
|
||||
spacingy="1"
|
||||
spacingx="1"
|
||||
units="px"
|
||||
@@ -444,90 +444,66 @@
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Image"
|
||||
id="g10"
|
||||
transform="translate(-289.06072,478.43022)">
|
||||
<rect
|
||||
style="fill:#333333;fill-opacity:0;stroke:#000000;stroke-width:0.713896;stroke-linejoin:bevel;stroke-miterlimit:0;stroke-opacity:0"
|
||||
id="rect1"
|
||||
width="1992.0098"
|
||||
height="612.64215"
|
||||
x="289.41766"
|
||||
y="-478.07327"
|
||||
ry="24.97636" />
|
||||
transform="translate(-289.99936,370.00003)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 563.40434,64.000628 v -524.414808 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 563.40434,64.000628 v -415.635938 0 0"
|
||||
id="path207708" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 683.40434,64.000628 v -524.414808 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 683.40434,64.000628 v -415.635938 0 0"
|
||||
id="path207708-4" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 803.40434,64.000628 v -524.414808 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 803.40434,64.000628 v -415.635938 0 0"
|
||||
id="path207708-4-3" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 923.40434,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 923.40434,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1043.4043,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1043.4043,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6-2" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1163.4043,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1163.4043,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6-2-8" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1283.4043,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1283.4043,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6-2-8-4" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1403.4043,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1403.4043,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.475347;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1523.4043,64.000568 v -415.757648 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1523.4043,64.000577 v -524.414757 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1523.4043,64.000588 v -415.635898 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1643.3583,64.000565 v -524.414715 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1643.3583,64.000578 v -415.635868 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1763.4043,64.000565 v -524.414715 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1763.4043,64.000578 v -415.635868 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4-0" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1883.7877,64.878769 v -524.414709 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4-0-8" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2002.9599,64.984489 v -524.414709 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4-0-8-8" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2123.2232,62.984489 v -524.414709 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4-0-8-8-1" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2243.313,63.984489 v -524.414709 0 0"
|
||||
id="path207708-4-3-6-2-8-4-3-8-4-0-8-8-1-9" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 443.40434,64.000628 v -524.414808 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 443.40434,64.000628 v -415.635938 0 0"
|
||||
id="path207708-9" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 323.40434,64.000608 v -375.000008 0 0"
|
||||
id="path207708-9-6" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.50455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 323.40434,64.000616 v -524.414766 0 0"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.449183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 323.40434,64.000618 v -415.635908 0 0"
|
||||
id="path207708-9-6-2" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
@@ -560,7 +536,7 @@
|
||||
x="-59.575905"
|
||||
y="580.05695" /></text>
|
||||
<rect
|
||||
style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1;opacity:0.5"
|
||||
id="rect917-0-0-4-4-9-4"
|
||||
width="160.00002"
|
||||
height="45.000004"
|
||||
@@ -607,6 +583,14 @@
|
||||
y="-73.501534"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4">4.2</tspan></text>
|
||||
<rect
|
||||
style="opacity:0.75;fill:#251f32;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
x="1043.132"
|
||||
y="-328.2114"
|
||||
ry="2.2558987" />
|
||||
<rect
|
||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-6"
|
||||
@@ -631,78 +615,22 @@
|
||||
y="-238.332"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6">5.1</tspan></text>
|
||||
<rect
|
||||
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-6-2"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
x="1043.4697"
|
||||
y="-328.48172"
|
||||
ry="2.2558987" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="1090.4542"
|
||||
y="-309.61823"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-7"><tspan
|
||||
x="1094.2197"
|
||||
y="-309.83084"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3"><tspan
|
||||
sodipodi:role="line"
|
||||
x="1090.4542"
|
||||
y="-309.61823"
|
||||
x="1094.2197"
|
||||
y="-309.83084"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan957-2-8-6-3-9-7-4-2-0-0">Walnascar</tspan><tspan
|
||||
id="tspan957-2-8-6-3-9-7-4-2-0-5">Walnascar</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="1090.4542"
|
||||
y="-291.62155"
|
||||
x="1094.2197"
|
||||
y="-291.83417"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-9">5.2</tspan></text>
|
||||
<rect
|
||||
style="opacity:0.75;fill:#251f32;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-67"
|
||||
width="140"
|
||||
height="45.000004"
|
||||
x="1163.6425"
|
||||
y="-382.27469"
|
||||
ry="2.2558987" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="1214.9716"
|
||||
y="-363.89413"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-53"><tspan
|
||||
sodipodi:role="line"
|
||||
x="1214.9716"
|
||||
y="-363.89413"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan957-2-8-6-3-9-7-4-2-0-5-5">Whinlatter</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="1214.9716"
|
||||
y="-345.89746"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-6">5.3</tspan></text>
|
||||
<rect
|
||||
style="opacity:0.75;fill:#251f32;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5.29752;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-3-67-6"
|
||||
width="982.23163"
|
||||
height="45.000004"
|
||||
x="1283.7023"
|
||||
y="-436.77539"
|
||||
ry="2.2558987" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="1335.1118"
|
||||
y="-418.39484"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-53-0"><tspan
|
||||
sodipodi:role="line"
|
||||
x="1335.1118"
|
||||
y="-418.39484"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan957-2-8-6-3-9-7-4-2-0-5-5-6">Wrynose</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="1335.1118"
|
||||
y="-400.39816"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-6-2">6.0</tspan></text>
|
||||
id="tspan10317-2-9-1-4-6-5-6-6">5.2</tspan></text>
|
||||
<g
|
||||
id="g1591"
|
||||
transform="translate(-516.59566,64.000598)">
|
||||
@@ -753,7 +681,7 @@
|
||||
id="tspan10317-2-9-0-1">5.0</tspan></text>
|
||||
<g
|
||||
id="g1125-0"
|
||||
transform="matrix(0.42240595,0,0,0.41654472,330.77064,-497.11721)"
|
||||
transform="matrix(0.42240595,0,0,0.41654472,330.77064,-441.11721)"
|
||||
style="stroke:none;stroke-width:2.38399">
|
||||
<rect
|
||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.76797;stroke-opacity:1"
|
||||
@@ -995,8 +923,8 @@
|
||||
y="345.7359" /></text>
|
||||
<path
|
||||
id="path29430"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.99503;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 307.54809,63.999718 H 2277.72 Z" />
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.72671;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 307.54809,63.999718 H 1783.4043 Z" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 323.40434,64.000618 v 9.99995 0"
|
||||
@@ -1509,324 +1437,50 @@
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1763.4043,64.000578 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="1885.6029"
|
||||
y="94.285194"
|
||||
id="text1185-9-7-1-1-8-1-0-4-2-8-2"><tspan
|
||||
sodipodi:role="line"
|
||||
x="1885.6029"
|
||||
y="94.285194"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan31345-4-0-4-81-5-2-8">Oct.</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="1885.6029"
|
||||
y="112.28188"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan49906-7-3-8-2-8-9-9">2028</tspan></text>
|
||||
<g
|
||||
id="g1267-4-5-2-7"
|
||||
transform="translate(563.45518,-155.9782)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1200,220.00002 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-1-3" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1220,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-0-5-0-0-5-6"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1240,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-7-5-3-5-9-1"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1260,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-5-2-0-9-9-2"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1280,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-8-9-9-4-1-9"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1299.7216,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-9-7-0-2-6-4-3"
|
||||
inkscape:transform-center-x="-14.78205"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1883.4551,64.021829 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0-1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2005.5908"
|
||||
y="94.339828"
|
||||
id="text1185-9-7-1-1-8-1-0-4-2-8-2-4"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2005.5908"
|
||||
y="94.339828"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan31345-4-0-4-81-5-2-8-7">Apr.</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="2005.5908"
|
||||
y="112.33651"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan49906-7-3-8-2-8-9-9-8">2029</tspan></text>
|
||||
<g
|
||||
id="g1267-4-5-2-7-4"
|
||||
transform="translate(683.44312,-155.92356)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1200,220.00002 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-1-3-5" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1220,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-0-5-0-0-5-6-0"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1240,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-7-5-3-5-9-1-3"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1260,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-5-2-0-9-9-2-6"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1280,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-8-9-9-4-1-9-1"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1299.7216,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-9-7-0-2-6-4-3-0"
|
||||
inkscape:transform-center-x="-14.78205"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2003.443,64.076464 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0-1-6" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2125.6079"
|
||||
y="94.692207"
|
||||
id="text1185-9-7-1-1-8-1-0-4-2-8-2-4-2"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2125.6079"
|
||||
y="94.692207"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan31345-4-0-4-81-5-2-8-7-0">Oct.</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="2125.6079"
|
||||
y="112.68889"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan49906-7-3-8-2-8-9-9-8-6">2029</tspan></text>
|
||||
<g
|
||||
id="g1267-4-5-2-7-4-1"
|
||||
transform="translate(803.46019,-155.57118)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1200,220.00002 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-1-3-5-5" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1220,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-0-5-0-0-5-6-0-5"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1240,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-7-5-3-5-9-1-3-4"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1260,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-5-2-0-9-9-2-6-7"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1280,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-8-9-9-4-1-9-1-6"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1299.7216,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-9-7-0-2-6-4-3-0-5"
|
||||
inkscape:transform-center-x="-14.78205"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2123.4601,64.428843 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0-1-6-6" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2123.3825,64.223284 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0-1-6-3" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2245.5474"
|
||||
y="94.839027"
|
||||
id="text1185-9-7-1-1-8-1-0-4-2-8-2-4-2-7"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2245.5474"
|
||||
y="94.839027"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan31345-4-0-4-81-5-2-8-7-0-4">Apr.</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="2245.5474"
|
||||
y="112.83571"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;stroke:none"
|
||||
id="tspan49906-7-3-8-2-8-9-9-8-6-5">2030</tspan></text>
|
||||
<g
|
||||
id="g1267-4-5-2-7-4-1-2"
|
||||
transform="translate(923.39972,-155.42436)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1200,220.00002 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-1-3-5-5-5" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1220,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-0-5-0-0-5-6-0-5-4"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1240,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-7-5-3-5-9-1-3-4-7"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1260,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-5-2-0-9-9-2-6-7-4"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1280,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-8-9-9-4-1-9-1-6-4"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1299.7216,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-9-7-0-2-6-4-3-0-5-3"
|
||||
inkscape:transform-center-x="-14.78205"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
</g>
|
||||
<g
|
||||
id="g1267-4-5-2-7-4-1-2-0"
|
||||
transform="translate(1043.3579,-155.33829)">
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1200,220.00002 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-1-3-5-5-5-6" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1220,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-0-5-0-0-5-6-0-5-4-8"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1240,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-7-5-3-5-9-1-3-4-7-9"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1260,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-5-2-0-9-9-2-6-7-4-2"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1280,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-8-9-9-4-1-9-1-6-4-6"
|
||||
inkscape:transform-center-x="14.782001"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 1299.7216,219.99997 v 5.00004 0"
|
||||
id="path29548-8-5-0-6-4-6-2-9-0-8-1-3-1-9-6-9-3-4-0-4-6-2-2-7-6-1-9-9-1-4-9-7-0-2-6-4-3-0-5-3-6"
|
||||
inkscape:transform-center-x="-14.78205"
|
||||
inkscape:transform-center-y="-0.085282837" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2243.3996,64.575663 v 9.99999 0"
|
||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-0-1-6-6-0" />
|
||||
<rect
|
||||
style="opacity:0.75;fill:#241f31;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.751473;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-36"
|
||||
width="38.418175"
|
||||
height="23.151052"
|
||||
x="2047.6135"
|
||||
y="-45.172161"
|
||||
x="1605.6135"
|
||||
y="-41.172161"
|
||||
ry="1.1605872" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.98878;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-36-7"
|
||||
width="186.42949"
|
||||
height="110.40546"
|
||||
x="2036.5294"
|
||||
y="-77.753708"
|
||||
x="1594.5294"
|
||||
y="-73.753708"
|
||||
ry="5.5347452" />
|
||||
<rect
|
||||
style="opacity:0.75;fill:#241f31;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.50949;stroke-opacity:1"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-6"
|
||||
width="21.197233"
|
||||
height="19.28739"
|
||||
x="2053.8164"
|
||||
y="-45.883858"
|
||||
x="1611.8163"
|
||||
y="-41.883858"
|
||||
ry="0.96689767" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2132.4917"
|
||||
y="-57.687912"
|
||||
x="1690.4917"
|
||||
y="-53.687912"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2132.4917"
|
||||
y="-57.687912"
|
||||
x="1690.4917"
|
||||
y="-53.687912"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5">Legend</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2098.0986"
|
||||
y="-31.899874"
|
||||
x="1656.0988"
|
||||
y="-27.899874"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2098.0986"
|
||||
y="-31.899874"
|
||||
x="1656.0988"
|
||||
y="-27.899874"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9">Future</tspan></text>
|
||||
<rect
|
||||
@@ -1834,38 +1488,38 @@
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-6-1"
|
||||
width="21.197233"
|
||||
height="19.28739"
|
||||
x="2053.8672"
|
||||
y="-21.756365"
|
||||
x="1611.8671"
|
||||
y="-17.756365"
|
||||
ry="0.96689767" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2128.7158"
|
||||
y="-7.6722765"
|
||||
x="1686.7159"
|
||||
y="-3.6722763"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2128.7158"
|
||||
y="-7.6722765"
|
||||
x="1686.7159"
|
||||
y="-3.6722763"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7">Current (Apr. 25)</tspan></text>
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7">Current (Oct. 24)</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="2109.363"
|
||||
y="16.03771"
|
||||
x="1667.363"
|
||||
y="20.03771"
|
||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2-9"><tspan
|
||||
sodipodi:role="line"
|
||||
x="2109.363"
|
||||
y="16.03771"
|
||||
x="1667.363"
|
||||
y="20.03771"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7-3">End-of-life</tspan></text>
|
||||
<rect
|
||||
style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.50949;stroke-opacity:1"
|
||||
style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.50949;stroke-opacity:1;opacity:0.5"
|
||||
id="rect917-0-0-4-4-9-4-5-3-9-2-6-1-0"
|
||||
width="21.197233"
|
||||
height="19.28739"
|
||||
x="2054.0239"
|
||||
y="1.9667883"
|
||||
x="1612.0239"
|
||||
y="5.9667883"
|
||||
ry="0.96689767" />
|
||||
<rect
|
||||
style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.85786;stroke-opacity:1"
|
||||
|
||||
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 93 KiB |
@@ -726,7 +726,7 @@ tool, which you then use to modify the kernel configuration.
|
||||
$ bitbake linux-yocto -c menuconfig
|
||||
|
||||
|
||||
See the ":ref:`kernel-dev/common:using ``menuconfig```"
|
||||
See the ":ref:`kernel-dev/common:using \`\`menuconfig\`\``"
|
||||
section in the Yocto Project Linux Kernel Development Manual for more
|
||||
information on this configuration tool.
|
||||
|
||||
@@ -750,7 +750,7 @@ which can then be applied by subsequent tasks such as
|
||||
|
||||
Runs ``make menuconfig`` for the kernel. For information on
|
||||
``menuconfig``, see the
|
||||
":ref:`kernel-dev/common:using ``menuconfig```"
|
||||
":ref:`kernel-dev/common:using \`\`menuconfig\`\``"
|
||||
section in the Yocto Project Linux Kernel Development Manual.
|
||||
|
||||
.. _ref-tasks-savedefconfig:
|
||||
|
||||
@@ -63,7 +63,7 @@ universal, the list includes them just in case:
|
||||
This term refers to the area used by the OpenEmbedded build system for
|
||||
builds. The area is created when you ``source`` the setup environment
|
||||
script that is found in the Source Directory
|
||||
(i.e. :ref:`ref-manual/structure:``oe-init-build-env```). The
|
||||
(i.e. :ref:`ref-manual/structure:\`\`oe-init-build-env\`\``). The
|
||||
:term:`TOPDIR` variable points to the :term:`Build Directory`.
|
||||
|
||||
You have a lot of flexibility when creating the :term:`Build Directory`.
|
||||
|
||||
@@ -2243,7 +2243,7 @@ system and gives an overview of their function and contents.
|
||||
resides within the :term:`Build Directory` as ``${TMPDIR}/deploy``.
|
||||
|
||||
For more information on the structure of the Build Directory, see
|
||||
":ref:`ref-manual/structure:the build directory --- ``build/```" section.
|
||||
":ref:`ref-manual/structure:the build directory --- \`\`build/\`\``" section.
|
||||
For more detail on the contents of the ``deploy`` directory, see the
|
||||
":ref:`overview-manual/concepts:images`",
|
||||
":ref:`overview-manual/concepts:package feeds`", and
|
||||
@@ -2285,7 +2285,7 @@ system and gives an overview of their function and contents.
|
||||
contents of :term:`IMGDEPLOYDIR` by the :ref:`ref-classes-image` class.
|
||||
|
||||
For more information on the structure of the :term:`Build Directory`, see
|
||||
":ref:`ref-manual/structure:the build directory --- ``build/```" section.
|
||||
":ref:`ref-manual/structure:the build directory --- \`\`build/\`\``" section.
|
||||
For more detail on the contents of the ``deploy`` directory, see the
|
||||
":ref:`overview-manual/concepts:images`" and
|
||||
":ref:`overview-manual/concepts:application development sdk`" sections both in
|
||||
@@ -4299,33 +4299,9 @@ system and gives an overview of their function and contents.
|
||||
IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
|
||||
|
||||
:term:`IMAGE_ROOTFS_MAXSIZE`
|
||||
Defines the maximum allowed size of the generated image in kilobytes.
|
||||
The build will fail if the generated image size exceeds this value.
|
||||
|
||||
The generated image size undergoes several calculation steps before being
|
||||
compared to :term:`IMAGE_ROOTFS_MAXSIZE`.
|
||||
In the first step, the size of the directory pointed to by :term:`IMAGE_ROOTFS`
|
||||
is calculated.
|
||||
In the second step, the result from the first step is multiplied
|
||||
by :term:`IMAGE_OVERHEAD_FACTOR`.
|
||||
In the third step, the result from the second step is compared with
|
||||
:term:`IMAGE_ROOTFS_SIZE`. The larger value of these is added to
|
||||
:term:`IMAGE_ROOTFS_EXTRA_SPACE`.
|
||||
In the fourth step, the result from the third step is checked for
|
||||
a decimal part. If it has one, it is rounded up to the next integer.
|
||||
If it does not, it is simply converted into an integer.
|
||||
In the fifth step, the :term:`IMAGE_ROOTFS_ALIGNMENT` is added to the result
|
||||
from the fourth step and "1" is subtracted.
|
||||
In the sixth step, the remainder of the division between the result
|
||||
from the fifth step and :term:`IMAGE_ROOTFS_ALIGNMENT` is subtracted from the
|
||||
result of the fifth step. In this way, the result from the fourth step is
|
||||
rounded up to the nearest multiple of :term:`IMAGE_ROOTFS_ALIGNMENT`.
|
||||
|
||||
Thus, if the :term:`IMAGE_ROOTFS_MAXSIZE` is set, is compared with the result
|
||||
of the above calculations and is independent of the final image type.
|
||||
No default value is set for :term:`IMAGE_ROOTFS_MAXSIZE`.
|
||||
|
||||
It's a good idea to set this variable for images that need to fit on a limited
|
||||
Defines the maximum size in Kbytes for the generated image. If the
|
||||
generated image size is above that, the build will fail. It's a good
|
||||
idea to set this variable for images that need to fit on a limited
|
||||
space (e.g. SD card, a fixed-size partition, ...).
|
||||
|
||||
:term:`IMAGE_ROOTFS_SIZE`
|
||||
@@ -4511,24 +4487,6 @@ system and gives an overview of their function and contents.
|
||||
|
||||
INHERIT_DISTRO ?= "debian devshell sstate license remove-libtool create-spdx"
|
||||
|
||||
:term:`INHIBIT_AUTOTOOLS_DEPS`
|
||||
Prevents the :ref:`ref-classes-autotools` class from automatically adding
|
||||
its default build-time dependencies.
|
||||
|
||||
When a recipe inherits the :ref:`ref-classes-autotools` class, several
|
||||
native cross tools such as ``autoconf-native``, ``automake-native``,
|
||||
``libtool-native``, ``libtool-cross`` are added to :term:`DEPENDS` to
|
||||
support the ``autotools`` build process.
|
||||
|
||||
To prevent the build system from adding these dependencies automatically,
|
||||
set the :term:`INHIBIT_AUTOTOOLS_DEPS` variable as follows::
|
||||
|
||||
INHIBIT_AUTOTOOLS_DEPS = "1"
|
||||
|
||||
By default, the value of :term:`INHIBIT_AUTOTOOLS_DEPS` is empty. Setting
|
||||
it to "0" does not disable inhibition. Only the empty string will disable
|
||||
inhibition.
|
||||
|
||||
:term:`INHIBIT_DEFAULT_DEPS`
|
||||
Prevents the default dependencies, namely the C compiler and standard
|
||||
C library (libc), from being added to :term:`DEPENDS`.
|
||||
@@ -4538,23 +4496,6 @@ system and gives an overview of their function and contents.
|
||||
Set the variable to "1" to prevent the default dependencies from
|
||||
being added.
|
||||
|
||||
:term:`INHIBIT_DEFAULT_RUST_DEPS`
|
||||
Prevents the :ref:`ref-classes-rust` class from automatically adding
|
||||
its default build-time dependencies.
|
||||
|
||||
When a recipe inherits the :ref:`ref-classes-rust` class, several
|
||||
tools such as ``rust-native`` and ``${RUSTLIB_DEP}`` (only added when cross-compiling) are added
|
||||
to :term:`DEPENDS` to support the ``rust`` build process.
|
||||
|
||||
To prevent the build system from adding these dependencies automatically,
|
||||
set the :term:`INHIBIT_DEFAULT_RUST_DEPS` variable as follows::
|
||||
|
||||
INHIBIT_DEFAULT_RUST_DEPS = "1"
|
||||
|
||||
By default, the value of :term:`INHIBIT_DEFAULT_RUST_DEPS` is empty. Setting
|
||||
it to "0" does not disable inhibition. Only the empty string will disable
|
||||
inhibition.
|
||||
|
||||
:term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
|
||||
Prevents the OpenEmbedded build system from splitting out debug
|
||||
information during packaging. By default, the build system splits out
|
||||
@@ -4601,25 +4542,6 @@ system and gives an overview of their function and contents.
|
||||
even if the toolchain's binaries are strippable, there are other files
|
||||
needed for the build that are not strippable.
|
||||
|
||||
:term:`INHIBIT_UPDATERCD_BBCLASS`
|
||||
Prevents the :ref:`ref-classes-update-rc.d` class from automatically
|
||||
installing and registering SysV init scripts for packages.
|
||||
|
||||
When a recipe inherits the :ref:`ref-classes-update-rc.d` class, init
|
||||
scripts are typically installed and registered for the packages listed in
|
||||
:term:`INITSCRIPT_PACKAGES`. This ensures that the relevant
|
||||
services are started and stopped at the appropriate runlevels using the
|
||||
traditional SysV init system.
|
||||
|
||||
To prevent the build system from adding these scripts and configurations
|
||||
automatically, set the :term:`INHIBIT_UPDATERCD_BBCLASS` variable as follows::
|
||||
|
||||
INHIBIT_UPDATERCD_BBCLASS = "1"
|
||||
|
||||
By default, the value of :term:`INHIBIT_UPDATERCD_BBCLASS` is empty. Setting
|
||||
it to "0" does not disable inhibition. Only the empty string will disable
|
||||
inhibition.
|
||||
|
||||
:term:`INIT_MANAGER`
|
||||
Specifies the system init manager to use. Available options are:
|
||||
|
||||
@@ -4786,20 +4708,6 @@ system and gives an overview of their function and contents.
|
||||
See the :term:`MACHINE` variable for additional
|
||||
information.
|
||||
|
||||
:term:`INITRAMFS_MAXSIZE`
|
||||
Defines the maximum allowed size of the :term:`Initramfs` image in Kbytes.
|
||||
The build will fail if the :term:`Initramfs` image size exceeds this value.
|
||||
|
||||
The :term:`Initramfs` image size undergoes several calculation steps before
|
||||
being compared to :term:`INITRAMFS_MAXSIZE`.
|
||||
These steps are the same as those used for :term:`IMAGE_ROOTFS_MAXSIZE`
|
||||
and are described in detail in that entry.
|
||||
|
||||
Thus, :term:`INITRAMFS_MAXSIZE` is compared with the result of the calculations
|
||||
and is independent of the final image type (e.g. compressed).
|
||||
A default value for :term:`INITRAMFS_MAXSIZE` is set in
|
||||
:oe_git:`meta/conf/bitbake.conf </openembedded-core/tree/meta/conf/bitbake.conf>`.
|
||||
|
||||
:term:`INITRAMFS_MULTICONFIG`
|
||||
Defines the multiconfig to create a multiconfig dependency to be used by
|
||||
the :ref:`ref-classes-kernel` class.
|
||||
@@ -5036,8 +4944,15 @@ system and gives an overview of their function and contents.
|
||||
options not explicitly specified will be disabled in the kernel
|
||||
config.
|
||||
|
||||
In case :term:`KCONFIG_MODE` is not set the ``defconfig`` file
|
||||
will be handled in ``allnoconfig`` mode.
|
||||
In case :term:`KCONFIG_MODE` is not set the behaviour will depend on where
|
||||
the ``defconfig`` file is coming from. An "in-tree" ``defconfig`` file
|
||||
will be handled in ``alldefconfig`` mode, a ``defconfig`` file placed
|
||||
in ``${WORKDIR}`` through a meta-layer will be handled in
|
||||
``allnoconfig`` mode.
|
||||
|
||||
An "in-tree" ``defconfig`` file can be selected via the
|
||||
:term:`KBUILD_DEFCONFIG` variable. :term:`KCONFIG_MODE` does not need to
|
||||
be explicitly set.
|
||||
|
||||
A ``defconfig`` file compatible with ``allnoconfig`` mode can be
|
||||
generated by copying the ``.config`` file from a working Linux kernel
|
||||
@@ -6216,7 +6131,7 @@ system and gives an overview of their function and contents.
|
||||
By default, no API key is used, which results in larger delays between API
|
||||
requests and limits the number of queries to the public rate limits posted
|
||||
at the `NVD developer's page <https://nvd.nist.gov/developers/start-here>`__.
|
||||
|
||||
|
||||
NVD API keys can be requested through the
|
||||
`Request an API Key <https://nvd.nist.gov/developers/request-an-api-key>`__
|
||||
page. You can set this variable to the NVD API key in your ``local.conf`` file.
|
||||
@@ -7095,7 +7010,7 @@ system and gives an overview of their function and contents.
|
||||
For examples of how this data is used, see the
|
||||
":ref:`overview-manual/concepts:automatically added runtime dependencies`"
|
||||
section in the Yocto Project Overview and Concepts Manual and the
|
||||
":ref:`dev-manual/debugging:viewing package information with ``oe-pkgdata-util```"
|
||||
":ref:`dev-manual/debugging:viewing package information with \`\`oe-pkgdata-util\`\``"
|
||||
section in the Yocto Project Development Tasks Manual. For more
|
||||
information on the shared, global-state directory, see
|
||||
:term:`STAGING_DIR_HOST`.
|
||||
@@ -7149,7 +7064,7 @@ system and gives an overview of their function and contents.
|
||||
the package is built, the version information can be retrieved with
|
||||
``oe-pkgdata-util package-info <package name>``. See the
|
||||
:ref:`dev-manual/debugging:Viewing Package Information with
|
||||
``oe-pkgdata-util``` section of the Yocto Project Development Tasks
|
||||
\`\`oe-pkgdata-util\`\`` section of the Yocto Project Development Tasks
|
||||
Manual for more information on ``oe-pkgdata-util``.
|
||||
|
||||
|
||||
@@ -7846,12 +7761,17 @@ system and gives an overview of their function and contents.
|
||||
prefer to have a read-only root filesystem and prefer to keep
|
||||
writeable data in one place.
|
||||
|
||||
When setting ``INIT_MANAGER = systemd``, the default will be set to::
|
||||
You can override the default by setting the variable in any layer or
|
||||
in the ``local.conf`` file. Because the default is set using a "weak"
|
||||
assignment (i.e. "??="), you can use either of the following forms to
|
||||
define your override::
|
||||
|
||||
ROOT_HOME = "/root"
|
||||
ROOT_HOME ?= "/root"
|
||||
|
||||
You can also override the default by setting the variable in your distro
|
||||
configuration or in the ``local.conf`` file.
|
||||
These
|
||||
override examples use ``/root``, which is probably the most commonly
|
||||
used override.
|
||||
|
||||
:term:`ROOTFS`
|
||||
Indicates a filesystem image to include as the root filesystem.
|
||||
@@ -8846,7 +8766,7 @@ system and gives an overview of their function and contents.
|
||||
class.
|
||||
|
||||
:term:`SPL_SIGN_KEYNAME`
|
||||
The name of keys used by the :ref:`ref-classes-uboot-sign` class
|
||||
The name of keys used by the :ref:`ref-classes-kernel-fitimage` class
|
||||
for signing U-Boot FIT image stored in the :term:`SPL_SIGN_KEYDIR`
|
||||
directory. If we have for example a ``dev.key`` key and a ``dev.crt``
|
||||
certificate stored in the :term:`SPL_SIGN_KEYDIR` directory, you will
|
||||
@@ -9110,7 +9030,7 @@ system and gives an overview of their function and contents.
|
||||
The Yocto Project actually shares the cache data objects built by its
|
||||
autobuilder::
|
||||
|
||||
SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
|
||||
SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
|
||||
|
||||
As such binary artifacts are built for the generic QEMU machines
|
||||
supported by the various Poky releases, they are less likely to be
|
||||
@@ -9134,26 +9054,6 @@ system and gives an overview of their function and contents.
|
||||
|
||||
For details on the process, see the :ref:`ref-classes-staging` class.
|
||||
|
||||
:term:`SSTATE_SKIP_CREATION`
|
||||
The :term:`SSTATE_SKIP_CREATION` variable can be used to skip the
|
||||
creation of :ref:`shared state <overview-manual/concepts:shared state cache>`
|
||||
tarball files. It makes sense e.g. for image creation tasks as tarring images
|
||||
and keeping them in sstate would consume a lot of disk space.
|
||||
|
||||
In general it is not recommended to use this variable as missing sstate
|
||||
artefacts adversely impact the build, particularly for entries in the
|
||||
middle of dependency chains. The case it can make sense is where the
|
||||
size and time costs of the artefact are similar to just running the
|
||||
tasks. This generally only applies to end artefact output like images.
|
||||
|
||||
The syntax to disable it for one task is::
|
||||
|
||||
SSTATE_SKIP_CREATION:task-image-complete = "1"
|
||||
|
||||
The syntax to disable it for the whole recipe is::
|
||||
|
||||
SSTATE_SKIP_CREATION = "1"
|
||||
|
||||
:term:`STAGING_BASE_LIBDIR_NATIVE`
|
||||
Specifies the path to the ``/lib`` subdirectory of the sysroot
|
||||
directory for the build host.
|
||||
@@ -10432,15 +10332,6 @@ system and gives an overview of their function and contents.
|
||||
|
||||
do_compile[depends] += "trusted-firmware-a:do_deploy"
|
||||
|
||||
:term:`UBOOT_FIT_CONF_FIRMWARE`
|
||||
Adds one image to the ``firmware`` property of the configuration node of
|
||||
the U-Boot Image Tree Source (ITS). Sets the ``firmware`` property to
|
||||
select the image to boot first::
|
||||
|
||||
UBOOT_FIT_CONF_FIRMWARE = "fwa"
|
||||
|
||||
If not set, the first entry in "loadables" is used to boot instead.
|
||||
|
||||
:term:`UBOOT_FIT_CONF_USER_LOADABLES`
|
||||
Adds one or more user-defined images to the ``loadables`` property of the
|
||||
configuration node of the U-Boot Image Tree Source (ITS). This variable
|
||||
@@ -10513,7 +10404,7 @@ system and gives an overview of their function and contents.
|
||||
|
||||
UBOOT_FIT_TEE_IMAGE ?= "tee-raw.bin"
|
||||
|
||||
If a relative path is provided, the file is expected to be relative to
|
||||
If a relative path is provided, the file is expected to be relative to
|
||||
U-Boot's :term:`B` directory. An absolute path can be provided too,
|
||||
e.g.::
|
||||
|
||||
@@ -11051,20 +10942,6 @@ system and gives an overview of their function and contents.
|
||||
Specifies the timeout in seconds used by the ``watchdog-config`` recipe
|
||||
and also by ``systemd`` during reboot. The default is 60 seconds.
|
||||
|
||||
:term:`WIC_CREATE_EXTRA_ARGS`
|
||||
If the :term:`IMAGE_FSTYPES` variable contains "wic", the build
|
||||
will generate a
|
||||
:ref:`Wic image <dev-manual/wic:creating partitioned images using wic>`
|
||||
automatically when BitBake builds an image recipe. As part of
|
||||
this process BitBake will invoke the "`wic create`" command. The
|
||||
:term:`WIC_CREATE_EXTRA_ARGS` variable is placed at the end of this
|
||||
command which allows the user to supply additional arguments.
|
||||
|
||||
One such useful purpose for this mechanism is to add the ``-D`` (or
|
||||
``--debug``) argument to the "`wic create`" command. This increases the
|
||||
amount of debugging information written out to the Wic log during the
|
||||
Wic creation process.
|
||||
|
||||
:term:`WIC_SECTOR_SIZE`
|
||||
The variable :term:`WIC_SECTOR_SIZE` controls the sector size of Wic
|
||||
images. In the background, this controls the value of the
|
||||
|
||||
@@ -1,263 +0,0 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
||||
|
||||
**************************************************
|
||||
Yocto Project Supported Architectures And Features
|
||||
**************************************************
|
||||
|
||||
The Yocto Project is putting continuous efforts into testing the changes made to
|
||||
the :term:`OpenEmbedded-Core (OE-Core)` metadata and core tools. The details on
|
||||
how this test environment functions is described in the
|
||||
:doc:`/test-manual/index`.
|
||||
|
||||
These tests are also run for stable and :term:`LTS` versions of the Yocto
|
||||
Project. See the :doc:`/ref-manual/release-process` section of the Yocto Project
|
||||
Reference Manual for more information on these types of releases.
|
||||
|
||||
The infrastructure behind the test environment is the
|
||||
:ref:`Yocto Project Autobuilder <test-manual/intro:Yocto Project Autobuilder
|
||||
Overview>`. The Autobuilder contains a set of Builders that are associated to an
|
||||
architecture or a feature to test. For example, the ``qemuarm64`` builder
|
||||
corresponds to testing the ARM 64-bit architecture.
|
||||
|
||||
Below is a comprehensive list of target architectures and features that are
|
||||
supported, as well as their level of support. For each architecture or feature,
|
||||
their corresponding builders are also listed.
|
||||
|
||||
Primary Supported
|
||||
=================
|
||||
|
||||
The term "primary" means that dedicated builds for these architectures or
|
||||
features are being run on a daily basis on the Yocto Project Autobuilder and
|
||||
also tested with incoming changes before they merge. These changes are usually
|
||||
on the "-next" Git branches of the :term:`OpenEmbedded-Core (OE-Core)`
|
||||
repositories.
|
||||
|
||||
Below is a list of primary tested features, their maintainer(s) and builder(s):
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 20 20 40
|
||||
:header-rows: 1
|
||||
|
||||
* - Feature
|
||||
- Description
|
||||
- Maintainer(s)
|
||||
- Builder(s)
|
||||
* - :wikipedia:`ARM <ARM_architecture_family>`
|
||||
- ARM architecture testing
|
||||
- Collective effort
|
||||
- genericarm64,
|
||||
genericarm64-alt,
|
||||
musl-qemuarm64,
|
||||
qemuarm,
|
||||
qemuarm-alt,
|
||||
qemuarm-oecore,
|
||||
qemuarm-tc,
|
||||
qemuarm64,
|
||||
qemuarm64-alt,
|
||||
qemuarm64-armhost,
|
||||
qemuarm64-ltp,
|
||||
qemuarm64-ptest,
|
||||
qemuarm64-tc,
|
||||
qemuarmv5
|
||||
* - :yocto_git:`Beaglebone </poky/tree/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf>`
|
||||
- Beaglebone image and SDK build testing
|
||||
- Collective effort
|
||||
- beaglebone,
|
||||
beaglebone-alt
|
||||
* - :doc:`Reproducible </test-manual/reproducible-builds>`
|
||||
- reproducibility testing
|
||||
- Collective effort
|
||||
- reproducible
|
||||
* - :term:`Buildtools`
|
||||
- Buildtools generation
|
||||
- Collective effort
|
||||
- buildtools
|
||||
* - `meta-agl-core <https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl>`__
|
||||
- meta-agl-core layer testing
|
||||
- TBD
|
||||
- meta-agl-core
|
||||
* - `meta-arm <https://git.yoctoproject.org/meta-arm>`__
|
||||
- meta-arm layer testing
|
||||
- meta-arm mailing list <meta-arm@lists.yoctoproject.org>
|
||||
- meta-arm
|
||||
* - `meta-aws <https://github.com/aws4embeddedlinux/meta-aws>`__
|
||||
- meta-aws layer testing
|
||||
- TBD
|
||||
- meta-aws
|
||||
* - `meta-intel <https://git.yoctoproject.org/meta-intel>`__
|
||||
- meta-intel layer testing
|
||||
- TBD
|
||||
- meta-intel
|
||||
* - `meta-exein <https://github.com/exein-io/meta-exein>`__
|
||||
- meta-exein layer testing
|
||||
- TBD
|
||||
- meta-exein
|
||||
* - `meta-virtualization <https://git.yoctoproject.org/meta-virtualization/>`__
|
||||
- meta-virtualization layer testing
|
||||
- TBD
|
||||
- meta-virt
|
||||
* - :ref:`Multilib <dev-manual/libraries:Combining Multiple Versions of Library Files into One Image>`
|
||||
- Multilib feature testing
|
||||
- Collective effort
|
||||
- multilib
|
||||
* - :term:`OpenEmbedded-Core selftest<OpenEmbedded-Core (OE-Core)>`
|
||||
- OpenEmbedded-Core layers selftests
|
||||
- Collective effort
|
||||
- oe-selftest-fedora,
|
||||
oe-selftest-debian,
|
||||
oe-selftest-armhost
|
||||
* - Package managers
|
||||
- Package managers (RPM, DEB and IPK formats) testing in the
|
||||
:term:`OpenEmbedded Build System` (different from the
|
||||
``package-management`` :term:`image feature <IMAGE_FEATURES>`)
|
||||
- Collective effort
|
||||
- pkgman-non-rpm (other builders use RPM by default)
|
||||
* - :ref:`Patchtest <contributor-guide/submit-changes:Validating Patches with Patchtest>`
|
||||
- Patchtest tool selftests
|
||||
- TBD
|
||||
- patchtest-selftest
|
||||
* - :wikipedia:`RISC-V (64-bit) <RISC-V>`
|
||||
- RISC-V architecture testing (64-bit)
|
||||
- Collective effort
|
||||
- qemuriscv64,
|
||||
qemuriscv64-ptest,
|
||||
qemuriscv64-tc
|
||||
* - :wikipedia:`systemd <Systemd>`
|
||||
- Systemd init manager testing
|
||||
- Collective effort
|
||||
- no-x11, qa-extras2
|
||||
* - :term:`Toaster`
|
||||
- Toaster web interface testing
|
||||
- Collective effort
|
||||
- toaster
|
||||
* - :ref:`Wic <dev-manual/wic:creating partitioned images using wic>`
|
||||
- WIC image creation testing
|
||||
- Collective effort
|
||||
- wic
|
||||
* - :wikipedia:`X86 <X86>`
|
||||
- X86 architecture testing
|
||||
- Collective effort
|
||||
- genericx86,
|
||||
genericx86-64,
|
||||
genericx86-64-alt,
|
||||
genericx86-alt,
|
||||
musl-qemux86,
|
||||
musl-qemux86-64,
|
||||
qemux86,
|
||||
qemux86-64,
|
||||
qemux86-64-alt,
|
||||
qemux86-64-ltp,
|
||||
qemux86-64-ptest,
|
||||
qemux86-64-tc,
|
||||
qemux86-64-x32,
|
||||
qemux86-alt,
|
||||
qemux86-tc,
|
||||
qemux86-world,
|
||||
qemux86-world-alt
|
||||
|
||||
Secondary Supported
|
||||
===================
|
||||
|
||||
The term "secondary" means that in some cases there is code/feature/support
|
||||
which is desired by people using the project and is in the project's interests
|
||||
to support, however there isn't wide enough interest and support to justify
|
||||
testing all incoming changes on it. There are however project member
|
||||
organisations and maintainers willing to run tests and review fixes.
|
||||
|
||||
This category may be applicable as support/usage in an area develops and grows,
|
||||
or as support/usage fades but we continue to have tests. It can also apply where
|
||||
resourcing isn't available for full primary support but there is
|
||||
member/maintainer support for running tests.
|
||||
|
||||
We therefore have the following criteria and policies for such items:
|
||||
|
||||
- It can be clearly isolated and defined by specific configuration.
|
||||
|
||||
- There is a clear documented group of maintainers agreeing to maintain it.
|
||||
|
||||
- Those maintainers are active and responsive.
|
||||
|
||||
- It is being actively and publicly tested (potentially using
|
||||
the :ref:`Autobuilder <test-manual/intro:Yocto Project Autobuilder Overview>`
|
||||
by agreement, or otherwise).
|
||||
|
||||
- Testing would not be part of standard incoming change testing and regressions
|
||||
would not block incoming patches.
|
||||
|
||||
- The :yocto_wiki:`SWAT </Yocto_Build_Failure_Swat_Team>` team would not handle
|
||||
any test builds on the Autobuilder.
|
||||
|
||||
- Test results can be submitted as part of the release process if desired.
|
||||
|
||||
The Yocto Project :oe_wiki:`Technical Steering Committee (TSC) </TSC>` makes
|
||||
decisions on features in this status and Autobuilder testing. Such support would
|
||||
be dropped if the maintainers/testing were inactive.
|
||||
|
||||
If you are interested in providing resources for improving testing please
|
||||
contact the :oe_wiki:`Technical Steering Committee (TSC) </TSC>`.
|
||||
|
||||
Below is a list of secondary tested features, their maintainer(s) and
|
||||
builder(s):
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 20 20 40
|
||||
:header-rows: 1
|
||||
|
||||
* - Feature
|
||||
- Description
|
||||
- Maintainer(s)
|
||||
- Builder(s)
|
||||
* - :wikipedia:`PowerPC (32-bit) <PowerPC>`
|
||||
- PowerPC architecture testing (32-bit)
|
||||
- TBD
|
||||
- qemuppc,
|
||||
qemuppc-alt,
|
||||
qemuppc-tc
|
||||
* - :oe_git:`meta-openembedded </meta-openembedded>`
|
||||
- meta-openembedded layer testing
|
||||
- TBD
|
||||
- meta-oe
|
||||
* - `meta-mingw <https://git.yoctoproject.org/meta-mingw>`__
|
||||
- mingw based SDKs testing
|
||||
- TBD
|
||||
- meta-mingw
|
||||
* - `meta-webosose <https://github.com/webosose/meta-webosose>`__
|
||||
- meta-webosose layer testing
|
||||
- TBD
|
||||
- meta-webosose
|
||||
* - :wikipedia:`RISC-V (32-bit) <RISC-V>`
|
||||
- RISC-V architecture testing (32-bit)
|
||||
- Collective effort
|
||||
- qemuriscv32,
|
||||
qemuriscv32,
|
||||
qemuriscv32-tc
|
||||
|
||||
Untested
|
||||
========
|
||||
|
||||
"Untested" means that whilst the configurations are present in the project, we
|
||||
don't currently run the tests on any regular basis and new changes are not
|
||||
tested against them. We may take patches in these areas if they make sense but
|
||||
it is on a best effort only basis.
|
||||
|
||||
.. list-table::
|
||||
:widths: 20 20 20 40
|
||||
:header-rows: 1
|
||||
|
||||
* - Feature
|
||||
- Description
|
||||
- Maintainer(s)
|
||||
- Builder(s)
|
||||
* - :wikipedia:`MIPS <MIPS_architecture>`
|
||||
- MIPS architecture testing
|
||||
- No maintainers
|
||||
- qemumips,
|
||||
qemumips64,
|
||||
qemumips-alt,
|
||||
qemumips-tc,
|
||||
qemumips64-tc
|
||||
* - :wikipedia:`PowerPC (64-bit) <PowerPC>`
|
||||
- PowerPC architecture testing (64-bit)
|
||||
- No maintainers
|
||||
- qemuppc64,
|
||||
qemuppc64-tc
|
||||
@@ -26,8 +26,8 @@ ourversion = None
|
||||
if len(sys.argv) == 2:
|
||||
ourversion = sys.argv[1]
|
||||
|
||||
activereleases = ["walnascar", "scarthgap", "kirkstone"]
|
||||
devbranch = "whinlatter"
|
||||
activereleases = ["styhead", "scarthgap", "kirkstone"]
|
||||
devbranch = "walnascar"
|
||||
ltsseries = ["scarthgap", "kirkstone"]
|
||||
|
||||
# used by run-docs-builds to get the default page
|
||||
@@ -36,7 +36,6 @@ if ourversion == "getlatest":
|
||||
sys.exit(0)
|
||||
|
||||
release_series = collections.OrderedDict()
|
||||
release_series["whinlatter"] = "5.3"
|
||||
release_series["walnascar"] = "5.2"
|
||||
release_series["styhead"] = "5.1"
|
||||
release_series["scarthgap"] = "5.0"
|
||||
@@ -71,7 +70,6 @@ release_series["laverne"] = "0.9"
|
||||
|
||||
|
||||
bitbake_mapping = {
|
||||
"whinlatter" : "2.14",
|
||||
"walnascar" : "2.12",
|
||||
"styhead" : "2.10",
|
||||
"scarthgap" : "2.8",
|
||||
|
||||
@@ -51,11 +51,13 @@ fashion. Basically, during the development of a Yocto Project release,
|
||||
the Autobuilder tests if things work. The Autobuilder builds all test
|
||||
targets and runs all the tests.
|
||||
|
||||
The Yocto Project uses standard upstream Buildbot to drive its integration and
|
||||
testing. Buildbot has a plug-in interface that the Yocto Project customizes
|
||||
using code from the :yocto_git:`yocto-autobuilder2 </yocto-autobuilder2>`
|
||||
repository, adding its own console UI plugin. The resulting UI plug-in allows
|
||||
you to visualize builds in a way suited to the project's needs.
|
||||
The Yocto Project uses now uses standard upstream
|
||||
Buildbot (`version 3.8 <https://docs.buildbot.net/3.8.0/>`__) to
|
||||
drive its integration and testing. Buildbot has a plug-in interface
|
||||
that the Yocto Project customizes using code from the
|
||||
``yocto-autobuilder2`` repository, adding its own console UI plugin. The
|
||||
resulting UI plug-in allows you to visualize builds in a way suited to
|
||||
the project's needs.
|
||||
|
||||
A ``helper`` layer provides configuration and job management through
|
||||
scripts found in the ``yocto-autobuilder-helper`` repository. The
|
||||
|
||||
@@ -546,7 +546,7 @@ database.
|
||||
|
||||
You need to run the ``buildslist`` command first to identify existing
|
||||
builds in the database before using the
|
||||
:ref:`toaster-manual/reference:``builddelete``` command. Here is an
|
||||
:ref:`toaster-manual/reference:\`\`builddelete\`\`` command. Here is an
|
||||
example that assumes default repository and :term:`Build Directory` names:
|
||||
|
||||
.. code-block:: shell
|
||||
@@ -555,7 +555,7 @@ example that assumes default repository and :term:`Build Directory` names:
|
||||
$ python ../bitbake/lib/toaster/manage.py buildslist
|
||||
|
||||
If your Toaster database had only one build, the above
|
||||
:ref:`toaster-manual/reference:``buildslist```
|
||||
:ref:`toaster-manual/reference:\`\`buildslist\`\``
|
||||
command would return something like the following::
|
||||
|
||||
1: qemux86 poky core-image-minimal
|
||||
@@ -576,7 +576,7 @@ the database.
|
||||
|
||||
Prior to running the ``builddelete`` command, you need to get the ID
|
||||
associated with builds by using the
|
||||
:ref:`toaster-manual/reference:``buildslist``` command.
|
||||
:ref:`toaster-manual/reference:\`\`buildslist\`\`` command.
|
||||
|
||||
``perf``
|
||||
--------
|
||||
|
||||
@@ -2,4 +2,4 @@ sudo dnf install -y epel-release
|
||||
sudo yum install dnf-plugins-core
|
||||
sudo dnf config-manager --set-enabled crb
|
||||
sudo dnf makecache
|
||||
sudo dnf install bzip2 ccache chrpath cpio cpp diffstat diffutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip libacl make patch perl perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
|
||||
sudo dnf install bzip2 ccache chrpath cpio cpp diffstat diffutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip libacl lz4 make patch perl perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
|
||||
|
||||
@@ -1 +1 @@
|
||||
sudo dnf install bzip2 ccache chrpath cpio cpp diffstat diffutils file findutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip hostname libacl make patch perl perl-Data-Dumper perl-File-Compare perl-File-Copy perl-FindBin perl-Text-ParseWords perl-Thread-Queue perl-bignum perl-locale python python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
|
||||
sudo dnf install bzip2 ccache chrpath cpio cpp diffstat diffutils file findutils gawk gcc gcc-c++ git glibc-devel glibc-langpack-en gzip hostname libacl lz4 make patch perl perl-Data-Dumper perl-File-Compare perl-File-Copy perl-FindBin perl-Text-ParseWords perl-Thread-Queue perl-bignum perl-locale python python3 python3-GitPython python3-jinja2 python3-pexpect python3-pip rpcgen socat tar texinfo unzip wget which xz zstd
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
sudo zypper install bzip2 chrpath diffstat gcc gcc-c++ git gzip hostname libacl1 make makeinfo patch python python-curses python-xml python3 python3-Jinja2 python3-curses python3-pexpect python3-pip rpcgen socat tar wget which xz zstd
|
||||
sudo zypper install bzip2 chrpath diffstat gcc gcc-c++ git gzip hostname libacl1 lz4 make makeinfo patch python python-curses python-xml python3 python3-Jinja2 python3-curses python3-pexpect python3-pip rpcgen socat tar wget which xz zstd
|
||||
sudo pip3 install GitPython
|
||||
|
||||
@@ -1 +1 @@
|
||||
sudo apt-get install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd
|
||||
sudo apt-get install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd
|
||||
|
||||
@@ -9,12 +9,9 @@ python pokybleeding_version_handler () {
|
||||
bpn = bpn.replace("-nativesdk", "").replace("nativesdk-", "")
|
||||
|
||||
if bpn in d.getVar("POKY_AUTOREV_RECIPES").split():
|
||||
if "pseudo" in bpn:
|
||||
bb.warn("Here 5 %s %s" % (d.getVar("PN"), bpn))
|
||||
d.setVar("SRCREV", "${AUTOREV}")
|
||||
srcrev_format = d.getVar("SRCREV_FORMAT")
|
||||
if srcrev_format:
|
||||
for multi_scm in d.getVar("SRCREV_FORMAT").split("_"):
|
||||
if multi_scm != "":
|
||||
d.setVar("SRCREV_%s" % multi_scm, "${AUTOREV}")
|
||||
if "+git" not in d.getVar("PV"):
|
||||
d.appendVar("PV", "+git")
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ ENABLE_WIDEC:class-native = "true"
|
||||
|
||||
# Drop native language support. This removes the
|
||||
# eglibc->bash->gettext->libc-posix-clang-wchar dependency.
|
||||
USE_NLS = "no"
|
||||
USE_NLS="no"
|
||||
# As we don't have native language support, don't install locales into images
|
||||
IMAGE_LINGUAS = ""
|
||||
|
||||
|
||||
@@ -240,13 +240,17 @@ BB_DISKMON_DIRS ??= "\
|
||||
# Using the CDN rather than the yoctoproject.org address is suggested/preferred.
|
||||
#
|
||||
#BB_HASHSERVE_UPSTREAM = 'wss://hashserv.yoctoproject.org/ws'
|
||||
#SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
|
||||
#SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
|
||||
#
|
||||
###SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
|
||||
|
||||
|
||||
#
|
||||
# Qemu configuration
|
||||
#
|
||||
# By default native qemu will build with a builtin VNC server and a SDL UI frontend
|
||||
# where graphical output can be seen.
|
||||
# By default native qemu will build with a builtin VNC server where graphical output can be
|
||||
# seen. The line below enables the SDL UI frontend too.
|
||||
PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
|
||||
# By default libsdl2-native will be built, if you want to use your host's libSDL instead of
|
||||
# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
|
||||
#ASSUME_PROVIDED += "libsdl2-native"
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
SUMMARY = "Boeaglebone Devicetrees"
|
||||
DESCRIPTION = "Handle the dtc files of the beaglebone-yocto via devicetree.bbclass just for testing purpose"
|
||||
SECTION = "kernel"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
|
||||
|
||||
inherit devicetree
|
||||
|
||||
COMPATIBLE_MACHINE = "^(beaglebone-yocto)$"
|
||||
|
||||
# Take a copy of a small devicetree from the kernel's source directory for handling it externally
|
||||
# Borrowed an example DTB overlay from
|
||||
# https://raw.githubusercontent.com/beagleboard/linux/refs/heads/5.10/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts
|
||||
SRC_URI = "\
|
||||
file://am335x-bonegreen-ext.dts \
|
||||
file://BBORG_RELAY-00A2.dts \
|
||||
"
|
||||
|
||||
# The am335x-bonegreen-ext.dts needs also the ti directories
|
||||
DT_INCLUDE:append = " ${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts/ti/omap"
|
||||
|
||||
# Sym-links are handled as extra configuration nodes in FIT images.
|
||||
do_install:append() {
|
||||
ln -sf am335x-bonegreen-ext.dtb "${D}/boot/devicetree/am335x-bonegreen-ext-alias.dtb"
|
||||
}
|
||||
|
||||
do_deploy:append() {
|
||||
ln -sf am335x-bonegreen-ext.dtb "${DEPLOYDIR}/devicetree/am335x-bonegreen-ext-alias.dtb"
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2015 Robert Nelson <robertcnelson@gmail.com>
|
||||
* Copyright (C) 2019 Amilcar Lucas <amilcar.lucas@iav.de>
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
&{/chosen} {
|
||||
overlays {
|
||||
BBORG_RELAY-00A2.kernel = __TIMESTAMP__;
|
||||
};
|
||||
};
|
||||
|
||||
&ocp {
|
||||
P9_41_pinmux { pinctrl-0 = <&P9_41_gpio_pin>;};
|
||||
P9_42_pinmux { pinctrl-0 = <&P9_42_gpio_pin>;};
|
||||
P9_30_pinmux { pinctrl-0 = <&P9_30_gpio_pin>;};
|
||||
P9_27_pinmux { pinctrl-0 = <&P9_27_gpio_pin>;};
|
||||
};
|
||||
|
||||
// relay1
|
||||
&bone_led_P9_41 {
|
||||
status = "okay";
|
||||
label = "relay1";
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
// relay2
|
||||
&bone_led_P9_42 {
|
||||
status = "okay";
|
||||
label = "relay2";
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
// realy3
|
||||
&bone_led_P9_30 {
|
||||
status = "okay";
|
||||
label = "relay3";
|
||||
default-state = "keep";
|
||||
};
|
||||
|
||||
// realy4
|
||||
&bone_led_P9_27 {
|
||||
status = "okay";
|
||||
label = "relay4";
|
||||
default-state = "keep";
|
||||
};
|
||||
@@ -1,14 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
|
||||
*/
|
||||
/dts-v1/;
|
||||
|
||||
#include "am33xx.dtsi"
|
||||
#include "am335x-bone-common.dtsi"
|
||||
#include "am335x-bonegreen-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "TI AM335x BeagleBone Green External";
|
||||
compatible = "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
|
||||
};
|
||||
@@ -2,7 +2,7 @@
|
||||
# long-description: This image contains boot partition and 3 rootfs partitions
|
||||
# created from core-image-minimal and wic-image-minimal image recipes.
|
||||
|
||||
part /boot --source bootimg_pcbios --ondisk sda --label boot --active --align 1024
|
||||
part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
|
||||
part /media --source rootfs --rootfs-dir=wic-image-minimal --ondisk sda --fstype=ext4 --label uuid-test --align 1024 --use-uuid --fsuuid 2c71ef06-a81d-4735-9d3a-379b69c6bdba
|
||||
part /mnt --source rootfs --rootfs-dir=wic-image-minimal --ondisk sda --fstype=ext4 --label core --align 1024
|
||||
|
||||
23
meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
Normal file
23
meta-selftest/recipes-test/selftest-ed/selftest-ed_0.5.bb
Normal file
@@ -0,0 +1,23 @@
|
||||
SUMMARY = "Line-oriented text editor -- selftest GPL-2.0-or-later version"
|
||||
HOMEPAGE = "http://www.gnu.org/software/ed/"
|
||||
SECTION = "base"
|
||||
LICENSE = "GPL-2.0-or-later"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=6ddd5335ef96fb858a138230af773710 \
|
||||
file://main.c;beginline=1;endline=17;md5=36d4b85e5ae9028e918d1cc775c2475e"
|
||||
|
||||
SRC_URI = "${SAVANNAH_GNU_MIRROR}/ed/ed-${PV}.tar.bz2"
|
||||
|
||||
SRC_URI[md5sum] = "4ee21e9dcc9b5b6012c23038734e1632"
|
||||
SRC_URI[sha256sum] = "edef2bbde0fbf0d88232782a0eded323f483a0519d6fde9a3b1809056fd35f3e"
|
||||
|
||||
inherit autotools texinfo
|
||||
|
||||
S = "${WORKDIR}/ed-${PV}"
|
||||
|
||||
EXTRA_OECONF = "'CC=${CC}' 'CXX=${CXX}' 'CFLAGS=${CFLAGS}' 'CXXFLAGS=${CXXFLAGS}' 'CPPFLAGS=${CPPFLAGS}' 'LDFLAGS=${LDFLAGS}'"
|
||||
|
||||
CONFIGUREOPTS:remove = "--disable-dependency-tracking"
|
||||
CONFIGUREOPTS:remove = "--disable-silent-rules"
|
||||
EXTRA_OECONF:remove = "--disable-static"
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
38
meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb
Normal file
38
meta-selftest/recipes-test/selftest-ed/selftest-ed_1.14.1.bb
Normal file
@@ -0,0 +1,38 @@
|
||||
SUMMARY = "Line-oriented text editor -- selftest variant"
|
||||
HOMEPAGE = "http://www.gnu.org/software/ed/"
|
||||
|
||||
LICENSE = "GPL-3.0-or-later"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7 \
|
||||
file://ed.h;endline=20;md5=4e36b7a40e137f42aee718165590d125 \
|
||||
file://main.c;endline=17;md5=c5b8f78f115df187af76868a2aead16a"
|
||||
|
||||
SECTION = "base"
|
||||
|
||||
# LSB states that ed should be in /bin/
|
||||
bindir = "${base_bindir}"
|
||||
|
||||
SRC_URI = "${GNU_MIRROR}/ed/ed-${PV}.tar.lz"
|
||||
RECIPE_NO_UPDATE_REASON = "This recipe is used in selftest and shouldn't be updated otherwise"
|
||||
|
||||
SRC_URI[md5sum] = "7f4a54fa7f366479f03654b8af645fd0"
|
||||
SRC_URI[sha256sum] = "ffb97eb8f2a2b5a71a9b97e3872adce953aa1b8958e04c5b7bf11d556f32552a"
|
||||
|
||||
S = "${WORKDIR}/ed-${PV}"
|
||||
|
||||
EXTRA_OEMAKE = "-e MAKEFLAGS="
|
||||
|
||||
inherit texinfo
|
||||
|
||||
do_configure() {
|
||||
${S}/configure
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake 'DESTDIR=${D}' install
|
||||
# Info dir listing isn't interesting at this point so remove it if it exists.
|
||||
if [ -e "${D}${infodir}/dir" ]; then
|
||||
rm -f ${D}${infodir}/dir
|
||||
fi
|
||||
}
|
||||
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,44 +0,0 @@
|
||||
SUMMARY = "Line-oriented text editor"
|
||||
HOMEPAGE = "http://www.gnu.org/software/ed/"
|
||||
DESCRIPTION = "GNU ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts. A restricted version of ed, red, can only edit files in the current directory and cannot execute shell commands."
|
||||
|
||||
LICENSE = "GPL-2.0-only"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=76d6e300ffd8fb9d18bd9b136a9bba13 \
|
||||
file://ed.h;endline=20;md5=c3212b6c53b09668107420af9368c0ef \
|
||||
file://main.c;endline=17;md5=e5d2ae5ddd1ecb87dc71702c06dd06dc \
|
||||
"
|
||||
|
||||
SECTION = "base"
|
||||
|
||||
CVE_PRODUCT = "gnu:ed"
|
||||
|
||||
# LSB states that ed should be in /bin/
|
||||
bindir = "${base_bindir}"
|
||||
|
||||
# Upstream regularly removes previous releases from https://ftp.gnu.org/gnu/ed/
|
||||
SRC_URI = "${GNU_MIRROR}/ed/ed-${PV}.tar.lz"
|
||||
UPSTREAM_CHECK_URI = "${GNU_MIRROR}/ed/"
|
||||
|
||||
SRC_URI[sha256sum] = "65fec7318f48c2ca17f334ac0f4703defe62037bb13cc23920de077b5fa24523"
|
||||
|
||||
S = "${WORKDIR}/ed-${PV}"
|
||||
|
||||
EXTRA_OEMAKE = "-e MAKEFLAGS="
|
||||
|
||||
# for gcc 15 true/false change
|
||||
CFLAGS += "-std=gnu17"
|
||||
|
||||
inherit texinfo
|
||||
|
||||
do_configure() {
|
||||
${S}/configure
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake 'DESTDIR=${D}' install
|
||||
# Info dir listing isn't interesting at this point so remove it if it exists.
|
||||
if [ -e "${D}${infodir}/dir" ]; then
|
||||
rm -f ${D}${infodir}/dir
|
||||
fi
|
||||
}
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,42 +0,0 @@
|
||||
SUMMARY = "Line-oriented text editor"
|
||||
HOMEPAGE = "http://www.gnu.org/software/ed/"
|
||||
DESCRIPTION = "GNU ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts. A restricted version of ed, red, can only edit files in the current directory and cannot execute shell commands."
|
||||
|
||||
LICENSE = "GPL-2.0-only"
|
||||
LICENSE:gplv3test = "GPL-3.0-or-later"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=cca7f74ec83b7a9ce7ccd195aad471bd \
|
||||
file://ed.h;endline=20;md5=a24e7f91c0fb83e65a746f5994762a49 \
|
||||
file://main.c;endline=17;md5=fd6ad9f1853f123f4ae7a31d59761f09 \
|
||||
"
|
||||
|
||||
SECTION = "base"
|
||||
|
||||
CVE_PRODUCT = "gnu:ed"
|
||||
|
||||
# LSB states that ed should be in /bin/
|
||||
bindir = "${base_bindir}"
|
||||
|
||||
# Upstream regularly removes previous releases from https://ftp.gnu.org/gnu/ed/
|
||||
SRC_URI = "${GNU_MIRROR}/ed/ed-${PV}.tar.lz"
|
||||
UPSTREAM_CHECK_URI = "${GNU_MIRROR}/ed/"
|
||||
|
||||
SRC_URI[sha256sum] = "d6d0c7192b02b0519c902a93719053e865ade5a784a3b327d93d888457b23c4b"
|
||||
|
||||
S = "${WORKDIR}/ed-${PV}"
|
||||
|
||||
EXTRA_OEMAKE = "-e MAKEFLAGS="
|
||||
|
||||
inherit texinfo
|
||||
|
||||
do_configure() {
|
||||
${S}/configure
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake 'DESTDIR=${D}' install
|
||||
# Info dir listing isn't interesting at this point so remove it if it exists.
|
||||
if [ -e "${D}${infodir}/dir" ]; then
|
||||
rm -f ${D}${infodir}/dir
|
||||
fi
|
||||
}
|
||||
BBCLASSEXTEND = "native"
|
||||
@@ -1,4 +1,4 @@
|
||||
part /boot --active --source bootimg_biosplusefi --ondisk sda --sourceparams="loader=grub-efi" --align 1024
|
||||
part /boot --active --source bootimg-biosplusefi --ondisk sda --sourceparams="loader=grub-efi" --align 1024
|
||||
part / --source rootfs --ondisk sda --fstype=${OVERLAYFS_ROOTFS_TYPE} --use-uuid --align 1024
|
||||
part --ondisk sda --fstype=ext4 --size=5 --align 1024
|
||||
bootloader --ptable gpt --timeout=1 --append="rootfstype=${OVERLAYFS_ROOTFS_TYPE} console=ttyS0,115200 console=tty0 ${OVERLAYFS_INIT_OPTION}"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# short-description: This file is used in oe-selftest wic module to test biosplusefi plugin
|
||||
|
||||
part /boot --source bootimg_biosplusefi --sourceparams="loader=grub-efi" --active --align 1024 --use-uuid
|
||||
part /boot --source bootimg-biosplusefi --sourceparams="loader=grub-efi" --active --align 1024 --use-uuid
|
||||
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
|
||||
|
||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# short-description: This file is used in oe-selftest wic module to test efi plugin
|
||||
part /boot --source bootimg_efi --sourceparams="loader=systemd-boot" --active --align 1024 --use-uuid
|
||||
part /boot --source bootimg-efi --sourceparams="loader=systemd-boot" --active --align 1024 --use-uuid
|
||||
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid --label root
|
||||
|
||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# short-description: This file is used in oe-selftest wic module to test efi plugin
|
||||
part /boot --source bootimg_efi --sourceparams="loader=systemd-boot,initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --active --align 1024 --use-uuid
|
||||
part /boot --source bootimg-efi --sourceparams="loader=systemd-boot,initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --active --align 1024 --use-uuid
|
||||
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
|
||||
|
||||
bootloader --timeout=0
|
||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# short-description: This file is used in oe-selftest wic module to test rawcopy plugin
|
||||
|
||||
part /boot --active --source bootimg_pcbios
|
||||
part /boot --active --source bootimg-pcbios
|
||||
part / --source rawcopy --sourceparams="file=${IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL}.ext4" --use-uuid
|
||||
|
||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# short-description: This file is used in oe-selftest wic module to test uefi-kernel loader
|
||||
|
||||
part /boot --source bootimg_efi --sourceparams="loader=uefi-kernel"
|
||||
part /boot --source bootimg-efi --sourceparams="loader=uefi-kernel"
|
||||
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
|
||||
|
||||
|
||||
@@ -17,8 +17,6 @@ PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
|
||||
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules"
|
||||
# Install selected pieces of firmware
|
||||
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-wl12xx linux-firmware-wl18xx linux-firmware-rtl-nic"
|
||||
# increase default size since we install a lot of kernel drivers and firmware by default
|
||||
INITRAMFS_MAXSIZE = "200000"
|
||||
|
||||
# Use an initramfs and populate it with the kernel modules and key firmware
|
||||
INITRAMFS_IMAGE ?= "core-image-initramfs-boot"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#@DESCRIPTION: Machine configuration for generic x86_64 (64-bit) PCs and servers. Supports a moderately wide range of drivers that should boot and be usable on "typical" hardware.
|
||||
|
||||
DEFAULTTUNE ?= "core2-64"
|
||||
require conf/machine/include/x86/tune-x86-64-v3.inc
|
||||
require conf/machine/include/x86/tune-core2.inc
|
||||
require conf/machine/include/genericx86-common.inc
|
||||
|
||||
#For runqemu
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#@DESCRIPTION: Machine configuration for generic x86 (32-bit) PCs. Supports a moderately wide range of drivers that should boot and be usable on "typical" hardware.
|
||||
|
||||
DEFAULTTUNE ?= "core2-32"
|
||||
require conf/machine/include/x86/tune-corei7.inc
|
||||
require conf/machine/include/x86/tune-core2.inc
|
||||
require conf/machine/include/genericx86-common.inc
|
||||
|
||||
#For runqemu
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
# long-description: Creates a partitioned SD card image for Beaglebone.
|
||||
# Boot files are located in the first vfat partition.
|
||||
|
||||
part /boot --source bootimg_partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4 --fixed-size 32 --sourceparams="loader=u-boot" --use-uuid
|
||||
part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4 --fixed-size 32 --sourceparams="loader=u-boot" --use-uuid
|
||||
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4 --use-uuid
|
||||
bootloader --append="console=ttyS0,115200"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# long-description: Creates a partitioned EFI disk image that the user
|
||||
# can directly dd to boot media.
|
||||
|
||||
part /boot --source bootimg_efi --sourceparams="loader=${EFI_PROVIDER},initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --label boot --active --align 1024 --use-uuid
|
||||
part /boot --source bootimg-efi --sourceparams="loader=${EFI_PROVIDER},initrd=${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES}" --label boot --active --align 1024 --use-uuid
|
||||
|
||||
part swap --size 44 --label swap --fstype=swap --use-uuid
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# short-description: Create an EFI disk image for genericx86*
|
||||
# long-description: Creates a partitioned EFI disk image for genericx86* machines
|
||||
part /boot --source bootimg_efi --sourceparams="loader=${EFI_PROVIDER}" --ondisk sda --label msdos --active --align 1024
|
||||
part /boot --source bootimg-efi --sourceparams="loader=${EFI_PROVIDER}" --ondisk sda --label msdos --active --align 1024
|
||||
part / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
|
||||
part swap --ondisk sda --size 44 --label swap1 --fstype=swap
|
||||
|
||||
|
||||
@@ -19,21 +19,6 @@ PACKAGECONFIG_CONFARGS ??= ""
|
||||
|
||||
inherit metadata_scm
|
||||
|
||||
PREFERRED_TOOLCHAIN_TARGET ??= "gcc"
|
||||
PREFERRED_TOOLCHAIN_NATIVE ??= "gcc"
|
||||
PREFERRED_TOOLCHAIN_SDK ??= "gcc"
|
||||
|
||||
PREFERRED_TOOLCHAIN = "${PREFERRED_TOOLCHAIN_TARGET}"
|
||||
PREFERRED_TOOLCHAIN:class-native = "${PREFERRED_TOOLCHAIN_NATIVE}"
|
||||
PREFERRED_TOOLCHAIN:class-cross = "${PREFERRED_TOOLCHAIN_NATIVE}"
|
||||
PREFERRED_TOOLCHAIN:class-crosssdk = "${PREFERRED_TOOLCHAIN_SDK}"
|
||||
PREFERRED_TOOLCHAIN:class-nativesdk = "${PREFERRED_TOOLCHAIN_SDK}"
|
||||
|
||||
TOOLCHAIN ??= "${PREFERRED_TOOLCHAIN}"
|
||||
|
||||
inherit toolchain/gcc-native
|
||||
inherit_defer toolchain/${TOOLCHAIN}
|
||||
|
||||
def lsb_distro_identifier(d):
|
||||
adjust = d.getVar('LSB_DISTRO_ADJUST')
|
||||
adjust_func = None
|
||||
@@ -282,19 +267,10 @@ def buildcfg_neededvars(d):
|
||||
bb.fatal('The following variable(s) were not set: %s\nPlease set them directly, or choose a MACHINE or DISTRO that sets them.' % ', '.join(pesteruser))
|
||||
|
||||
addhandler base_eventhandler
|
||||
base_eventhandler[eventmask] = "bb.event.ConfigParsed bb.event.MultiConfigParsed bb.event.BuildStarted bb.event.RecipePreFinalise bb.event.RecipeParsed bb.event.RecipePreDeferredInherits"
|
||||
base_eventhandler[eventmask] = "bb.event.ConfigParsed bb.event.MultiConfigParsed bb.event.BuildStarted bb.event.RecipePreFinalise bb.event.RecipeParsed"
|
||||
python base_eventhandler() {
|
||||
import bb.runqueue
|
||||
|
||||
if isinstance(e, bb.event.RecipePreDeferredInherits):
|
||||
# Use this to snoop on class extensions and set these up before the deferred inherits
|
||||
# are processed which allows overrides on conditional variables.
|
||||
for c in ['native', 'nativesdk', 'crosssdk', 'cross']:
|
||||
if c in e.inherits:
|
||||
d.setVar('CLASSOVERRIDE', 'class-' + c)
|
||||
break
|
||||
return
|
||||
|
||||
if isinstance(e, bb.event.ConfigParsed):
|
||||
if not d.getVar("NATIVELSBSTRING", False):
|
||||
d.setVar("NATIVELSBSTRING", lsb_distro_identifier(d))
|
||||
|
||||
@@ -32,7 +32,7 @@ CHECKLAYER_REQUIRED_TESTS = "\
|
||||
invalid-packageconfig la \
|
||||
license-checksum license-exception license-exists license-file-missing license-format license-no-generic license-syntax \
|
||||
mime mime-xdg missing-update-alternatives multilib obsolete-license \
|
||||
packages-list patch-fuzz patch-status perllocalpod perm-config perm-line perm-link recipe-naming \
|
||||
packages-list patch-fuzz patch-status perllocalpod perm-config perm-line perm-link \
|
||||
pkgconfig pkgvarcheck pkgv-undefined pn-overrides shebang-size src-uri-bad symlink-to-sysroot \
|
||||
unhandled-features-check unknown-configure-option unlisted-pkg-lics uppercase-pn useless-rpaths \
|
||||
var-undefined virtual-slash xorg-driver-abi"
|
||||
@@ -832,7 +832,7 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d):
|
||||
return False
|
||||
|
||||
for rdepend in rdepends:
|
||||
if rdepend.endswith("-dbg") and "debug-deps" not in skip:
|
||||
if "-dbg" in rdepend and "debug-deps" not in skip:
|
||||
error_msg = "%s rdepends on %s" % (pkg,rdepend)
|
||||
oe.qa.handle_error("debug-deps", error_msg, d)
|
||||
if (not "-dev" in pkg and not "-staticdev" in pkg) and rdepend.endswith("-dev") and "dev-deps" not in skip:
|
||||
@@ -1332,13 +1332,6 @@ python do_qa_patch() {
|
||||
elif os.path.exists(os.path.join(srcdir, "Makefile.in")) and (match_line_in_files(srcdir, "**/Makefile.in", r'\s*TESTS\s*\+?=') or match_line_in_files(srcdir,"**/*.at",r'.*AT_INIT')):
|
||||
oe.qa.handle_error("unimplemented-ptest", "%s: autotools-based tests detected" % d.getVar('PN'), d)
|
||||
|
||||
# Detect cargo-based tests
|
||||
elif os.path.exists(os.path.join(srcdir, "Cargo.toml")) and (
|
||||
match_line_in_files(srcdir, "**/*.rs", r'\s*#\s*\[\s*test\s*\]') or
|
||||
match_line_in_files(srcdir, "**/*.rs", r'\s*#\s*\[\s*cfg\s*\(\s*test\s*\)\s*\]')
|
||||
):
|
||||
oe.qa.handle_error("unimplemented-ptest", "%s: cargo-based tests detected" % d.getVar('PN'), d)
|
||||
|
||||
# Last resort, detect a test directory in sources
|
||||
elif os.path.exists(srcdir) and any(filename.lower() in ["test", "tests"] for filename in os.listdir(srcdir)):
|
||||
oe.qa.handle_error("unimplemented-ptest", "%s: test subdirectory detected" % d.getVar('PN'), d)
|
||||
@@ -1425,6 +1418,16 @@ Rerun configure task after fixing this."""
|
||||
except subprocess.CalledProcessError:
|
||||
pass
|
||||
|
||||
# Check invalid PACKAGECONFIG
|
||||
pkgconfig = (d.getVar("PACKAGECONFIG") or "").split()
|
||||
if pkgconfig:
|
||||
pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
|
||||
for pconfig in pkgconfig:
|
||||
if pconfig not in pkgconfigflags:
|
||||
pn = d.getVar('PN')
|
||||
error_msg = "%s: invalid PACKAGECONFIG: %s" % (pn, pconfig)
|
||||
oe.qa.handle_error("invalid-packageconfig", error_msg, d)
|
||||
|
||||
oe.qa.exit_if_errors(d)
|
||||
}
|
||||
|
||||
@@ -1438,12 +1441,6 @@ python do_qa_unpack() {
|
||||
python do_recipe_qa() {
|
||||
import re
|
||||
|
||||
def test_naming(pn, d):
|
||||
if pn.endswith("-native") and not bb.data.inherits_class("native", d):
|
||||
oe.qa.handle_error("recipe-naming", "Recipe %s appears native but is not, should inherit native" % pn, d)
|
||||
if pn.startswith("nativesdk-") and not bb.data.inherits_class("nativesdk", d):
|
||||
oe.qa.handle_error("recipe-naming", "Recipe %s appears nativesdk but is not, should inherit nativesdk" % pn, d)
|
||||
|
||||
def test_missing_metadata(pn, d):
|
||||
fn = d.getVar("FILE")
|
||||
srcfile = d.getVar('SRC_URI').split()
|
||||
@@ -1478,21 +1475,10 @@ python do_recipe_qa() {
|
||||
if re.search(r"git(hu|la)b\.com/.+/.+/archive/.+", url) or "//codeload.github.com/" in url:
|
||||
oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses unstable GitHub/GitLab archives, convert recipe to use git protocol" % pn, d)
|
||||
|
||||
def test_packageconfig(pn, d):
|
||||
pkgconfigs = (d.getVar("PACKAGECONFIG") or "").split()
|
||||
if pkgconfigs:
|
||||
pkgconfigflags = d.getVarFlags("PACKAGECONFIG") or {}
|
||||
invalid_pkgconfigs = set(pkgconfigs) - set(pkgconfigflags)
|
||||
if invalid_pkgconfigs:
|
||||
error_msg = "%s: invalid PACKAGECONFIG(s): %s" % (pn, " ".join(sorted(invalid_pkgconfigs)))
|
||||
oe.qa.handle_error("invalid-packageconfig", error_msg, d)
|
||||
|
||||
pn = d.getVar('PN')
|
||||
test_naming(pn, d)
|
||||
test_missing_metadata(pn, d)
|
||||
test_missing_maintainer(pn, d)
|
||||
test_srcuri(pn, d)
|
||||
test_packageconfig(pn, d)
|
||||
oe.qa.exit_if_errors(d)
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user