mirror of
https://git.yoctoproject.org/poky
synced 2026-09-12 06:49:32 +02: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()
|
bb.utils.check_system_locale()
|
||||||
|
|
||||||
__version__ = "2.15.0"
|
__version__ = "2.12.0"
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if __version__ != bb.__version__:
|
if __version__ != bb.__version__:
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import io
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
import logging
|
|
||||||
warnings.simplefilter("default")
|
warnings.simplefilter("default")
|
||||||
|
|
||||||
bindir = os.path.dirname(__file__)
|
bindir = os.path.dirname(__file__)
|
||||||
@@ -39,10 +38,6 @@ if __name__ == "__main__":
|
|||||||
sys.exit("--flag only makes sense with --value")
|
sys.exit("--flag only makes sense with --value")
|
||||||
|
|
||||||
quiet = args.quiet or args.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:
|
with bb.tinfoil.Tinfoil(tracking=True, setup_logging=not quiet) as tinfoil:
|
||||||
if args.recipe:
|
if args.recipe:
|
||||||
tinfoil.prepare(quiet=3 if quiet else 2)
|
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
|
delegate access to resources, if this variable is set, the Az Fetcher will
|
||||||
use it when fetching artifacts from the cloud.
|
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::
|
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::
|
task and declare some dependencies::
|
||||||
|
|
||||||
python do_printdate () {
|
python do_printdate () {
|
||||||
import datetime
|
import time
|
||||||
bb.plain('Date: %s' % (datetime.date.today()))
|
print time.strftime('%Y%m%d', time.gmtime())
|
||||||
}
|
}
|
||||||
addtask printdate after do_fetch before do_build
|
addtask printdate after do_fetch before do_build
|
||||||
|
|
||||||
@@ -2074,8 +2074,11 @@ access. Here is a list of available operations:
|
|||||||
Other Functions
|
Other Functions
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Other functions are documented in the
|
You can find many other functions that can be called from Python by
|
||||||
:doc:`/bitbake-user-manual/bitbake-user-manual-library-functions` document.
|
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
|
Extending Python Library Code
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|||||||
@@ -17,8 +17,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
current_version = "dev"
|
current_version = "dev"
|
||||||
|
|
||||||
# String used in sidebar
|
# String used in sidebar
|
||||||
@@ -49,7 +47,6 @@ extlinks = {
|
|||||||
extensions = [
|
extensions = [
|
||||||
'sphinx.ext.autosectionlabel',
|
'sphinx.ext.autosectionlabel',
|
||||||
'sphinx.ext.extlinks',
|
'sphinx.ext.extlinks',
|
||||||
'sphinx.ext.autodoc',
|
|
||||||
]
|
]
|
||||||
autosectionlabel_prefix_document = True
|
autosectionlabel_prefix_document = True
|
||||||
|
|
||||||
@@ -102,7 +99,3 @@ html_last_updated_fmt = '%b %d, %Y'
|
|||||||
|
|
||||||
# Remove the trailing 'dot' in section numbers
|
# Remove the trailing 'dot' in section numbers
|
||||||
html_secnumber_suffix = " "
|
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-ref-variables-context
|
||||||
bitbake-user-manual/bitbake-user-manual-fetching
|
bitbake-user-manual/bitbake-user-manual-fetching
|
||||||
bitbake-user-manual/bitbake-user-manual-ref-variables
|
bitbake-user-manual/bitbake-user-manual-ref-variables
|
||||||
bitbake-user-manual/bitbake-user-manual-library-functions
|
|
||||||
bitbake-user-manual/bitbake-user-manual-hello
|
bitbake-user-manual/bitbake-user-manual-hello
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
BitBake Supported Release Manuals
|
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)
|
Release Series 5.0 (scarthgap)
|
||||||
@@ -26,12 +26,6 @@ Release Series 4.0 (kirkstone)
|
|||||||
BitBake Outdated Release Manuals
|
BitBake Outdated Release Manuals
|
||||||
================================
|
================================
|
||||||
|
|
||||||
****************************
|
|
||||||
Release Series 5.1 (styhead)
|
|
||||||
****************************
|
|
||||||
|
|
||||||
- :yocto_docs:`BitBake 2.10 User Manual </bitbake/2.10/>`
|
|
||||||
|
|
||||||
*******************************
|
*******************************
|
||||||
Release Series 4.3 (nanbield)
|
Release Series 4.3 (nanbield)
|
||||||
*******************************
|
*******************************
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
#
|
#
|
||||||
|
|
||||||
__version__ = "2.15.0"
|
__version__ = "2.12.0"
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
if sys.version_info < (3, 9, 0):
|
if sys.version_info < (3, 9, 0):
|
||||||
@@ -129,25 +129,9 @@ sys.modules['bb.fetch'] = sys.modules['bb.fetch2']
|
|||||||
|
|
||||||
# Messaging convenience functions
|
# Messaging convenience functions
|
||||||
def plain(*args):
|
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))
|
mainlogger.plain(''.join(args))
|
||||||
|
|
||||||
def debug(lvl, *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):
|
if isinstance(lvl, str):
|
||||||
mainlogger.warning("Passed invalid debug level '%s' to bb.debug", lvl)
|
mainlogger.warning("Passed invalid debug level '%s' to bb.debug", lvl)
|
||||||
args = (lvl,) + args
|
args = (lvl,) + args
|
||||||
@@ -155,81 +139,33 @@ def debug(lvl, *args):
|
|||||||
mainlogger.bbdebug(lvl, ''.join(args))
|
mainlogger.bbdebug(lvl, ''.join(args))
|
||||||
|
|
||||||
def note(*args):
|
def note(*args):
|
||||||
"""
|
|
||||||
Prints a message at "note" level.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``args``: one or more strings to print.
|
|
||||||
"""
|
|
||||||
mainlogger.info(''.join(args))
|
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):
|
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))
|
mainlogger.verbnote(''.join(args))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Warnings - things the user likely needs to pay attention to and fix
|
# Warnings - things the user likely needs to pay attention to and fix
|
||||||
#
|
#
|
||||||
def warn(*args):
|
def warn(*args):
|
||||||
"""
|
|
||||||
Prints a warning message.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``args``: one or more strings to print.
|
|
||||||
"""
|
|
||||||
mainlogger.warning(''.join(args))
|
mainlogger.warning(''.join(args))
|
||||||
|
|
||||||
def warnonce(*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))
|
mainlogger.warnonce(''.join(args))
|
||||||
|
|
||||||
def error(*args, **kwargs):
|
def error(*args, **kwargs):
|
||||||
"""
|
|
||||||
Prints an error message.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``args``: one or more strings to print.
|
|
||||||
"""
|
|
||||||
mainlogger.error(''.join(args), extra=kwargs)
|
mainlogger.error(''.join(args), extra=kwargs)
|
||||||
|
|
||||||
def erroronce(*args):
|
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))
|
mainlogger.erroronce(''.join(args))
|
||||||
|
|
||||||
def fatal(*args, **kwargs):
|
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)
|
mainlogger.critical(''.join(args), extra=kwargs)
|
||||||
raise BBHandledException()
|
raise BBHandledException()
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ def add_module_functions(fn, functions, namespace):
|
|||||||
name = "%s.%s" % (namespace, f)
|
name = "%s.%s" % (namespace, f)
|
||||||
parser = PythonParser(name, logger)
|
parser = PythonParser(name, logger)
|
||||||
try:
|
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)
|
#bb.warn("Cached %s" % f)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
try:
|
try:
|
||||||
@@ -87,7 +87,7 @@ def add_module_functions(fn, functions, namespace):
|
|||||||
# Builtin
|
# Builtin
|
||||||
continue
|
continue
|
||||||
src = "".join(lines)
|
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)
|
#bb.warn("Not cached %s" % f)
|
||||||
execs = parser.execs.copy()
|
execs = parser.execs.copy()
|
||||||
# Expand internal module exec references
|
# 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
|
# 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
|
# uses a different fixedhash to cache against. We can take the hit on obtaining the
|
||||||
# text if it isn't in the cache.
|
# 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()):
|
if not fixedhash and (not node or not node.strip()):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -390,10 +390,6 @@ class PythonParser():
|
|||||||
if n.__class__.__name__ == "Call":
|
if n.__class__.__name__ == "Call":
|
||||||
self.visit_Call(n)
|
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.execs.update(self.var_execs)
|
||||||
self.extra = None
|
self.extra = None
|
||||||
if fixedhash:
|
if fixedhash:
|
||||||
|
|||||||
@@ -431,16 +431,6 @@ class RecipeEvent(Event):
|
|||||||
self.fn = fn
|
self.fn = fn
|
||||||
Event.__init__(self)
|
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):
|
class RecipePreFinalise(RecipeEvent):
|
||||||
""" Recipe Parsing Complete but not yet finalised"""
|
""" 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
|
# If that tarball is a local file:// we need to provide a symlink to it
|
||||||
dldir = ld.getVar("DL_DIR")
|
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):
|
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
|
# Create donestamp in old format to avoid triggering a re-download
|
||||||
if ud.donestamp:
|
if ud.donestamp:
|
||||||
@@ -1117,10 +1113,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
|
|||||||
origud.method.build_mirror_data(origud, ld)
|
origud.method.build_mirror_data(origud, ld)
|
||||||
return origud.localpath
|
return origud.localpath
|
||||||
# Otherwise the result is a local file:// and we symlink to it
|
# Otherwise the result is a local file:// and we symlink to it
|
||||||
# This may also be a link to a shallow archive
|
ensure_symlink(ud.localpath, origud.localpath)
|
||||||
# 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)
|
|
||||||
update_stamp(origud, ld)
|
update_stamp(origud, ld)
|
||||||
return ud.localpath
|
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:
|
if ud.lockfile and ud.lockfile != origud.lockfile:
|
||||||
bb.utils.unlockfile(lf)
|
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):
|
def try_mirrors(fetch, d, origud, mirrors, check = False):
|
||||||
"""
|
"""
|
||||||
Try to use a mirrored version of the sources.
|
Try to use a mirrored version of the sources.
|
||||||
@@ -1573,11 +1585,11 @@ class FetchMethod(object):
|
|||||||
datafile = None
|
datafile = None
|
||||||
if output:
|
if output:
|
||||||
for line in output.decode().splitlines():
|
for line in output.decode().splitlines():
|
||||||
if line.startswith('data.tar.') or line == 'data.tar':
|
if line.startswith('data.tar.'):
|
||||||
datafile = line
|
datafile = line
|
||||||
break
|
break
|
||||||
else:
|
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:
|
else:
|
||||||
raise UnpackError("Unable to unpack deb/ipk package - could not list contents", urldata.url)
|
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)
|
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)
|
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):
|
def try_premirror(self, urldata, d):
|
||||||
"""
|
"""
|
||||||
Should premirrors be used?
|
Should premirrors be used?
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ class Az(Wget):
|
|||||||
|
|
||||||
az_sas = d.getVar('AZ_SAS')
|
az_sas = d.getVar('AZ_SAS')
|
||||||
if az_sas and az_sas not in ud.url:
|
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
|
ud.url += az_sas
|
||||||
|
|
||||||
return Wget.checkstatus(self, fetch, ud, d, try_again)
|
return Wget.checkstatus(self, fetch, ud, d, try_again)
|
||||||
@@ -64,8 +62,6 @@ class Az(Wget):
|
|||||||
az_sas = d.getVar('AZ_SAS')
|
az_sas = d.getVar('AZ_SAS')
|
||||||
|
|
||||||
if 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)
|
azuri = '%s%s%s%s' % ('https://', ud.host, ud.path, az_sas)
|
||||||
else:
|
else:
|
||||||
azuri = '%s%s%s' % ('https://', ud.host, ud.path)
|
azuri = '%s%s%s' % ('https://', ud.host, ud.path)
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class Git(FetchMethod):
|
|||||||
ud.bareclone = ud.parm.get("bareclone","0") == "1"
|
ud.bareclone = ud.parm.get("bareclone","0") == "1"
|
||||||
if ud.bareclone:
|
if ud.bareclone:
|
||||||
ud.nocheckout = 1
|
ud.nocheckout = 1
|
||||||
|
|
||||||
ud.unresolvedrev = ""
|
ud.unresolvedrev = ""
|
||||||
ud.branch = ud.parm.get("branch", "")
|
ud.branch = ud.parm.get("branch", "")
|
||||||
if not ud.branch and not ud.nobranch:
|
if not ud.branch and not ud.nobranch:
|
||||||
@@ -324,13 +324,10 @@ class Git(FetchMethod):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def lfs_need_update(self, ud, d):
|
def lfs_need_update(self, ud, d):
|
||||||
if not self._need_lfs(ud):
|
|
||||||
return False
|
|
||||||
|
|
||||||
if self.clonedir_need_update(ud, d):
|
if self.clonedir_need_update(ud, d):
|
||||||
return True
|
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 True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -348,13 +345,6 @@ class Git(FetchMethod):
|
|||||||
def tarball_need_update(self, ud):
|
def tarball_need_update(self, ud):
|
||||||
return ud.write_tarballs and not os.path.exists(ud.fullmirror)
|
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):
|
def try_premirror(self, ud, d):
|
||||||
# If we don't do this, updating an existing checkout with only premirrors
|
# If we don't do this, updating an existing checkout with only premirrors
|
||||||
# is not possible
|
# is not possible
|
||||||
@@ -489,14 +479,35 @@ class Git(FetchMethod):
|
|||||||
raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev)
|
raise bb.fetch2.FetchError("Unable to find revision %s even from upstream" % missing_rev)
|
||||||
|
|
||||||
if self.lfs_need_update(ud, d):
|
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):
|
def lfs_fetch(self, ud, d, clonedir, revision, fetchall=False, progresshandler=None):
|
||||||
"""Helper method for fetching Git LFS data"""
|
"""Helper method for fetching Git LFS data"""
|
||||||
try:
|
try:
|
||||||
if self._need_lfs(ud) and self._contains_lfs(ud, d, clonedir) and len(revision):
|
if self._need_lfs(ud) and self._contains_lfs(ud, d, clonedir) and self._find_git_lfs(d) and len(revision):
|
||||||
self._ensure_git_lfs(d, ud)
|
|
||||||
|
|
||||||
# Using worktree with the revision because .lfsconfig may exists
|
# Using worktree with the revision because .lfsconfig may exists
|
||||||
worktree_add_cmd = "%s worktree add wt %s" % (ud.basecmd, revision)
|
worktree_add_cmd = "%s worktree add wt %s" % (ud.basecmd, revision)
|
||||||
runfetchcmd(worktree_add_cmd, d, log=progresshandler, workdir=clonedir)
|
runfetchcmd(worktree_add_cmd, d, log=progresshandler, workdir=clonedir)
|
||||||
@@ -546,7 +557,7 @@ class Git(FetchMethod):
|
|||||||
try:
|
try:
|
||||||
self.clone_shallow_local(ud, shallowclone, d)
|
self.clone_shallow_local(ud, shallowclone, d)
|
||||||
except:
|
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)
|
bb.utils.remove(tempdir, recurse=True)
|
||||||
os.mkdir(tempdir)
|
os.mkdir(tempdir)
|
||||||
ud.shallow_skip_fast = True
|
ud.shallow_skip_fast = True
|
||||||
@@ -623,8 +634,9 @@ class Git(FetchMethod):
|
|||||||
|
|
||||||
runfetchcmd(fetch_cmd, d, workdir=dest)
|
runfetchcmd(fetch_cmd, d, workdir=dest)
|
||||||
runfetchcmd("%s update-ref %s %s" % (ud.basecmd, ref, revision), d, workdir=dest)
|
runfetchcmd("%s update-ref %s %s" % (ud.basecmd, ref, revision), d, workdir=dest)
|
||||||
# Fetch Git LFS data
|
# Fetch Git LFS data for fast shallow clones
|
||||||
self.lfs_fetch(ud, d, dest, ud.revision)
|
if not ud.shallow_skip_fast:
|
||||||
|
self.lfs_fetch(ud, d, dest, ud.revision)
|
||||||
|
|
||||||
# Apply extra ref wildcards
|
# Apply extra ref wildcards
|
||||||
all_refs_remote = runfetchcmd("%s ls-remote origin 'refs/*'" % ud.basecmd, \
|
all_refs_remote = runfetchcmd("%s ls-remote origin 'refs/*'" % ud.basecmd, \
|
||||||
@@ -646,7 +658,7 @@ class Git(FetchMethod):
|
|||||||
extra_refs.append(r)
|
extra_refs.append(r)
|
||||||
|
|
||||||
for ref in extra_refs:
|
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)
|
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)
|
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)
|
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 = runfetchcmd("%s rev-list -n 1 %s" % (ud.basecmd, ud.parm['tag']), d, workdir=destdir)
|
||||||
output = output.strip()
|
output = output.strip()
|
||||||
if output != ud.revision:
|
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
|
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)
|
||||||
# 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)
|
|
||||||
|
|
||||||
repourl = self._get_repo_url(ud)
|
repourl = self._get_repo_url(ud)
|
||||||
runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=destdir)
|
runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, shlex.quote(repourl)), d, workdir=destdir)
|
||||||
|
|
||||||
if self._contains_lfs(ud, d, 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))
|
bb.note("Repository %s has LFS content but it is not being fetched" % (repourl))
|
||||||
else:
|
else:
|
||||||
self._ensure_git_lfs(d, ud)
|
|
||||||
|
|
||||||
runfetchcmd("%s lfs install --local" % ud.basecmd, d, workdir=destdir)
|
runfetchcmd("%s lfs install --local" % ud.basecmd, d, workdir=destdir)
|
||||||
|
|
||||||
if not ud.nocheckout:
|
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))
|
raise bb.fetch2.FetchError("The command '%s' gave output with more then 1 line unexpectedly, output: '%s'" % (cmd, output))
|
||||||
return output.split()[0] != "0"
|
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
|
Verifies whether the LFS objects for requested revisions have already been downloaded
|
||||||
"""
|
"""
|
||||||
# Bail out early if this repository doesn't use LFS
|
# 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
|
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
|
# The Git LFS specification specifies ([1]) the LFS folder layout so it should be safe to check for file
|
||||||
# existence.
|
# existence.
|
||||||
# [1] https://github.com/git-lfs/git-lfs/blob/main/docs/spec.md#intercepting-git
|
# [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
|
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" % (
|
cmd = "%s grep lfs %s:.gitattributes | wc -l" % (
|
||||||
ud.basecmd, ud.revision)
|
ud.basecmd, refname)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
|
output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
|
||||||
@@ -840,14 +855,11 @@ class Git(FetchMethod):
|
|||||||
pass
|
pass
|
||||||
return False
|
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:
|
return shutil.which("git-lfs", path=d.getVar('PATH')) is not 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))
|
|
||||||
|
|
||||||
def _get_repo_url(self, ud):
|
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
|
# 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
|
# 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
|
# 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.
|
# alternatives so we will not take patches adding password support here.
|
||||||
if ud.user:
|
if ud.user:
|
||||||
@@ -979,7 +991,7 @@ class Git(FetchMethod):
|
|||||||
Return a sortable revision number by counting commits in the history
|
Return a sortable revision number by counting commits in the history
|
||||||
Based on gitpkgv.bblass in meta-openembedded
|
Based on gitpkgv.bblass in meta-openembedded
|
||||||
"""
|
"""
|
||||||
rev = ud.revision
|
rev = self._build_revision(ud, d, name)
|
||||||
localpath = ud.localpath
|
localpath = ud.localpath
|
||||||
rev_file = os.path.join(localpath, "oe-gitpkgv_" + rev)
|
rev_file = os.path.join(localpath, "oe-gitpkgv_" + rev)
|
||||||
if not os.path.exists(localpath):
|
if not os.path.exists(localpath):
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class GitSM(Git):
|
|||||||
url += ";name=%s" % module
|
url += ";name=%s" % module
|
||||||
url += ";subpath=%s" % module
|
url += ";subpath=%s" % module
|
||||||
url += ";nobranch=1"
|
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
|
# Note that adding "user=" here to give credentials to the
|
||||||
# submodule is not supported. Since using SRC_URI to give git://
|
# submodule is not supported. Since using SRC_URI to give git://
|
||||||
# URL a password is not supported, one have to use one of the
|
# 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)
|
ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d)
|
||||||
|
|
||||||
if not ud.bareclone and ret:
|
if not ud.bareclone and ret:
|
||||||
cmdprefix = ""
|
# All submodules should already be downloaded and configured in the tree. This simply
|
||||||
# Avoid LFS smudging (replacing the LFS pointers with the actual content) when LFS shouldn't be used but git-lfs is installed.
|
# sets up the configuration and checks out the files. The main project config should
|
||||||
if not self._need_lfs(ud):
|
# remain unmodified, and no download from the internet should occur. As such, lfs smudge
|
||||||
cmdprefix = "GIT_LFS_SKIP_SMUDGE=1 "
|
# should also be skipped as these files were already smudged in the fetch stage if lfs
|
||||||
runfetchcmd("%s%s submodule update --recursive --no-fetch" % (cmdprefix, ud.basecmd), d, quiet=True, workdir=ud.destdir)
|
# 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(self, ud, d):
|
||||||
def clean_submodule(ud, url, module, modpath, workdir, d):
|
def clean_submodule(ud, url, module, modpath, workdir, d):
|
||||||
url += ";bareclone=1;nobranch=1"
|
url += ";bareclone=1;nobranch=1"
|
||||||
|
|||||||
@@ -176,41 +176,4 @@ def get_file_depends(d):
|
|||||||
dep_files.append(os.path.abspath(fn))
|
dep_files.append(os.path.abspath(fn))
|
||||||
return " ".join(dep_files)
|
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
|
from bb.parse.parse_py import __version__, ConfHandler, BBHandler
|
||||||
|
|||||||
@@ -340,7 +340,9 @@ class InheritDeferredNode(AstNode):
|
|||||||
self.inherit = (classes, filename, lineno)
|
self.inherit = (classes, filename, lineno)
|
||||||
|
|
||||||
def eval(self, data):
|
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):
|
class AddFragmentsNode(AstNode):
|
||||||
def __init__(self, filename, lineno, fragments_path_prefix, fragments_variable, flagged_variables_list_variable):
|
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:
|
if d.getVar("_FAILPARSINGERRORHANDLED", False) == True:
|
||||||
raise bb.BBHandledException()
|
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 []:
|
for var in d.getVar('__BBHANDLERS', False) or []:
|
||||||
# try to add the handler
|
# try to add the handler
|
||||||
handlerfn = d.getVarFlag(var, "filename", False)
|
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)
|
logger.debug("Appending .bbappend file %s to %s", append, fn)
|
||||||
bb.parse.BBHandler.handle(append, d, True)
|
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)
|
onlyfinalise = d.getVar("__ONLYFINALISE", False)
|
||||||
|
|
||||||
safe_d = d
|
safe_d = d
|
||||||
@@ -569,7 +568,7 @@ def multi_finalize(fn, d):
|
|||||||
d.setVar("BBEXTENDVARIANT", variantmap[name])
|
d.setVar("BBEXTENDVARIANT", variantmap[name])
|
||||||
else:
|
else:
|
||||||
d.setVar("PN", "%s-%s" % (pn, name))
|
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)
|
safe_d.setVar("BBCLASSEXTEND", extended)
|
||||||
_create_variants(datastores, extendedmap.keys(), extendfunc, onlyfinalise)
|
_create_variants(datastores, extendedmap.keys(), extendfunc, onlyfinalise)
|
||||||
|
|||||||
@@ -42,22 +42,12 @@ def supports(fn, d):
|
|||||||
"""Return True if fn has a supported extension"""
|
"""Return True if fn has a supported extension"""
|
||||||
return os.path.splitext(fn)[-1] in [".bb", ".bbclass", ".inc"]
|
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):
|
def inherit(files, fn, lineno, d, deferred=False):
|
||||||
__inherit_cache = d.getVar('__inherit_cache', False) or []
|
__inherit_cache = d.getVar('__inherit_cache', False) or []
|
||||||
#if "${" in files and not deferred:
|
#if "${" in files and not deferred:
|
||||||
# bb.warn("%s:%s has non deferred conditional inherit" % (fn, lineno))
|
# bb.warn("%s:%s has non deferred conditional inherit" % (fn, lineno))
|
||||||
files = d.expand(files).split()
|
files = d.expand(files).split()
|
||||||
for file in files:
|
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)
|
classtype = d.getVar("__bbclasstype", False)
|
||||||
origfile = file
|
origfile = file
|
||||||
for t in ["classes-" + classtype, "classes"]:
|
for t in ["classes-" + classtype, "classes"]:
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ __config_regexp__ = re.compile( r"""
|
|||||||
(?P<var>[a-zA-Z0-9\-_+.${}/~:]*?)
|
(?P<var>[a-zA-Z0-9\-_+.${}/~:]*?)
|
||||||
(\[(?P<flag>[a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@/]*)\])?
|
(\[(?P<flag>[a-zA-Z0-9\-_+.][a-zA-Z0-9\-_+.@/]*)\])?
|
||||||
|
|
||||||
(?P<whitespace>\s*) (
|
\s* (
|
||||||
(?P<colon>:=) |
|
(?P<colon>:=) |
|
||||||
(?P<lazyques>\?\?=) |
|
(?P<lazyques>\?\?=) |
|
||||||
(?P<ques>\?=) |
|
(?P<ques>\?=) |
|
||||||
@@ -32,7 +32,7 @@ __config_regexp__ = re.compile( r"""
|
|||||||
(?P<predot>=\.) |
|
(?P<predot>=\.) |
|
||||||
(?P<postdot>\.=) |
|
(?P<postdot>\.=) |
|
||||||
=
|
=
|
||||||
) (?P<whitespace2>\s*)
|
) \s*
|
||||||
|
|
||||||
(?!'[^']*'[^']*'$)
|
(?!'[^']*'[^']*'$)
|
||||||
(?!\"[^\"]*\"[^\"]*\"$)
|
(?!\"[^\"]*\"[^\"]*\"$)
|
||||||
@@ -168,8 +168,6 @@ def feeder(lineno, s, fn, statements, baseconfig=False, conffile=True):
|
|||||||
groupd = m.groupdict()
|
groupd = m.groupdict()
|
||||||
if groupd['var'] == "":
|
if groupd['var'] == "":
|
||||||
raise ParseError("Empty variable name in assignment: '%s'" % s, fn, lineno);
|
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)
|
ast.handleData(statements, fn, lineno, groupd)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -3034,13 +3034,14 @@ def build_scenequeue_data(sqdata, rqdata, sqrq):
|
|||||||
rqdata.init_progress_reporter.next_stage(len(rqdata.runtaskentries))
|
rqdata.init_progress_reporter.next_stage(len(rqdata.runtaskentries))
|
||||||
|
|
||||||
# Sanity check all dependencies could be changed to setscene task references
|
# 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:
|
if tid in rqdata.runq_setscene_tids:
|
||||||
pass
|
pass
|
||||||
elif sq_revdeps_squash[tid]:
|
elif sq_revdeps_squash[tid]:
|
||||||
bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, halting. Please report this problem.")
|
bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, halting. Please report this problem.")
|
||||||
else:
|
else:
|
||||||
del sq_revdeps_squash[tid]
|
del sq_revdeps_squash[tid]
|
||||||
|
rqdata.init_progress_reporter.update(taskcounter)
|
||||||
|
|
||||||
rqdata.init_progress_reporter.next_stage()
|
rqdata.init_progress_reporter.next_stage()
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import shutil
|
|
||||||
import unittest
|
import unittest
|
||||||
import unittest.mock
|
|
||||||
import urllib.parse
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import tempfile
|
import tempfile
|
||||||
import collections
|
import collections
|
||||||
@@ -20,7 +17,6 @@ import tarfile
|
|||||||
from bb.fetch2 import URI
|
from bb.fetch2 import URI
|
||||||
from bb.fetch2 import FetchMethod
|
from bb.fetch2 import FetchMethod
|
||||||
import bb
|
import bb
|
||||||
import bb.utils
|
|
||||||
from bb.tests.support.httpserver import HTTPService
|
from bb.tests.support.httpserver import HTTPService
|
||||||
|
|
||||||
def skipIfNoNetwork():
|
def skipIfNoNetwork():
|
||||||
@@ -28,18 +24,6 @@ def skipIfNoNetwork():
|
|||||||
return unittest.skip("network test")
|
return unittest.skip("network test")
|
||||||
return lambda f: f
|
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):
|
class TestTimeout(Exception):
|
||||||
# Indicate to pytest that this is not a test suite
|
# Indicate to pytest that this is not a test suite
|
||||||
__test__ = False
|
__test__ = False
|
||||||
@@ -1291,6 +1275,7 @@ class FetcherNetworkTest(FetcherTest):
|
|||||||
|
|
||||||
class SVNTest(FetcherTest):
|
class SVNTest(FetcherTest):
|
||||||
def skipIfNoSvn():
|
def skipIfNoSvn():
|
||||||
|
import shutil
|
||||||
if not shutil.which("svn"):
|
if not shutil.which("svn"):
|
||||||
return unittest.skip("svn not installed, tests being skipped")
|
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))
|
self.assertFalse(bb.fetch.trusted_network(self.d, url))
|
||||||
|
|
||||||
class URLHandle(unittest.TestCase):
|
class URLHandle(unittest.TestCase):
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
# Quote password as per RFC3986
|
# Quote password as per RFC3986
|
||||||
password = urllib.parse.quote(r"!#$%^&*()-_={}[]\|:?,.<>~`", r"!$&'/()*+,;=")
|
password = urllib.parse.quote(r"!#$%^&*()-_={}[]\|:?,.<>~`", r"!$&'/()*+,;=")
|
||||||
datatable = {
|
datatable = {
|
||||||
@@ -1439,6 +1426,7 @@ class URLHandle(unittest.TestCase):
|
|||||||
self.assertEqual(result, v)
|
self.assertEqual(result, v)
|
||||||
|
|
||||||
def test_encodeurl(self):
|
def test_encodeurl(self):
|
||||||
|
import urllib.parse
|
||||||
for k, v in self.datatable.items():
|
for k, v in self.datatable.items():
|
||||||
result = bb.fetch.encodeurl(v)
|
result = bb.fetch.encodeurl(v)
|
||||||
if result.startswith("file:"):
|
if result.startswith("file:"):
|
||||||
@@ -2237,33 +2225,6 @@ class GitShallowTest(FetcherTest):
|
|||||||
self.fetch_shallow()
|
self.fetch_shallow()
|
||||||
self.assertIn("Unable to find revision v0.0 even from upstream", cm.output[0])
|
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()
|
@skipIfNoNetwork()
|
||||||
def test_bitbake(self):
|
def test_bitbake(self):
|
||||||
self.git('remote add --mirror=fetch origin https://github.com/openembedded/bitbake', cwd=self.srcdir)
|
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)
|
self.assertRevCount(1)
|
||||||
assert os.path.exists(os.path.join(self.gitdir, '.git', 'shallow'))
|
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):
|
class GitLfsTest(FetcherTest):
|
||||||
def skipIfNoGitLFS():
|
def skipIfNoGitLFS():
|
||||||
|
import shutil
|
||||||
if not shutil.which('git-lfs'):
|
if not shutil.which('git-lfs'):
|
||||||
return unittest.skip('git-lfs not installed')
|
return unittest.skip('git-lfs not installed')
|
||||||
return lambda f: f
|
return lambda f: f
|
||||||
@@ -2346,18 +2295,12 @@ class GitLfsTest(FetcherTest):
|
|||||||
self.git_init(cwd=self.srcdir)
|
self.git_init(cwd=self.srcdir)
|
||||||
self.commit_file('.gitattributes', '*.mp3 filter=lfs -text')
|
self.commit_file('.gitattributes', '*.mp3 filter=lfs -text')
|
||||||
|
|
||||||
def commit(self, *, cwd=None):
|
def commit_file(self, filename, content):
|
||||||
cwd = cwd or self.srcdir
|
with open(os.path.join(self.srcdir, filename), "w") as f:
|
||||||
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:
|
|
||||||
f.write(content)
|
f.write(content)
|
||||||
self.git(["add", filename], cwd=cwd)
|
self.git(["add", filename], cwd=self.srcdir)
|
||||||
return self.commit(cwd=cwd)
|
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):
|
def fetch(self, uri=None, download=True):
|
||||||
uris = self.d.getVar('SRC_URI').split()
|
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")
|
unpacked_lfs_file = os.path.join(self.d.getVar('WORKDIR'), 'git', "Cat_poster_1.jpg")
|
||||||
return unpacked_lfs_file
|
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()
|
@skipIfNoGitLFS()
|
||||||
def test_fetch_lfs_on_srcrev_change(self):
|
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"""
|
"""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)
|
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):
|
def fetch_and_verify(revision, filename, content):
|
||||||
self.d.setVar('SRCREV', revision)
|
self.d.setVar('SRCREV', revision)
|
||||||
fetcher, ud = self.fetch()
|
fetcher, ud = self.fetch()
|
||||||
|
|
||||||
with hide_directory(self.srcdir):
|
with hide_upstream_repository():
|
||||||
workdir = self.d.getVar('WORKDIR')
|
workdir = self.d.getVar('WORKDIR')
|
||||||
fetcher.unpack(workdir)
|
fetcher.unpack(workdir)
|
||||||
|
|
||||||
@@ -2535,6 +2391,8 @@ class GitLfsTest(FetcherTest):
|
|||||||
|
|
||||||
@skipIfNoGitLFS()
|
@skipIfNoGitLFS()
|
||||||
def test_lfs_enabled(self):
|
def test_lfs_enabled(self):
|
||||||
|
import shutil
|
||||||
|
|
||||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
||||||
self.d.setVar('SRC_URI', uri)
|
self.d.setVar('SRC_URI', uri)
|
||||||
|
|
||||||
@@ -2545,6 +2403,8 @@ class GitLfsTest(FetcherTest):
|
|||||||
|
|
||||||
@skipIfNoGitLFS()
|
@skipIfNoGitLFS()
|
||||||
def test_lfs_disabled(self):
|
def test_lfs_disabled(self):
|
||||||
|
import shutil
|
||||||
|
|
||||||
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
||||||
self.d.setVar('SRC_URI', uri)
|
self.d.setVar('SRC_URI', uri)
|
||||||
|
|
||||||
@@ -2553,64 +2413,48 @@ class GitLfsTest(FetcherTest):
|
|||||||
fetcher, ud = self.fetch()
|
fetcher, ud = self.fetch()
|
||||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
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):
|
def test_lfs_enabled_not_installed(self):
|
||||||
|
import shutil
|
||||||
|
|
||||||
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
|
||||||
self.d.setVar('SRC_URI', uri)
|
self.d.setVar('SRC_URI', uri)
|
||||||
|
|
||||||
# Careful: suppress initial attempt at downloading
|
# Careful: suppress initial attempt at downloading
|
||||||
fetcher, ud = self.fetch(uri=None, download=False)
|
fetcher, ud = self.fetch(uri=None, download=False)
|
||||||
|
|
||||||
# If git-lfs cannot be found, the download should throw an error
|
# Artificially assert that git-lfs is not installed, so
|
||||||
with unittest.mock.patch("shutil.which", return_value=None):
|
# 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):
|
with self.assertRaises(bb.fetch2.FetchError):
|
||||||
fetcher.download()
|
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):
|
def test_lfs_disabled_not_installed(self):
|
||||||
|
import shutil
|
||||||
|
|
||||||
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
|
||||||
self.d.setVar('SRC_URI', uri)
|
self.d.setVar('SRC_URI', uri)
|
||||||
|
|
||||||
# Careful: suppress initial attempt at downloading
|
# Careful: suppress initial attempt at downloading
|
||||||
fetcher, ud = self.fetch(uri=None, download=False)
|
fetcher, ud = self.fetch(uri=None, download=False)
|
||||||
|
|
||||||
# Even if git-lfs cannot be found, the download / unpack should be successful
|
# Artificially assert that git-lfs is not installed, so
|
||||||
with unittest.mock.patch("shutil.which", return_value=None):
|
# we can verify a failure to unpack in it's absence.
|
||||||
fetcher.download()
|
old_find_git_lfs = ud.method._find_git_lfs
|
||||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
try:
|
||||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
# Even if git-lfs cannot be found, the unpack should be successful
|
||||||
|
|
||||||
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):
|
|
||||||
fetcher.download()
|
fetcher.download()
|
||||||
|
ud.method._find_git_lfs = lambda d: False
|
||||||
shutil.rmtree(self.gitdir, ignore_errors=True)
|
shutil.rmtree(self.gitdir, ignore_errors=True)
|
||||||
fetcher.unpack(self.d.getVar('WORKDIR'))
|
fetcher.unpack(self.d.getVar('WORKDIR'))
|
||||||
|
finally:
|
||||||
|
ud.method._find_git_lfs = old_find_git_lfs
|
||||||
|
|
||||||
class GitURLWithSpacesTest(FetcherTest):
|
class GitURLWithSpacesTest(FetcherTest):
|
||||||
test_git_urls = {
|
test_git_urls = {
|
||||||
@@ -2767,6 +2611,7 @@ class CrateTest(FetcherTest):
|
|||||||
|
|
||||||
class NPMTest(FetcherTest):
|
class NPMTest(FetcherTest):
|
||||||
def skipIfNoNpm():
|
def skipIfNoNpm():
|
||||||
|
import shutil
|
||||||
if not shutil.which('npm'):
|
if not shutil.which('npm'):
|
||||||
return unittest.skip('npm not installed')
|
return unittest.skip('npm not installed')
|
||||||
return lambda f: f
|
return lambda f: f
|
||||||
@@ -3294,13 +3139,6 @@ class GitTagVerificationTests(FetcherTest):
|
|||||||
fetcher.download()
|
fetcher.download()
|
||||||
fetcher.unpack(self.unpackdir)
|
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()
|
@skipIfNoNetwork()
|
||||||
def test_tag_rev_match2(self):
|
def test_tag_rev_match2(self):
|
||||||
# Test a url with SRCREV and tag= set works
|
# 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")
|
self.d.setVar("PREMIRRORS", self.recipe_url + " " + "file://{}".format(self.mirrordir) + " \n")
|
||||||
|
|
||||||
def make_git_repo(self):
|
def make_git_repo(self):
|
||||||
|
import shutil
|
||||||
self.mirrorname = "git2_git.yoctoproject.org.fstests.tar.gz"
|
self.mirrorname = "git2_git.yoctoproject.org.fstests.tar.gz"
|
||||||
os.makedirs(self.clonedir)
|
os.makedirs(self.clonedir)
|
||||||
self.git("clone --bare {}".format(self.recipe_url), self.clonedir)
|
self.git("clone --bare --shallow-since=\"01.01.2013\" {}".format(self.recipe_url), self.clonedir)
|
||||||
self.git("update-ref HEAD 15413486df1f5a5b5af699b6f3ba5f0984e52a9f", self.gitdir)
|
|
||||||
bb.process.run('tar -czvf {} .'.format(os.path.join(self.mirrordir, self.mirrorname)), cwd = self.gitdir)
|
bb.process.run('tar -czvf {} .'.format(os.path.join(self.mirrordir, self.mirrorname)), cwd = self.gitdir)
|
||||||
shutil.rmtree(self.clonedir)
|
shutil.rmtree(self.clonedir)
|
||||||
|
|
||||||
@@ -3460,7 +3298,7 @@ class FetchPremirroronlyNetworkTest(FetcherTest):
|
|||||||
def test_mirror_tarball_updated(self):
|
def test_mirror_tarball_updated(self):
|
||||||
self.make_git_repo()
|
self.make_git_repo()
|
||||||
## Upstream commit is in the mirror
|
## 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 = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||||
fetcher.download()
|
fetcher.download()
|
||||||
|
|
||||||
@@ -3468,7 +3306,7 @@ class FetchPremirroronlyNetworkTest(FetcherTest):
|
|||||||
def test_mirror_tarball_outdated(self):
|
def test_mirror_tarball_outdated(self):
|
||||||
self.make_git_repo()
|
self.make_git_repo()
|
||||||
## Upstream commit not in the mirror
|
## 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)
|
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||||
with self.assertRaises(bb.fetch2.NetworkAccess):
|
with self.assertRaises(bb.fetch2.NetworkAccess):
|
||||||
fetcher.download()
|
fetcher.download()
|
||||||
@@ -3478,6 +3316,7 @@ class FetchPremirroronlyMercurialTest(FetcherTest):
|
|||||||
the test covers also basic hg:// clone (see fetch_and_create_tarball
|
the test covers also basic hg:// clone (see fetch_and_create_tarball
|
||||||
"""
|
"""
|
||||||
def skipIfNoHg():
|
def skipIfNoHg():
|
||||||
|
import shutil
|
||||||
if not shutil.which('hg'):
|
if not shutil.which('hg'):
|
||||||
return unittest.skip('Mercurial not installed')
|
return unittest.skip('Mercurial not installed')
|
||||||
return lambda f: f
|
return lambda f: f
|
||||||
@@ -3533,6 +3372,7 @@ class FetchPremirroronlyBrokenTarball(FetcherTest):
|
|||||||
targz.write("This is not tar.gz file!")
|
targz.write("This is not tar.gz file!")
|
||||||
|
|
||||||
def test_mirror_broken_download(self):
|
def test_mirror_broken_download(self):
|
||||||
|
import sys
|
||||||
self.d.setVar("SRCREV", "0"*40)
|
self.d.setVar("SRCREV", "0"*40)
|
||||||
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
|
||||||
with self.assertRaises(bb.fetch2.FetchError), self.assertLogs() as logs:
|
with self.assertRaises(bb.fetch2.FetchError), self.assertLogs() as logs:
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ def print_event_log(event, includelogs, loglines, termfilter):
|
|||||||
termfilter.clearFooter()
|
termfilter.clearFooter()
|
||||||
bb.error("Logfile of failure stored in: %s" % logfile)
|
bb.error("Logfile of failure stored in: %s" % logfile)
|
||||||
if includelogs and not event.errprinted:
|
if includelogs and not event.errprinted:
|
||||||
bb.plain("Log data follows:")
|
print("Log data follows:")
|
||||||
f = open(logfile, "r")
|
f = open(logfile, "r")
|
||||||
lines = []
|
lines = []
|
||||||
while True:
|
while True:
|
||||||
@@ -366,11 +366,11 @@ def print_event_log(event, includelogs, loglines, termfilter):
|
|||||||
if len(lines) > int(loglines):
|
if len(lines) > int(loglines):
|
||||||
lines.pop(0)
|
lines.pop(0)
|
||||||
else:
|
else:
|
||||||
bb.plain('| %s' % l)
|
print('| %s' % l)
|
||||||
f.close()
|
f.close()
|
||||||
if lines:
|
if lines:
|
||||||
for line in lines:
|
for line in lines:
|
||||||
bb.plain(line)
|
print(line)
|
||||||
|
|
||||||
def _log_settings_from_server(server, observe_only):
|
def _log_settings_from_server(server, observe_only):
|
||||||
# Get values of variables which control our output
|
# Get values of variables which control our output
|
||||||
|
|||||||
@@ -82,16 +82,7 @@ def explode_version(s):
|
|||||||
return r
|
return r
|
||||||
|
|
||||||
def split_version(s):
|
def split_version(s):
|
||||||
"""Split a version string into its constituent parts (PE, PV, PR).
|
"""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)``.
|
|
||||||
"""
|
|
||||||
s = s.strip(" <>=")
|
s = s.strip(" <>=")
|
||||||
e = 0
|
e = 0
|
||||||
if s.count(':'):
|
if s.count(':'):
|
||||||
@@ -143,30 +134,16 @@ def vercmp(ta, tb):
|
|||||||
return r
|
return r
|
||||||
|
|
||||||
def vercmp_string(a, b):
|
def vercmp_string(a, b):
|
||||||
""" Split version strings using ``bb.utils.split_version()`` and compare
|
""" Split version strings and compare them """
|
||||||
them with ``bb.utils.vercmp().``
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``a``: left version string operand.
|
|
||||||
- ``b``: right version string operand.
|
|
||||||
|
|
||||||
Returns what ``bb.utils.vercmp()`` returns."""
|
|
||||||
ta = split_version(a)
|
ta = split_version(a)
|
||||||
tb = split_version(b)
|
tb = split_version(b)
|
||||||
return vercmp(ta, tb)
|
return vercmp(ta, tb)
|
||||||
|
|
||||||
def vercmp_string_op(a, b, op):
|
def vercmp_string_op(a, b, op):
|
||||||
"""
|
"""
|
||||||
Takes the return value ``bb.utils.vercmp()`` and returns the operation
|
Compare two versions and check if the specified comparison operator matches the result of the comparison.
|
||||||
defined by ``op`` between the return value and 0.
|
This function is fairly liberal about what operators it will accept since there are a variety of styles
|
||||||
|
depending on the context.
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``a``: left version string operand.
|
|
||||||
- ``b``: right version string operand.
|
|
||||||
- ``op``: operator string. Can be one of ``=``, ``==``, ``<=``, ``>=``,
|
|
||||||
``>``, ``>>``, ``<``, ``<<`` or ``!=``.
|
|
||||||
"""
|
"""
|
||||||
res = vercmp_string(a, b)
|
res = vercmp_string(a, b)
|
||||||
if op in ('=', '=='):
|
if op in ('=', '=='):
|
||||||
@@ -186,16 +163,9 @@ def vercmp_string_op(a, b, op):
|
|||||||
|
|
||||||
def explode_deps(s):
|
def explode_deps(s):
|
||||||
"""
|
"""
|
||||||
Takes an RDEPENDS style string of format::
|
Take an RDEPENDS style string of format:
|
||||||
|
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||||
DEPEND1 (optional version) DEPEND2 (optional version) ...
|
and return a list of dependencies.
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``s``: input RDEPENDS style string
|
|
||||||
|
|
||||||
Returns a list of dependencies.
|
|
||||||
|
|
||||||
Version information is ignored.
|
Version information is ignored.
|
||||||
"""
|
"""
|
||||||
r = []
|
r = []
|
||||||
@@ -217,17 +187,9 @@ def explode_deps(s):
|
|||||||
|
|
||||||
def explode_dep_versions2(s, *, sort=True):
|
def explode_dep_versions2(s, *, sort=True):
|
||||||
"""
|
"""
|
||||||
Takes an RDEPENDS style string of format::
|
Take an RDEPENDS style string of format:
|
||||||
|
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||||
DEPEND1 (optional version) DEPEND2 (optional version) ...
|
and return a dictionary of dependencies and versions.
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``s``: input RDEPENDS style string
|
|
||||||
- ``*``: *Unused*.
|
|
||||||
- ``sort``: whether to sort the output or not.
|
|
||||||
|
|
||||||
Returns a dictionary of dependencies and versions.
|
|
||||||
"""
|
"""
|
||||||
r = collections.OrderedDict()
|
r = collections.OrderedDict()
|
||||||
l = s.replace(",", "").split()
|
l = s.replace(",", "").split()
|
||||||
@@ -292,17 +254,10 @@ def explode_dep_versions2(s, *, sort=True):
|
|||||||
|
|
||||||
def explode_dep_versions(s):
|
def explode_dep_versions(s):
|
||||||
"""
|
"""
|
||||||
Take an RDEPENDS style string of format::
|
Take an RDEPENDS style string of format:
|
||||||
|
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
|
||||||
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.
|
||||||
Skips null values and items appeared in dependency string multiple times.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``s``: input RDEPENDS style string
|
|
||||||
|
|
||||||
Returns a dictionary of dependencies and versions.
|
|
||||||
"""
|
"""
|
||||||
r = explode_dep_versions2(s)
|
r = explode_dep_versions2(s)
|
||||||
for d in r:
|
for d in r:
|
||||||
@@ -316,17 +271,7 @@ def explode_dep_versions(s):
|
|||||||
|
|
||||||
def join_deps(deps, commasep=True):
|
def join_deps(deps, commasep=True):
|
||||||
"""
|
"""
|
||||||
Take a result from ``bb.utils.explode_dep_versions()`` and generate a
|
Take the result from explode_dep_versions and generate a dependency string
|
||||||
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.
|
|
||||||
"""
|
"""
|
||||||
result = []
|
result = []
|
||||||
for dep in deps:
|
for dep in deps:
|
||||||
@@ -488,11 +433,7 @@ def better_eval(source, locals, extraglobals = None):
|
|||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def fileslocked(files, *args, **kwargs):
|
def fileslocked(files, *args, **kwargs):
|
||||||
"""Context manager for locking and unlocking file locks. Uses
|
"""Context manager for locking and unlocking file locks."""
|
||||||
``bb.utils.lockfile()`` and ``bb.utils.unlockfile()`` to lock and unlock
|
|
||||||
files.
|
|
||||||
|
|
||||||
No return value."""
|
|
||||||
locks = []
|
locks = []
|
||||||
if files:
|
if files:
|
||||||
for lockfile in files:
|
for lockfile in files:
|
||||||
@@ -509,23 +450,14 @@ def fileslocked(files, *args, **kwargs):
|
|||||||
|
|
||||||
def lockfile(name, shared=False, retry=True, block=False):
|
def lockfile(name, shared=False, retry=True, block=False):
|
||||||
"""
|
"""
|
||||||
Use the specified file (with filename ``name``) as a lock file, return when
|
Use the specified file as a lock file, return when the lock has
|
||||||
the lock has been acquired. Returns a variable to pass to unlockfile().
|
been acquired. Returns a variable to pass to unlockfile().
|
||||||
|
Parameters:
|
||||||
Arguments:
|
retry: True to re-try locking if it fails, False otherwise
|
||||||
|
block: True to block until the lock succeeds, False otherwise
|
||||||
- ``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.
|
|
||||||
|
|
||||||
The retry and block parameters are kind of equivalent unless you
|
The retry and block parameters are kind of equivalent unless you
|
||||||
consider the possibility of sending a signal to the process to break
|
consider the possibility of sending a signal to the process to break
|
||||||
out - at which point you want block=True rather than retry=True.
|
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)
|
basename = os.path.basename(name)
|
||||||
if len(basename) > 255:
|
if len(basename) > 255:
|
||||||
@@ -584,13 +516,7 @@ def lockfile(name, shared=False, retry=True, block=False):
|
|||||||
|
|
||||||
def unlockfile(lf):
|
def unlockfile(lf):
|
||||||
"""
|
"""
|
||||||
Unlock a file locked using ``bb.utils.lockfile()``.
|
Unlock a file locked using lockfile()
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``lf``: the locked file descriptor.
|
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# If we had a shared lock, we need to promote to exclusive before
|
# 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):
|
def md5_file(filename):
|
||||||
"""
|
"""
|
||||||
Arguments:
|
Return the hex string representation of the MD5 checksum of filename.
|
||||||
|
|
||||||
- ``filename``: path to the input file.
|
|
||||||
|
|
||||||
Returns the hexadecimal string representation of the MD5 checksum of filename.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
try:
|
try:
|
||||||
@@ -634,59 +556,39 @@ def md5_file(filename):
|
|||||||
|
|
||||||
def sha256_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.
|
filename.
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``filename``: path to the file.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
return _hasher(hashlib.sha256(), filename)
|
return _hasher(hashlib.sha256(), filename)
|
||||||
|
|
||||||
def sha1_file(filename):
|
def sha1_file(filename):
|
||||||
"""
|
"""
|
||||||
Returns the hexadecimal representation of the SHA1 checksum of the filename
|
Return the hex string representation of the SHA1 checksum of the filename
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``filename``: path to the file.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
return _hasher(hashlib.sha1(), filename)
|
return _hasher(hashlib.sha1(), filename)
|
||||||
|
|
||||||
def sha384_file(filename):
|
def sha384_file(filename):
|
||||||
"""
|
"""
|
||||||
Returns the hexadecimal representation of the SHA384 checksum of the filename
|
Return the hex string representation of the SHA384 checksum of the filename
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``filename``: path to the file.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
return _hasher(hashlib.sha384(), filename)
|
return _hasher(hashlib.sha384(), filename)
|
||||||
|
|
||||||
def sha512_file(filename):
|
def sha512_file(filename):
|
||||||
"""
|
"""
|
||||||
Returns the hexadecimal representation of the SHA512 checksum of the filename
|
Return the hex string representation of the SHA512 checksum of the filename
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``filename``: path to the file.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
return _hasher(hashlib.sha512(), filename)
|
return _hasher(hashlib.sha512(), filename)
|
||||||
|
|
||||||
def goh1_file(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
|
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
|
defines hashes over directory trees and is used by go mod for mod files and
|
||||||
zip archives.
|
zip archives.
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``filename``: path to the file.
|
|
||||||
"""
|
"""
|
||||||
import hashlib
|
import hashlib
|
||||||
import zipfile
|
import zipfile
|
||||||
@@ -707,8 +609,8 @@ def goh1_file(filename):
|
|||||||
return method.hexdigest()
|
return method.hexdigest()
|
||||||
|
|
||||||
def preserved_envvars_exported():
|
def preserved_envvars_exported():
|
||||||
"""Returns the list of variables which are taken from the environment and
|
"""Variables which are taken from the environment and placed in and exported
|
||||||
placed in and exported from the metadata."""
|
from the metadata"""
|
||||||
return [
|
return [
|
||||||
'BB_TASKHASH',
|
'BB_TASKHASH',
|
||||||
'HOME',
|
'HOME',
|
||||||
@@ -722,8 +624,7 @@ def preserved_envvars_exported():
|
|||||||
]
|
]
|
||||||
|
|
||||||
def preserved_envvars():
|
def preserved_envvars():
|
||||||
"""Returns the list of variables which are taken from the environment and
|
"""Variables which are taken from the environment and placed in the metadata"""
|
||||||
placed in the metadata."""
|
|
||||||
v = [
|
v = [
|
||||||
'BBPATH',
|
'BBPATH',
|
||||||
'BB_PRESERVE_ENV',
|
'BB_PRESERVE_ENV',
|
||||||
@@ -732,9 +633,7 @@ def preserved_envvars():
|
|||||||
return v + preserved_envvars_exported()
|
return v + preserved_envvars_exported()
|
||||||
|
|
||||||
def check_system_locale():
|
def check_system_locale():
|
||||||
"""Make sure the required system locale are available and configured.
|
"""Make sure the required system locale are available and configured"""
|
||||||
|
|
||||||
No return value."""
|
|
||||||
default_locale = locale.getlocale(locale.LC_CTYPE)
|
default_locale = locale.getlocale(locale.LC_CTYPE)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -752,12 +651,6 @@ def filter_environment(good_vars):
|
|||||||
"""
|
"""
|
||||||
Create a pristine environment for bitbake. This will remove variables that
|
Create a pristine environment for bitbake. This will remove variables that
|
||||||
are not known and may influence the build in a negative way.
|
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 = {}
|
removed_vars = {}
|
||||||
@@ -802,8 +695,6 @@ def clean_environment():
|
|||||||
"""
|
"""
|
||||||
Clean up any spurious environment variables. This will remove any
|
Clean up any spurious environment variables. This will remove any
|
||||||
variables the user hasn't chosen to preserve.
|
variables the user hasn't chosen to preserve.
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
if 'BB_PRESERVE_ENV' not in os.environ:
|
if 'BB_PRESERVE_ENV' not in os.environ:
|
||||||
good_vars = approved_variables()
|
good_vars = approved_variables()
|
||||||
@@ -814,8 +705,6 @@ def clean_environment():
|
|||||||
def empty_environment():
|
def empty_environment():
|
||||||
"""
|
"""
|
||||||
Remove all variables from the environment.
|
Remove all variables from the environment.
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
for s in list(os.environ.keys()):
|
for s in list(os.environ.keys()):
|
||||||
os.unsetenv(s)
|
os.unsetenv(s)
|
||||||
@@ -824,12 +713,6 @@ def empty_environment():
|
|||||||
def build_environment(d):
|
def build_environment(d):
|
||||||
"""
|
"""
|
||||||
Build an environment from all exported variables.
|
Build an environment from all exported variables.
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``d``: the data store.
|
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
import bb.data
|
import bb.data
|
||||||
for var in bb.data.keys(d):
|
for var in bb.data.keys(d):
|
||||||
@@ -854,17 +737,7 @@ def _check_unsafe_delete_path(path):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def remove(path, recurse=False, ionice=False):
|
def remove(path, recurse=False, ionice=False):
|
||||||
"""Equivalent to rm -f or rm -rf.
|
"""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.
|
|
||||||
"""
|
|
||||||
if not path:
|
if not path:
|
||||||
return
|
return
|
||||||
if recurse:
|
if recurse:
|
||||||
@@ -885,17 +758,7 @@ def remove(path, recurse=False, ionice=False):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def prunedir(topdir, ionice=False):
|
def prunedir(topdir, ionice=False):
|
||||||
"""
|
""" Delete everything reachable from the directory named in 'topdir'. """
|
||||||
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.
|
|
||||||
"""
|
|
||||||
# CAUTION: This is dangerous!
|
# CAUTION: This is dangerous!
|
||||||
if _check_unsafe_delete_path(topdir):
|
if _check_unsafe_delete_path(topdir):
|
||||||
raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % 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):
|
def prune_suffix(var, suffixes, d):
|
||||||
"""
|
"""
|
||||||
Check if ``var`` ends with any of the suffixes listed in ``suffixes`` and
|
See if var ends with any of the suffixes listed and
|
||||||
remove it if found.
|
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.
|
|
||||||
"""
|
"""
|
||||||
for suffix in suffixes:
|
for suffix in suffixes:
|
||||||
if suffix and var.endswith(suffix):
|
if suffix and var.endswith(suffix):
|
||||||
@@ -924,13 +780,7 @@ def prune_suffix(var, suffixes, d):
|
|||||||
|
|
||||||
def mkdirhier(directory):
|
def mkdirhier(directory):
|
||||||
"""Create a directory like 'mkdir -p', but does not complain if
|
"""Create a directory like 'mkdir -p', but does not complain if
|
||||||
directory already exists like ``os.makedirs()``.
|
directory already exists like os.makedirs
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``directory``: path to the directory.
|
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
if '${' in str(directory):
|
if '${' in str(directory):
|
||||||
bb.fatal("Directory name {} contains unexpanded bitbake variable. This may cause build failures and WORKDIR polution.".format(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
|
raise e
|
||||||
|
|
||||||
def movefile(src, dest, newmtime = None, sstat = None):
|
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
|
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.
|
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) + ")"
|
#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):
|
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
|
attributes; mtime will be preserved even when moving across
|
||||||
filesystems.
|
filesystems. Returns true on success and false on failure.
|
||||||
|
|
||||||
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 "copyfile(" + src + "," + dest + "," + str(newmtime) + "," + str(sstat) + ")"
|
#print "copyfile(" + src + "," + dest + "," + str(newmtime) + "," + str(sstat) + ")"
|
||||||
try:
|
try:
|
||||||
@@ -1144,16 +965,10 @@ def copyfile(src, dest, newmtime = None, sstat = None):
|
|||||||
|
|
||||||
def break_hardlinks(src, 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
|
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:
|
try:
|
||||||
if not sstat:
|
if not sstat:
|
||||||
@@ -1167,24 +982,11 @@ def break_hardlinks(src, sstat = None):
|
|||||||
|
|
||||||
def which(path, item, direction = 0, history = False, executable=False):
|
def which(path, item, direction = 0, history = False, executable=False):
|
||||||
"""
|
"""
|
||||||
Locate ``item`` in the list of paths ``path`` (colon separated string like
|
Locate `item` in the list of paths `path` (colon separated string like $PATH).
|
||||||
``$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.
|
||||||
Arguments:
|
If `executable` is True then the candidate has to be an executable file,
|
||||||
|
otherwise the candidate simply has to exist.
|
||||||
- ``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)``.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if executable:
|
if executable:
|
||||||
@@ -1215,8 +1017,6 @@ def which(path, item, direction = 0, history = False, executable=False):
|
|||||||
def umask(new_mask):
|
def umask(new_mask):
|
||||||
"""
|
"""
|
||||||
Context manager to set the umask to a specific mask, and restore it afterwards.
|
Context manager to set the umask to a specific mask, and restore it afterwards.
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
current_mask = os.umask(new_mask)
|
current_mask = os.umask(new_mask)
|
||||||
try:
|
try:
|
||||||
@@ -1227,17 +1027,7 @@ def umask(new_mask):
|
|||||||
def to_boolean(string, default=None):
|
def to_boolean(string, default=None):
|
||||||
"""
|
"""
|
||||||
Check input string and return boolean value True/False/None
|
Check input string and return boolean value True/False/None
|
||||||
depending upon the checks.
|
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.
|
|
||||||
"""
|
"""
|
||||||
if not string:
|
if not string:
|
||||||
return default
|
return default
|
||||||
@@ -1258,17 +1048,18 @@ def contains(variable, checkvalues, truevalue, falsevalue, d):
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
variable -- the variable name. This will be fetched and expanded (using
|
||||||
d.getVar(variable)) and then split into a set().
|
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.
|
|
||||||
|
|
||||||
Returns ``True`` if the variable contains the values specified, ``False``
|
checkvalues -- if this is a string it is split on whitespace into a set(),
|
||||||
otherwise.
|
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)
|
val = d.getVar(variable)
|
||||||
@@ -1288,17 +1079,18 @@ def contains_any(variable, checkvalues, truevalue, falsevalue, d):
|
|||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
|
||||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
variable -- the variable name. This will be fetched and expanded (using
|
||||||
d.getVar(variable)) and then split into a set().
|
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.
|
|
||||||
|
|
||||||
Returns ``True`` if the variable contains any of the values specified,
|
checkvalues -- if this is a string it is split on whitespace into a set(),
|
||||||
``False`` otherwise.
|
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)
|
val = d.getVar(variable)
|
||||||
if not val:
|
if not val:
|
||||||
@@ -1313,17 +1105,17 @@ def contains_any(variable, checkvalues, truevalue, falsevalue, d):
|
|||||||
return falsevalue
|
return falsevalue
|
||||||
|
|
||||||
def filter(variable, checkvalues, d):
|
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:
|
Arguments:
|
||||||
|
|
||||||
- ``variable``: the variable name. This will be fetched and expanded (using
|
variable -- the variable name. This will be fetched and expanded (using
|
||||||
d.getVar(variable)) and then split into a set().
|
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.
|
|
||||||
|
|
||||||
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)
|
val = d.getVar(variable)
|
||||||
@@ -1339,27 +1131,8 @@ def filter(variable, checkvalues, d):
|
|||||||
|
|
||||||
def get_referenced_vars(start_expr, d):
|
def get_referenced_vars(start_expr, d):
|
||||||
"""
|
"""
|
||||||
Get the names of the variables referenced in a given expression.
|
:return: names of vars referenced in start_expr (recursively), in quasi-BFS order (variables within the same level
|
||||||
|
are ordered arbitrarily)
|
||||||
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).
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
seen = set()
|
seen = set()
|
||||||
@@ -1439,9 +1212,7 @@ def multiprocessingpool(*args, **kwargs):
|
|||||||
return multiprocessing.Pool(*args, **kwargs)
|
return multiprocessing.Pool(*args, **kwargs)
|
||||||
|
|
||||||
def exec_flat_python_func(func, *args, **kwargs):
|
def exec_flat_python_func(func, *args, **kwargs):
|
||||||
"""Execute a flat python function (defined with ``def funcname(args): ...``)
|
"""Execute a flat python function (defined with def funcname(args):...)"""
|
||||||
|
|
||||||
Returns the return value of the function."""
|
|
||||||
# Prepare a small piece of python code which calls the requested function
|
# 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
|
# 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
|
# 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
|
"""Edit lines from a recipe or config file and modify one or more
|
||||||
specified variable values set in the file using a specified callback
|
specified variable values set in the file using a specified callback
|
||||||
function. Lines are expected to have trailing newlines.
|
function. Lines are expected to have trailing newlines.
|
||||||
|
Parameters:
|
||||||
Arguments:
|
meta_lines: lines from the file; can be a list or an iterable
|
||||||
|
(e.g. file pointer)
|
||||||
- ``meta_lines``: lines from the file; can be a list or an iterable
|
variables: a list of variable names to look for. Functions
|
||||||
(e.g. file pointer)
|
may also be specified, but must be specified with '()' at
|
||||||
- ``variables``: a list of variable names to look for. Functions
|
the end of the name. Note that the function doesn't have
|
||||||
may also be specified, but must be specified with ``()`` at
|
any intrinsic understanding of :append, :prepend, :remove,
|
||||||
the end of the name. Note that the function doesn't have
|
or overrides, so these are considered as part of the name.
|
||||||
any intrinsic understanding of ``:append``, ``:prepend``, ``:remove``,
|
These values go into a regular expression, so regular
|
||||||
or overrides, so these are considered as part of the name.
|
expression syntax is allowed.
|
||||||
These values go into a regular expression, so regular
|
varfunc: callback function called for every variable matching
|
||||||
expression syntax is allowed.
|
one of the entries in the variables parameter. The function
|
||||||
- ``varfunc``: callback function called for every variable matching
|
should take four arguments:
|
||||||
one of the entries in the variables parameter.
|
varname: name of variable matched
|
||||||
|
origvalue: current value in file
|
||||||
The function should take four arguments:
|
op: the operator (e.g. '+=')
|
||||||
|
newlines: list of lines up to this point. You can use
|
||||||
- ``varname``: name of variable matched
|
this to prepend lines before this variable setting
|
||||||
- ``origvalue``: current value in file
|
if you wish.
|
||||||
- ``op``: the operator (e.g. ``+=``)
|
and should return a four-element tuple:
|
||||||
- ``newlines``: list of lines up to this point. You can use
|
newvalue: new value to substitute in, or None to drop
|
||||||
this to prepend lines before this variable setting
|
the variable setting entirely. (If the removal
|
||||||
if you wish.
|
results in two consecutive blank lines, one of the
|
||||||
|
blank lines will also be dropped).
|
||||||
And should return a four-element tuple:
|
newop: the operator to use - if you specify None here,
|
||||||
|
the original operation will be used.
|
||||||
- ``newvalue``: new value to substitute in, or ``None`` to drop
|
indent: number of spaces to indent multi-line entries,
|
||||||
the variable setting entirely. (If the removal
|
or -1 to indent up to the level of the assignment
|
||||||
results in two consecutive blank lines, one of the
|
and opening quote, or a string to use as the indent.
|
||||||
blank lines will also be dropped).
|
minbreak: True to allow the first element of a
|
||||||
- ``newop``: the operator to use - if you specify ``None`` here,
|
multi-line value to continue on the same line as
|
||||||
the original operation will be used.
|
the assignment, False to indent before the first
|
||||||
- ``indent``: number of spaces to indent multi-line entries,
|
element.
|
||||||
or ``-1`` to indent up to the level of the assignment
|
To clarify, if you wish not to change the value, then you
|
||||||
and opening quote, or a string to use as the indent.
|
would return like this: return origvalue, None, 0, True
|
||||||
- ``minbreak``: ``True`` to allow the first element of a
|
match_overrides: True to match items with _overrides on the end,
|
||||||
multi-line value to continue on the same line as
|
False otherwise
|
||||||
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:
|
Returns a tuple:
|
||||||
|
updated:
|
||||||
- ``updated``: ``True`` if changes were made, ``False`` otherwise.
|
True if changes were made, False otherwise.
|
||||||
- ``newlines``: Lines after processing.
|
newlines:
|
||||||
|
Lines after processing
|
||||||
"""
|
"""
|
||||||
|
|
||||||
var_res = {}
|
var_res = {}
|
||||||
@@ -1661,13 +1423,12 @@ def edit_metadata(meta_lines, variables, varfunc, match_overrides=False):
|
|||||||
|
|
||||||
|
|
||||||
def edit_metadata_file(meta_file, variables, varfunc):
|
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.
|
variable values set in the file using a specified callback function.
|
||||||
The file is only written to if the value(s) actually change.
|
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.
|
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:
|
with open(meta_file, 'r') as f:
|
||||||
(updated, newlines) = edit_metadata(f, variables, varfunc)
|
(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):
|
def edit_bblayers_conf(bblayers_conf, add, remove, edit_cb=None):
|
||||||
"""Edit ``bblayers.conf``, adding and/or removing layers.
|
"""Edit bblayers.conf, adding and/or removing layers
|
||||||
|
Parameters:
|
||||||
Arguments:
|
bblayers_conf: path to bblayers.conf file to edit
|
||||||
|
add: layer path (or list of layer paths) to add; None or empty
|
||||||
- ``bblayers_conf``: path to ``bblayers.conf`` file to edit
|
list to add nothing
|
||||||
- ``add``: layer path (or list of layer paths) to add; ``None`` or empty
|
remove: layer path (or list of layer paths) to remove; None or
|
||||||
list to add nothing
|
empty list to remove nothing
|
||||||
- ``remove``: layer path (or list of layer paths) to remove; ``None`` or
|
edit_cb: optional callback function that will be called after
|
||||||
empty list to remove nothing
|
processing adds/removes once per existing entry.
|
||||||
- ``edit_cb``: optional callback function that will be called
|
|
||||||
after processing adds/removes once per existing entry.
|
|
||||||
|
|
||||||
Returns a tuple:
|
Returns a tuple:
|
||||||
|
notadded: list of layers specified to be added but weren't
|
||||||
- ``notadded``: list of layers specified to be added but weren't
|
(because they were already in the list)
|
||||||
(because they were already in the list)
|
notremoved: list of layers that were specified to be removed
|
||||||
- ``notremoved``: list of layers that were specified to be removed
|
but weren't (because they weren't in the list)
|
||||||
but weren't (because they weren't in the list)
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def remove_trailing_sep(pth):
|
def remove_trailing_sep(pth):
|
||||||
@@ -1815,22 +1572,7 @@ def get_collection_res(d):
|
|||||||
|
|
||||||
|
|
||||||
def get_file_layer(filename, d, collection_res={}):
|
def get_file_layer(filename, d, collection_res={}):
|
||||||
"""Determine the collection (or layer name, as defined by a layer's
|
"""Determine the collection (as defined by a layer's layer.conf file) containing the specified file"""
|
||||||
``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.
|
|
||||||
"""
|
|
||||||
if not collection_res:
|
if not collection_res:
|
||||||
collection_res = get_collection_res(d)
|
collection_res = get_collection_res(d)
|
||||||
|
|
||||||
@@ -1868,13 +1610,7 @@ class PrCtlError(Exception):
|
|||||||
|
|
||||||
def signal_on_parent_exit(signame):
|
def signal_on_parent_exit(signame):
|
||||||
"""
|
"""
|
||||||
Trigger ``signame`` to be sent when the parent process dies.
|
Trigger signame to be sent when the parent process dies
|
||||||
|
|
||||||
Arguments:
|
|
||||||
|
|
||||||
- ``signame``: name of the signal. See ``man signal``.
|
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
signum = getattr(signal, signame)
|
signum = getattr(signal, signame)
|
||||||
# http://linux.die.net/man/2/prctl
|
# 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
|
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
|
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.
|
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')
|
libc = ctypes.CDLL('libc.so.6')
|
||||||
|
|
||||||
@@ -2037,14 +1766,9 @@ class LogCatcher(logging.Handler):
|
|||||||
|
|
||||||
def is_semver(version):
|
def is_semver(version):
|
||||||
"""
|
"""
|
||||||
Arguments:
|
Is the version string following the semver semantic?
|
||||||
|
|
||||||
- ``version``: the version string.
|
https://semver.org/spec/v2.0.0.html
|
||||||
|
|
||||||
Returns ``True`` if the version string follow semantic versioning, ``False``
|
|
||||||
otherwise.
|
|
||||||
|
|
||||||
See https://semver.org/spec/v2.0.0.html.
|
|
||||||
"""
|
"""
|
||||||
regex = re.compile(
|
regex = re.compile(
|
||||||
r"""
|
r"""
|
||||||
@@ -2082,8 +1806,6 @@ def rename(src, dst):
|
|||||||
def environment(**envvars):
|
def environment(**envvars):
|
||||||
"""
|
"""
|
||||||
Context manager to selectively update the environment with the specified mapping.
|
Context manager to selectively update the environment with the specified mapping.
|
||||||
|
|
||||||
No return value.
|
|
||||||
"""
|
"""
|
||||||
backup = dict(os.environ)
|
backup = dict(os.environ)
|
||||||
try:
|
try:
|
||||||
@@ -2100,13 +1822,6 @@ def is_local_uid(uid=''):
|
|||||||
"""
|
"""
|
||||||
Check whether uid is a local one or not.
|
Check whether uid is a local one or not.
|
||||||
Can't use pwd module since it gets all UIDs, not local ones only.
|
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:
|
if not uid:
|
||||||
uid = os.getuid()
|
uid = os.getuid()
|
||||||
@@ -2121,7 +1836,7 @@ def is_local_uid(uid=''):
|
|||||||
|
|
||||||
def mkstemp(suffix=None, prefix=None, dir=None, text=False):
|
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
|
mkstemp() in glibc (at least) generates unique file names based on the
|
||||||
current system time. When combined with highly parallel builds, and
|
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
|
This function adds additional entropy to the file name so that a collision
|
||||||
is independent of time and thus extremely unlikely.
|
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))
|
entropy = "".join(random.choices("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", k=20))
|
||||||
if prefix:
|
if prefix:
|
||||||
@@ -2152,20 +1855,12 @@ def mkstemp(suffix=None, prefix=None, dir=None, text=False):
|
|||||||
|
|
||||||
def path_is_descendant(descendant, ancestor):
|
def path_is_descendant(descendant, ancestor):
|
||||||
"""
|
"""
|
||||||
Returns ``True`` if the path ``descendant`` is a descendant of ``ancestor``
|
Returns True if the path `descendant` is a descendant of `ancestor`
|
||||||
(including being equivalent to ``ancestor`` itself). Otherwise returns
|
(including being equivalent to `ancestor` itself). Otherwise returns False.
|
||||||
``False``.
|
|
||||||
|
|
||||||
Correctly accounts for symlinks, bind mounts, etc. by using
|
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.
|
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.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ancestor_stat = os.stat(ancestor)
|
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
|
# A version of lock_timeout without the check that the lock was locked and a shorter timeout
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def lock_timeout_nocheck(lock):
|
def lock_timeout_nocheck(lock):
|
||||||
l = False
|
|
||||||
try:
|
try:
|
||||||
s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
|
s = signal.pthread_sigmask(signal.SIG_BLOCK, signal.valid_signals())
|
||||||
l = lock.acquire(timeout=10)
|
l = lock.acquire(timeout=10)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
#
|
#
|
||||||
from datetime import datetime, timezone
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import logging
|
import logging
|
||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
@@ -54,22 +53,6 @@ CONFIG_TABLE_DEFINITION = (
|
|||||||
CONFIG_TABLE_COLUMNS = tuple(name for name, _, _ in 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):
|
def _make_table(cursor, name, definition):
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -41,9 +41,8 @@ current_releases = [
|
|||||||
# Release slot #3 'master'
|
# Release slot #3 'master'
|
||||||
['Master','master','','Yocto Project master','master','','master'],
|
['Master','master','','Yocto Project master','master','','master'],
|
||||||
# Release slot #4
|
# 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 2024)','Support for 7 months (until October 2025)','','2.12'],
|
||||||
['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'],
|
||||||
#['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'],
|
#['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'],
|
#['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'],
|
#['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>
|
<field type="CharField" name="branch">master</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="4">
|
<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="name">walnascar</field>
|
||||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||||
<field type="CharField" name="branch">2.12</field>
|
<field type="CharField" name="branch">2.12</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="6">
|
<object model="orm.bitbakeversion" pk="5">
|
||||||
<field type="CharField" name="name">styhead</field>
|
<field type="CharField" name="name">styhead</field>
|
||||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||||
<field type="CharField" name="branch">2.10</field>
|
<field type="CharField" name="branch">2.10</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="7">
|
<object model="orm.bitbakeversion" pk="6">
|
||||||
<field type="CharField" name="name">kirkstone</field>
|
<field type="CharField" name="name">kirkstone</field>
|
||||||
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||||
<field type="CharField" name="branch">2.0</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>
|
<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>
|
||||||
<object model="orm.release" pk="4">
|
<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="name">walnascar</field>
|
||||||
<field type="CharField" name="description">Openembedded 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="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>
|
<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>
|
||||||
<object model="orm.release" pk="6">
|
<object model="orm.release" pk="5">
|
||||||
<field type="CharField" name="name">styhead</field>
|
<field type="CharField" name="name">styhead</field>
|
||||||
<field type="CharField" name="description">Openembedded 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="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>
|
<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>
|
||||||
<object model="orm.release" pk="7">
|
<object model="orm.release" pk="6">
|
||||||
<field type="CharField" name="name">kirkstone</field>
|
<field type="CharField" name="name">kirkstone</field>
|
||||||
<field type="CharField" name="description">Openembedded 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="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>
|
<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>
|
</object>
|
||||||
@@ -119,10 +107,6 @@
|
|||||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||||
<field type="CharField" name="layer_name">openembedded-core</field>
|
<field type="CharField" name="layer_name">openembedded-core</field>
|
||||||
</object>
|
</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 -->
|
<!-- Layer for the Local release -->
|
||||||
|
|||||||
@@ -26,24 +26,18 @@
|
|||||||
<field type="CharField" name="dirpath">bitbake</field>
|
<field type="CharField" name="dirpath">bitbake</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="4">
|
<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="name">walnascar</field>
|
||||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||||
<field type="CharField" name="branch">walnascar</field>
|
<field type="CharField" name="branch">walnascar</field>
|
||||||
<field type="CharField" name="dirpath">bitbake</field>
|
<field type="CharField" name="dirpath">bitbake</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="6">
|
<object model="orm.bitbakeversion" pk="5">
|
||||||
<field type="CharField" name="name">styhead</field>
|
<field type="CharField" name="name">styhead</field>
|
||||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||||
<field type="CharField" name="branch">styhead</field>
|
<field type="CharField" name="branch">styhead</field>
|
||||||
<field type="CharField" name="dirpath">bitbake</field>
|
<field type="CharField" name="dirpath">bitbake</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.bitbakeversion" pk="7">
|
<object model="orm.bitbakeversion" pk="6">
|
||||||
<field type="CharField" name="name">kirkstone</field>
|
<field type="CharField" name="name">kirkstone</field>
|
||||||
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
|
||||||
<field type="CharField" name="branch">kirkstone</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>
|
<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>
|
||||||
<object model="orm.release" pk="4">
|
<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="name">walnascar</field>
|
||||||
<field type="CharField" name="description">Yocto Project 5.2 "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="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>
|
<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>
|
||||||
<object model="orm.release" pk="6">
|
<object model="orm.release" pk="5">
|
||||||
<field type="CharField" name="name">styhead</field>
|
<field type="CharField" name="name">styhead</field>
|
||||||
<field type="CharField" name="description">Yocto Project 5.1 "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="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>
|
<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>
|
||||||
<object model="orm.release" pk="7">
|
<object model="orm.release" pk="6">
|
||||||
<field type="CharField" name="name">kirkstone</field>
|
<field type="CharField" name="name">kirkstone</field>
|
||||||
<field type="CharField" name="description">Yocto Project 4.0 "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="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>
|
<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>
|
</object>
|
||||||
@@ -175,18 +162,6 @@
|
|||||||
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">6</field>
|
||||||
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
|
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
|
||||||
</object>
|
</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
|
<!-- Default layers provided by poky
|
||||||
openembedded-core
|
openembedded-core
|
||||||
@@ -227,27 +202,20 @@
|
|||||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</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>
|
<field type="CharField" name="dirpath">meta</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.layer_version" pk="5">
|
<object model="orm.layer_version" pk="5">
|
||||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">5</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>
|
<field type="CharField" name="dirpath">meta</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.layer_version" pk="6">
|
<object model="orm.layer_version" pk="6">
|
||||||
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
|
||||||
<field type="IntegerField" name="layer_source">0</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">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="branch">kirkstone</field>
|
||||||
<field type="CharField" name="dirpath">meta</field>
|
<field type="CharField" name="dirpath">meta</field>
|
||||||
</object>
|
</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_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>
|
<field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
||||||
<field type="CharField" name="branch">scarthgap</field>
|
<field type="CharField" name="branch">scarthgap</field>
|
||||||
<field type="CharField" name="dirpath">meta-poky</field>
|
<field type="CharField" name="dirpath">meta-poky</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">2</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="commit">HEAD</field>
|
||||||
<field type="CharField" name="dirpath">meta-poky</field>
|
<field type="CharField" name="dirpath">meta-poky</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
||||||
<field type="CharField" name="branch">master</field>
|
<field type="CharField" name="branch">master</field>
|
||||||
<field type="CharField" name="dirpath">meta-poky</field>
|
<field type="CharField" name="dirpath">meta-poky</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</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>
|
<field type="CharField" name="dirpath">meta-poky</field>
|
||||||
</object>
|
</object>
|
||||||
<object model="orm.layer_version" pk="12">
|
<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 rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
|
||||||
<field type="IntegerField" name="layer_source">0</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">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="branch">kirkstone</field>
|
||||||
<field type="CharField" name="dirpath">meta-poky</field>
|
<field type="CharField" name="dirpath">meta-poky</field>
|
||||||
</object>
|
</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_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>
|
<field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
|
||||||
<field type="CharField" name="branch">scarthgap</field>
|
<field type="CharField" name="branch">scarthgap</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">2</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="commit">HEAD</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
|
||||||
<field type="CharField" name="branch">master</field>
|
<field type="CharField" name="branch">master</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</field>
|
<field type="IntegerField" name="layer_source">0</field>
|
||||||
<field rel="ManyToOneRel" to="orm.release" name="release">4</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="branch">walnascar</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</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="branch">styhead</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</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 rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
|
||||||
<field type="IntegerField" name="layer_source">0</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="branch">kirkstone</field>
|
||||||
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ class BuildTest(unittest.TestCase):
|
|||||||
if os.environ.get("TOASTER_TEST_USE_SSTATE_MIRROR"):
|
if os.environ.get("TOASTER_TEST_USE_SSTATE_MIRROR"):
|
||||||
ProjectVariable.objects.get_or_create(
|
ProjectVariable.objects.get_or_create(
|
||||||
name="SSTATE_MIRRORS",
|
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)
|
project=project)
|
||||||
|
|
||||||
ProjectTarget.objects.create(project=project,
|
ProjectTarget.objects.create(project=project,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
|
|||||||
- Release: Yocto Project 4.0 "Kirkstone" (option value: 6)
|
- Release: Yocto Project 4.0 "Kirkstone" (option value: 6)
|
||||||
- Merge Toaster settings: True
|
- Merge Toaster settings: True
|
||||||
"""
|
"""
|
||||||
release = '7'
|
release = '6'
|
||||||
release_title = 'Yocto Project 4.0 "Kirkstone"'
|
release_title = 'Yocto Project 4.0 "Kirkstone"'
|
||||||
project_name = 'projectkirkstone'
|
project_name = 'projectkirkstone'
|
||||||
self.create_new_project(
|
self.create_new_project(
|
||||||
|
|||||||
@@ -406,22 +406,5 @@ both the Yocto Project and BitBake manuals:
|
|||||||
Submitting documentation changes
|
Submitting documentation changes
|
||||||
================================
|
================================
|
||||||
|
|
||||||
Please refer to our contributor guide here: https://docs.yoctoproject.org/contributor-guide/
|
Please see the top level README file in this repository for details of where
|
||||||
for full details on how to submit changes.
|
to send patches.
|
||||||
|
|
||||||
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
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ following requirements:
|
|||||||
:ref:`dev-manual/start:preparing the build host`
|
:ref:`dev-manual/start:preparing the build host`
|
||||||
section in the Yocto Project Development Tasks Manual.
|
section in the Yocto Project Development Tasks Manual.
|
||||||
|
|
||||||
- Ensure that the following utilities have these minimum version numbers:
|
-
|
||||||
|
|
||||||
- Git &MIN_GIT_VERSION; or greater
|
- Git &MIN_GIT_VERSION; or greater
|
||||||
- tar &MIN_TAR_VERSION; or greater
|
- tar &MIN_TAR_VERSION; or greater
|
||||||
@@ -65,7 +65,7 @@ following requirements:
|
|||||||
- gcc &MIN_GCC_VERSION; or greater.
|
- gcc &MIN_GCC_VERSION; or greater.
|
||||||
- GNU make &MIN_MAKE_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
|
requirements, you can take steps to prepare the system so that you
|
||||||
can still use the Yocto Project. See the
|
can still use the Yocto Project. See the
|
||||||
:ref:`ref-manual/system-requirements:required git, tar, python, make and gcc versions`
|
: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
|
You must install essential host packages on your build host. The
|
||||||
following command installs the host packages based on an Ubuntu
|
following command installs the host packages based on an Ubuntu
|
||||||
distribution:
|
distribution::
|
||||||
|
|
||||||
.. literalinclude:: ../tools/host_packages_scripts/ubuntu_essential.sh
|
$ sudo apt install &UBUNTU_DEBIAN_HOST_PACKAGES_ESSENTIAL;
|
||||||
:language: shell
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
@@ -183,7 +182,7 @@ an entire Linux distribution, including the toolchain, from source.
|
|||||||
page of the Yocto Project Wiki.
|
page of the Yocto Project Wiki.
|
||||||
|
|
||||||
#. **Initialize the Build Environment:** From within the ``poky``
|
#. **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
|
environment
|
||||||
setup script to define Yocto Project's build environment on your
|
setup script to define Yocto Project's build environment on your
|
||||||
build host.
|
build host.
|
||||||
@@ -253,7 +252,7 @@ an entire Linux distribution, including the toolchain, from source.
|
|||||||
file in the :term:`Build Directory`::
|
file in the :term:`Build Directory`::
|
||||||
|
|
||||||
BB_HASHSERVE_UPSTREAM = "wss://hashserv.yoctoproject.org/ws"
|
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_HASHSERVE = "auto"
|
||||||
BB_SIGNATURE_HANDLER = "OEEquivHash"
|
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
|
``conf/bblayers.conf`` file found in your
|
||||||
:term:`Build Directory`, which is
|
:term:`Build Directory`, which is
|
||||||
established after you run the OpenEmbedded build environment setup
|
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`
|
Adding the root directory allows the :term:`OpenEmbedded Build System`
|
||||||
to recognize the BSP
|
to recognize the BSP
|
||||||
layer and from it build an image. Here is an example::
|
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
|
#. *Initialize the Build Environment:* While in the root directory of
|
||||||
the Source Directory (i.e. ``poky``), run the
|
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
|
setup script to define the OpenEmbedded build environment on your
|
||||||
build host. ::
|
build host. ::
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
#
|
#
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
import datetime
|
import datetime
|
||||||
try:
|
try:
|
||||||
@@ -174,24 +173,6 @@ latex_elements = {
|
|||||||
'preamble': '\\usepackage[UTF8]{ctex}\n\\setcounter{tocdepth}{2}',
|
'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
|
# Make the EPUB builder prefer PNG to SVG because of issues rendering Inkscape SVG
|
||||||
from sphinx.builders.epub3 import Epub3Builder
|
from sphinx.builders.epub3 import Epub3Builder
|
||||||
Epub3Builder.supported_image_types = ['image/png', 'image/gif', 'image/jpeg']
|
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>
|
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
|
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
|
please don't just edit the patch file written out by ``git format-patch`` and
|
||||||
resend it.
|
resend it.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ section:
|
|||||||
use the BitBake ``-e`` option to examine variable values after a
|
use the BitBake ``-e`` option to examine variable values after a
|
||||||
recipe has been parsed.
|
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
|
describes how to use the ``oe-pkgdata-util`` utility to query
|
||||||
:term:`PKGDATA_DIR` and
|
:term:`PKGDATA_DIR` and
|
||||||
display package-related information for built packages.
|
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
|
This instance of VSCode uses plugins that are useful for the development
|
||||||
of the application. ``devtool ide-sdk`` generates the necessary
|
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.
|
configuration files for all the involved plugins.
|
||||||
|
|
||||||
When the source code folder present in the workspace folder is opened in
|
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.
|
included in a build.
|
||||||
|
|
||||||
You can find a complete description of the ``devtool add`` command in
|
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
|
in the Yocto Project Application Development and the Extensible Software
|
||||||
Development Kit (eSDK) manual.
|
Development Kit (eSDK) manual.
|
||||||
|
|
||||||
|
|||||||
@@ -24,20 +24,12 @@ users can read in standardized format.
|
|||||||
:term:`SBOM` information is also critical to performing vulnerability exposure
|
:term:`SBOM` information is also critical to performing vulnerability exposure
|
||||||
assessments, as all the components used in the Software Supply Chain are listed.
|
assessments, as all the components used in the Software Supply Chain are listed.
|
||||||
|
|
||||||
The OpenEmbedded build system doesn't generate such information by default,
|
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 make this happen, you must inherit the
|
||||||
|
:ref:`ref-classes-create-spdx` class from a configuration file::
|
||||||
To enable it, inherit the :ref:`ref-classes-create-spdx` class from a
|
|
||||||
configuration file::
|
|
||||||
|
|
||||||
INHERIT += "create-spdx"
|
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:
|
Upon building an image, you will then get:
|
||||||
|
|
||||||
- :term:`SPDX` output in JSON format as an ``IMAGE-MACHINE.spdx.json`` file in
|
- :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.
|
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::
|
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.
|
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
|
If for some reason you choose not to upgrade recipes using
|
||||||
:ref:`dev-manual/upgrading-recipes:Using the Auto Upgrade Helper (AUH)` or
|
: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.
|
you can manually edit the recipe files to upgrade the versions.
|
||||||
|
|
||||||
.. note::
|
.. 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
|
Before attempting this procedure, be sure you have performed the
|
||||||
steps to get ready for updating the kernel as described in 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.
|
section.
|
||||||
|
|
||||||
Patching the kernel involves changing or adding configurations to an
|
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
|
``calibrate.c`` source code file. Applying the patch and booting the
|
||||||
modified image causes the added messages to appear on the emulator's
|
modified image causes the added messages to appear on the emulator's
|
||||||
console. The example is a continuation of the setup procedure found in
|
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``
|
#. *Check Out the Kernel Source Files:* First you must use ``devtool``
|
||||||
to checkout the kernel source code in its workspace.
|
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::
|
.. note::
|
||||||
|
|
||||||
See this step in the
|
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.
|
section for more information.
|
||||||
|
|
||||||
Use the following ``devtool`` command to check out the code::
|
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::
|
.. note::
|
||||||
|
|
||||||
See Step 3 of the
|
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.
|
section for information on setting up this layer.
|
||||||
|
|
||||||
Once the command
|
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
|
For more information about where the ``.config`` file is located, see the
|
||||||
example in the
|
example in the
|
||||||
":ref:`kernel-dev/common:using ``menuconfig```"
|
":ref:`kernel-dev/common:using \`\`menuconfig\`\``"
|
||||||
section.
|
section.
|
||||||
|
|
||||||
It is simple to create a configuration fragment. One method is to use
|
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.
|
fragment.
|
||||||
|
|
||||||
In order to run this task, you must have an existing ``.config`` file.
|
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.
|
information on how to create a configuration file.
|
||||||
|
|
||||||
Here is sample output from the :ref:`ref-tasks-kernel_configcheck` task:
|
Here is sample output from the :ref:`ref-tasks-kernel_configcheck` task:
|
||||||
@@ -1359,7 +1359,7 @@ and
|
|||||||
tasks until they produce no warnings.
|
tasks until they produce no warnings.
|
||||||
|
|
||||||
For more information on how to use the ``menuconfig`` tool, see the
|
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
|
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
|
Using ``devtool`` requires that you have a clean build
|
||||||
of the image. For
|
of the image. For
|
||||||
more information, see the
|
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.
|
section.
|
||||||
|
|
||||||
Using traditional kernel development requires that you have the
|
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::
|
.. toctree::
|
||||||
|
|
||||||
migration-general
|
migration-general
|
||||||
release-5.3
|
|
||||||
release-5.2
|
release-5.2
|
||||||
release-5.1
|
release-5.1
|
||||||
release-5.0
|
release-5.0
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ systemd changes
|
|||||||
files by starting them via
|
files by starting them via
|
||||||
`Also <https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html#Also=>`__,
|
`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 other service files were automatically added to the :term:`FILES` variable of
|
||||||
the same package. Example:
|
the same package. Example:
|
||||||
|
|
||||||
a.service contains::
|
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.23
|
||||||
release-notes-4.0.24
|
release-notes-4.0.24
|
||||||
release-notes-4.0.25
|
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.6
|
||||||
release-notes-5.0.7
|
release-notes-5.0.7
|
||||||
release-notes-5.0.8
|
release-notes-5.0.8
|
||||||
release-notes-5.0.9
|
|
||||||
|
|||||||
@@ -7,4 +7,3 @@ Release 5.2 (walnascar)
|
|||||||
|
|
||||||
migration-5.2
|
migration-5.2
|
||||||
release-notes-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.
|
- Generation of :term:`SPDX` manifests is now enabled by default.
|
||||||
|
|
||||||
- Git based recipes in OE-Core which used the ``git`` protocol have been
|
- 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.
|
more reliable.
|
||||||
|
|
||||||
- The ``os-release`` recipe added a ``CPE_NAME`` to the fields provided, with the
|
- 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
|
:ref:`Shared State <overview-manual/concepts:Shared State>` for the
|
||||||
dependencies. See :doc:`/test-manual/reproducible-builds`.
|
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``.
|
``RuntimeWatchdogSec`` option in ``/etc/systemd/system.conf``.
|
||||||
|
|
||||||
- :term:`FIT_UBOOT_ENV` to allow including a u-boot script as a text in a
|
- :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.
|
HTTPS tokens may not be required.
|
||||||
|
|
||||||
- ``compress``: use ``lz4`` instead of ``lz4c``, as ``lz4c`` as been
|
- ``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
|
- ``server/process``: decrease idle/main loop frequency, as it is idle and
|
||||||
main loops have socket select calls to know when to execute.
|
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
|
- ``bb/build``: add a function ``bb.build.listtasks()`` to list the tasks in
|
||||||
a datastore.
|
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()``.
|
``bb.exception.format_exception()`` by ``traceback.format_exception()``.
|
||||||
|
|
||||||
- ``runqueue``: various performance optimizations including:
|
- ``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>`.
|
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``,
|
- 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.
|
- 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
|
- New ``bbverbnote`` log utility which can be used to print on the console
|
||||||
(equivalent to the ``bb.verbnote`` Python implementation).
|
(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.
|
custom GRUB titles.
|
||||||
|
|
||||||
- ``gawk``: Enable high precision arithmetic support by default (``mpfr``
|
- ``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|
|
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
|
For more information on the ``oe-pkgdata-util`` utility, see the section
|
||||||
:ref:`dev-manual/debugging:Viewing Package Information with
|
: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
|
To add a custom package variant of the ``${PN}`` recipe named
|
||||||
``${PN}-extra`` (name is arbitrary), one can add it to the
|
``${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
|
see the "COMMUNITY" and "ECOSYSTEM" tabs on the
|
||||||
:yocto_home:`Yocto Project <>` home page.
|
:yocto_home:`Yocto Project <>` home page.
|
||||||
|
|
||||||
- *Architecture Agnostic:* Yocto Project supports Intel, ARM, MIPS, AMD, PPC,
|
- *Architecture Agnostic:* Yocto Project supports Intel, ARM, MIPS,
|
||||||
RISC-V and other architectures. Most ODMs, OSVs, and chip vendors create and
|
AMD, PPC and other architectures. Most ODMs, OSVs, and chip vendors
|
||||||
supply BSPs that support their hardware. If you have custom silicon, you can
|
create and supply BSPs that support their hardware. If you have
|
||||||
create a BSP that supports that architecture. See
|
custom silicon, you can create a BSP that supports that architecture.
|
||||||
:doc:`ref-manual/yocto-project-supported-features` for details on the level
|
|
||||||
of support for some of these architectures.
|
|
||||||
|
|
||||||
Aside from broad architecture support, the Yocto Project fully
|
Aside from broad architecture support, the Yocto Project fully
|
||||||
supports a wide range of devices emulated by the Quick EMUlator
|
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
|
# The DISTRO variable represents the current docs version. It should be used
|
||||||
# when referring to the current docs version. See also DISTRO_LATEST_TAG.
|
# 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
|
# 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
|
# 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
|
# 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
|
# represent the latest HEAD revision on the branch). DISTRO_LATEST_TAG should
|
||||||
# always point to an existing tag.
|
# always point to an existing tag.
|
||||||
DISTRO_LATEST_TAG : "5.2"
|
DISTRO_LATEST_TAG : "5.1"
|
||||||
DISTRO_NAME_NO_CAP : "walnascar"
|
DISTRO_NAME_NO_CAP : "styhead"
|
||||||
DISTRO_NAME : "Walnascar"
|
DISTRO_NAME : "Styhead"
|
||||||
DISTRO_NAME_NO_CAP_MINUS_ONE : "styhead"
|
DISTRO_NAME_NO_CAP_MINUS_ONE : "scarthgap"
|
||||||
DISTRO_NAME_NO_CAP_LTS : "scarthgap"
|
DISTRO_NAME_NO_CAP_LTS : "scarthgap"
|
||||||
YOCTO_DOC_VERSION : "5.2"
|
YOCTO_DOC_VERSION : "5.1"
|
||||||
DISTRO_REL_TAG : "yocto-$DISTRO;"
|
DISTRO_REL_TAG : "yocto-$DISTRO;"
|
||||||
DISTRO_REL_LATEST_TAG : "yocto-&DISTRO_LATEST_TAG;"
|
DISTRO_REL_LATEST_TAG : "yocto-&DISTRO_LATEST_TAG;"
|
||||||
DOCCONF_VERSION : "dev"
|
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
|
- :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
|
Image Tree Source (ITS). Users can include their custom U-Boot Image Tree
|
||||||
Source (ITS) snippet in this variable.
|
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
|
- :term:`UBOOT_FIT_CONF_USER_LOADABLES`: adds one or more user-defined images
|
||||||
to the ``loadables`` property of the configuration node.
|
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
|
should create an ESP partition for UEFI firmware and copy ``systemd-boot`` and
|
||||||
UKI files there. Sample configuration for Wic images is provided in
|
UKI files there. Sample configuration for Wic images is provided in
|
||||||
:oe_git:`scripts/lib/wic/canned-wks/efi-uki-bootdisk.wks.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
|
UKIs are generated using ``systemd`` reference implementation `ukify
|
||||||
<https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__.
|
<https://www.freedesktop.org/software/systemd/man/latest/ukify.html>`__.
|
||||||
This class uses a number of variables but tries to find sensible defaults for
|
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
|
- :term:`EFI_ARCH`: architecture name within EFI standard, set in
|
||||||
:oe_git:`meta/conf/image-uefi.conf
|
: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
|
- :term:`IMAGE_EFI_BOOT_FILES`: files to install to EFI boot partition
|
||||||
created by the ``bootimg-efi`` Wic plugin
|
created by the ``bootimg-efi`` Wic plugin
|
||||||
- :term:`INITRAMFS_IMAGE`: initramfs recipe name
|
- :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
|
For examples on how to use this class see oeqa selftest
|
||||||
:oe_git:`meta/lib/oeqa/selftest/cases/uki.py
|
: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
|
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
|
verifies that the target system booted the same UKI binary as was set at
|
||||||
buildtime via :term:`UKI_FILENAME`.
|
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`"
|
":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
|
section in the Yocto Project Application Development and the Extensible
|
||||||
Software Development Kit (eSDK) manual. You can also see an example of
|
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.
|
section in the Yocto Project Development Tasks Manual.
|
||||||
|
|
||||||
.. _devtool-resetting-a-recipe:
|
.. _devtool-resetting-a-recipe:
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ Yocto Project Reference Manual
|
|||||||
:numbered:
|
:numbered:
|
||||||
|
|
||||||
system-requirements
|
system-requirements
|
||||||
yocto-project-supported-features
|
|
||||||
terms
|
terms
|
||||||
release-process
|
release-process
|
||||||
structure
|
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
|
directory contain information about each output package produced by the
|
||||||
OpenEmbedded build system, and are used in different ways by the build system
|
OpenEmbedded build system, and are used in different ways by the build system
|
||||||
such as ":ref:`dev-manual/debugging:viewing package information with
|
such as ":ref:`dev-manual/debugging:viewing package information with
|
||||||
``oe-pkgdata-util```".
|
\`\`oe-pkgdata-util\`\``".
|
||||||
|
|
||||||
.. _structure-build-tmp-sstate-control:
|
.. _structure-build-tmp-sstate-control:
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
<svg
|
<svg
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg2"
|
id="svg2"
|
||||||
width="1992.7236"
|
width="1523.001"
|
||||||
height="613.35602"
|
height="504.30499"
|
||||||
viewBox="0 0 1992.7236 613.35599"
|
viewBox="0 0 1523.001 504.30497"
|
||||||
sodipodi:docname="releases.svg"
|
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-filename="../../../../../../../../tmp/releases.png"
|
||||||
inkscape:export-xdpi="96"
|
inkscape:export-xdpi="96"
|
||||||
inkscape:export-ydpi="96"
|
inkscape:export-ydpi="96"
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
scale_width="1"
|
scale_width="1"
|
||||||
end_linecap_type="zerowidth"
|
end_linecap_type="zerowidth"
|
||||||
not_jump="false"
|
not_jump="false"
|
||||||
message="" />
|
message="<b>Ctrl + click</b> on existing node and move it" />
|
||||||
<marker
|
<marker
|
||||||
style="overflow:visible"
|
style="overflow:visible"
|
||||||
id="marker5783"
|
id="marker5783"
|
||||||
@@ -412,9 +412,9 @@
|
|||||||
inkscape:window-height="2069"
|
inkscape:window-height="2069"
|
||||||
id="namedview4"
|
id="namedview4"
|
||||||
showgrid="true"
|
showgrid="true"
|
||||||
inkscape:zoom="1.5536106"
|
inkscape:zoom="2.1971372"
|
||||||
inkscape:cx="1158.2696"
|
inkscape:cx="1068.2082"
|
||||||
inkscape:cy="273.55632"
|
inkscape:cy="287.87461"
|
||||||
inkscape:window-x="2256"
|
inkscape:window-x="2256"
|
||||||
inkscape:window-y="60"
|
inkscape:window-y="60"
|
||||||
inkscape:window-maximized="1"
|
inkscape:window-maximized="1"
|
||||||
@@ -433,8 +433,8 @@
|
|||||||
<inkscape:grid
|
<inkscape:grid
|
||||||
type="xygrid"
|
type="xygrid"
|
||||||
id="grid1257"
|
id="grid1257"
|
||||||
originx="-289.06071"
|
originx="-289.99936"
|
||||||
originy="478.43017"
|
originy="369.99997"
|
||||||
spacingy="1"
|
spacingy="1"
|
||||||
spacingx="1"
|
spacingx="1"
|
||||||
units="px"
|
units="px"
|
||||||
@@ -444,90 +444,66 @@
|
|||||||
inkscape:groupmode="layer"
|
inkscape:groupmode="layer"
|
||||||
inkscape:label="Image"
|
inkscape:label="Image"
|
||||||
id="g10"
|
id="g10"
|
||||||
transform="translate(-289.06072,478.43022)">
|
transform="translate(-289.99936,370.00003)">
|
||||||
<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" />
|
|
||||||
<path
|
<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"
|
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 -524.414808 0 0"
|
d="m 563.40434,64.000628 v -415.635938 0 0"
|
||||||
id="path207708" />
|
id="path207708" />
|
||||||
<path
|
<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"
|
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 -524.414808 0 0"
|
d="m 683.40434,64.000628 v -415.635938 0 0"
|
||||||
id="path207708-4" />
|
id="path207708-4" />
|
||||||
<path
|
<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"
|
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 -524.414808 0 0"
|
d="m 803.40434,64.000628 v -415.635938 0 0"
|
||||||
id="path207708-4-3" />
|
id="path207708-4-3" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 923.40434,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6" />
|
id="path207708-4-3-6" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 1043.4043,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6-2" />
|
id="path207708-4-3-6-2" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 1163.4043,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6-2-8" />
|
id="path207708-4-3-6-2-8" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 1283.4043,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6-2-8-4" />
|
id="path207708-4-3-6-2-8-4" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 1403.4043,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6-2-8-4-3" />
|
id="path207708-4-3-6-2-8-4-3" />
|
||||||
<path
|
<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"
|
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"
|
d="m 1523.4043,64.000568 v -415.757648 0 0"
|
||||||
id="path207708-4-3-6-2-8-4-3-8" />
|
id="path207708-4-3-6-2-8-4-3-8" />
|
||||||
<path
|
<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"
|
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.000577 v -524.414757 0 0"
|
d="m 1523.4043,64.000588 v -415.635898 0 0"
|
||||||
id="path207708-4-3-6-2-8-4-3-8-0" />
|
id="path207708-4-3-6-2-8-4-3-8-0" />
|
||||||
<path
|
<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"
|
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.000565 v -524.414715 0 0"
|
d="m 1643.3583,64.000578 v -415.635868 0 0"
|
||||||
id="path207708-4-3-6-2-8-4-3-8-4" />
|
id="path207708-4-3-6-2-8-4-3-8-4" />
|
||||||
<path
|
<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"
|
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.000565 v -524.414715 0 0"
|
d="m 1763.4043,64.000578 v -415.635868 0 0"
|
||||||
id="path207708-4-3-6-2-8-4-3-8-4-0" />
|
id="path207708-4-3-6-2-8-4-3-8-4-0" />
|
||||||
<path
|
<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"
|
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 1883.7877,64.878769 v -524.414709 0 0"
|
d="m 443.40434,64.000628 v -415.635938 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"
|
|
||||||
id="path207708-9" />
|
id="path207708-9" />
|
||||||
<path
|
<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"
|
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"
|
d="m 323.40434,64.000608 v -375.000008 0 0"
|
||||||
id="path207708-9-6" />
|
id="path207708-9-6" />
|
||||||
<path
|
<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"
|
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.000616 v -524.414766 0 0"
|
d="m 323.40434,64.000618 v -415.635908 0 0"
|
||||||
id="path207708-9-6-2" />
|
id="path207708-9-6-2" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
@@ -560,7 +536,7 @@
|
|||||||
x="-59.575905"
|
x="-59.575905"
|
||||||
y="580.05695" /></text>
|
y="580.05695" /></text>
|
||||||
<rect
|
<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"
|
id="rect917-0-0-4-4-9-4"
|
||||||
width="160.00002"
|
width="160.00002"
|
||||||
height="45.000004"
|
height="45.000004"
|
||||||
@@ -607,6 +583,14 @@
|
|||||||
y="-73.501534"
|
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"
|
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>
|
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
|
<rect
|
||||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
|
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"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-3-6"
|
||||||
@@ -631,78 +615,22 @@
|
|||||||
y="-238.332"
|
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"
|
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>
|
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
|
<text
|
||||||
xml:space="preserve"
|
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"
|
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"
|
x="1094.2197"
|
||||||
y="-309.61823"
|
y="-309.83084"
|
||||||
id="text1185-3-55-4-0-0-0-1-1-6-4-7"><tspan
|
id="text1185-3-55-4-0-0-0-1-1-6-4-3"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="1090.4542"
|
x="1094.2197"
|
||||||
y="-309.61823"
|
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"
|
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"
|
sodipodi:role="line"
|
||||||
x="1090.4542"
|
x="1094.2197"
|
||||||
y="-291.62155"
|
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"
|
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>
|
id="tspan10317-2-9-1-4-6-5-6-6">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>
|
|
||||||
<g
|
<g
|
||||||
id="g1591"
|
id="g1591"
|
||||||
transform="translate(-516.59566,64.000598)">
|
transform="translate(-516.59566,64.000598)">
|
||||||
@@ -753,7 +681,7 @@
|
|||||||
id="tspan10317-2-9-0-1">5.0</tspan></text>
|
id="tspan10317-2-9-0-1">5.0</tspan></text>
|
||||||
<g
|
<g
|
||||||
id="g1125-0"
|
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">
|
style="stroke:none;stroke-width:2.38399">
|
||||||
<rect
|
<rect
|
||||||
style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.76797;stroke-opacity:1"
|
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>
|
y="345.7359" /></text>
|
||||||
<path
|
<path
|
||||||
id="path29430"
|
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"
|
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 2277.72 Z" />
|
d="M 307.54809,63.999718 H 1783.4043 Z" />
|
||||||
<path
|
<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"
|
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"
|
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"
|
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"
|
d="m 1763.4043,64.000578 v 9.99999 0"
|
||||||
id="path29548-5-1-3-6-3-1-0-3-4-2-0-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
|
<rect
|
||||||
style="opacity:0.75;fill:#241f31;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.751473;stroke-opacity:1"
|
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"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-36"
|
||||||
width="38.418175"
|
width="38.418175"
|
||||||
height="23.151052"
|
height="23.151052"
|
||||||
x="2047.6135"
|
x="1605.6135"
|
||||||
y="-45.172161"
|
y="-41.172161"
|
||||||
ry="1.1605872" />
|
ry="1.1605872" />
|
||||||
<rect
|
<rect
|
||||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.98878;stroke-dasharray:none;stroke-opacity:1"
|
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"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-36-7"
|
||||||
width="186.42949"
|
width="186.42949"
|
||||||
height="110.40546"
|
height="110.40546"
|
||||||
x="2036.5294"
|
x="1594.5294"
|
||||||
y="-77.753708"
|
y="-73.753708"
|
||||||
ry="5.5347452" />
|
ry="5.5347452" />
|
||||||
<rect
|
<rect
|
||||||
style="opacity:0.75;fill:#241f31;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.50949;stroke-opacity:1"
|
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"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-6"
|
||||||
width="21.197233"
|
width="21.197233"
|
||||||
height="19.28739"
|
height="19.28739"
|
||||||
x="2053.8164"
|
x="1611.8163"
|
||||||
y="-45.883858"
|
y="-41.883858"
|
||||||
ry="0.96689767" />
|
ry="0.96689767" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
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"
|
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"
|
x="1690.4917"
|
||||||
y="-57.687912"
|
y="-53.687912"
|
||||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5"><tspan
|
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="2132.4917"
|
x="1690.4917"
|
||||||
y="-57.687912"
|
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"
|
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>
|
id="tspan10317-2-9-1-4-6-5-6-6-5">Legend</tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
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"
|
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"
|
x="1656.0988"
|
||||||
y="-31.899874"
|
y="-27.899874"
|
||||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2"><tspan
|
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="2098.0986"
|
x="1656.0988"
|
||||||
y="-31.899874"
|
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"
|
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>
|
id="tspan10317-2-9-1-4-6-5-6-6-5-9">Future</tspan></text>
|
||||||
<rect
|
<rect
|
||||||
@@ -1834,38 +1488,38 @@
|
|||||||
id="rect917-0-0-4-4-9-4-5-3-9-2-6-1"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-6-1"
|
||||||
width="21.197233"
|
width="21.197233"
|
||||||
height="19.28739"
|
height="19.28739"
|
||||||
x="2053.8672"
|
x="1611.8671"
|
||||||
y="-21.756365"
|
y="-17.756365"
|
||||||
ry="0.96689767" />
|
ry="0.96689767" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
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"
|
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"
|
x="1686.7159"
|
||||||
y="-7.6722765"
|
y="-3.6722763"
|
||||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2"><tspan
|
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="2128.7158"
|
x="1686.7159"
|
||||||
y="-7.6722765"
|
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"
|
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
|
<text
|
||||||
xml:space="preserve"
|
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"
|
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"
|
x="1667.363"
|
||||||
y="16.03771"
|
y="20.03771"
|
||||||
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2-9"><tspan
|
id="text1185-3-55-4-0-0-0-1-1-6-4-3-5-2-2-9"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="2109.363"
|
x="1667.363"
|
||||||
y="16.03771"
|
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"
|
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>
|
id="tspan10317-2-9-1-4-6-5-6-6-5-9-7-3">End-of-life</tspan></text>
|
||||||
<rect
|
<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"
|
id="rect917-0-0-4-4-9-4-5-3-9-2-6-1-0"
|
||||||
width="21.197233"
|
width="21.197233"
|
||||||
height="19.28739"
|
height="19.28739"
|
||||||
x="2054.0239"
|
x="1612.0239"
|
||||||
y="1.9667883"
|
y="5.9667883"
|
||||||
ry="0.96689767" />
|
ry="0.96689767" />
|
||||||
<rect
|
<rect
|
||||||
style="opacity:0.5;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.85786;stroke-opacity:1"
|
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
|
$ 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
|
section in the Yocto Project Linux Kernel Development Manual for more
|
||||||
information on this configuration tool.
|
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
|
Runs ``make menuconfig`` for the kernel. For information on
|
||||||
``menuconfig``, see the
|
``menuconfig``, see the
|
||||||
":ref:`kernel-dev/common:using ``menuconfig```"
|
":ref:`kernel-dev/common:using \`\`menuconfig\`\``"
|
||||||
section in the Yocto Project Linux Kernel Development Manual.
|
section in the Yocto Project Linux Kernel Development Manual.
|
||||||
|
|
||||||
.. _ref-tasks-savedefconfig:
|
.. _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
|
This term refers to the area used by the OpenEmbedded build system for
|
||||||
builds. The area is created when you ``source`` the setup environment
|
builds. The area is created when you ``source`` the setup environment
|
||||||
script that is found in the Source Directory
|
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`.
|
:term:`TOPDIR` variable points to the :term:`Build Directory`.
|
||||||
|
|
||||||
You have a lot of flexibility when creating 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``.
|
resides within the :term:`Build Directory` as ``${TMPDIR}/deploy``.
|
||||||
|
|
||||||
For more information on the structure of the Build Directory, see
|
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
|
For more detail on the contents of the ``deploy`` directory, see the
|
||||||
":ref:`overview-manual/concepts:images`",
|
":ref:`overview-manual/concepts:images`",
|
||||||
":ref:`overview-manual/concepts:package feeds`", and
|
":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.
|
contents of :term:`IMGDEPLOYDIR` by the :ref:`ref-classes-image` class.
|
||||||
|
|
||||||
For more information on the structure of the :term:`Build Directory`, see
|
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
|
For more detail on the contents of the ``deploy`` directory, see the
|
||||||
":ref:`overview-manual/concepts:images`" and
|
":ref:`overview-manual/concepts:images`" and
|
||||||
":ref:`overview-manual/concepts:application development sdk`" sections both in
|
":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"
|
IMAGE_ROOTFS_EXTRA_SPACE = "41943040"
|
||||||
|
|
||||||
:term:`IMAGE_ROOTFS_MAXSIZE`
|
:term:`IMAGE_ROOTFS_MAXSIZE`
|
||||||
Defines the maximum allowed size of the generated image in kilobytes.
|
Defines the maximum size in Kbytes for the generated image. If the
|
||||||
The build will fail if the generated image size exceeds this value.
|
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
|
||||||
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
|
|
||||||
space (e.g. SD card, a fixed-size partition, ...).
|
space (e.g. SD card, a fixed-size partition, ...).
|
||||||
|
|
||||||
:term:`IMAGE_ROOTFS_SIZE`
|
: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"
|
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`
|
:term:`INHIBIT_DEFAULT_DEPS`
|
||||||
Prevents the default dependencies, namely the C compiler and standard
|
Prevents the default dependencies, namely the C compiler and standard
|
||||||
C library (libc), from being added to :term:`DEPENDS`.
|
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
|
Set the variable to "1" to prevent the default dependencies from
|
||||||
being added.
|
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`
|
:term:`INHIBIT_PACKAGE_DEBUG_SPLIT`
|
||||||
Prevents the OpenEmbedded build system from splitting out debug
|
Prevents the OpenEmbedded build system from splitting out debug
|
||||||
information during packaging. By default, the build system splits out
|
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
|
even if the toolchain's binaries are strippable, there are other files
|
||||||
needed for the build that are not strippable.
|
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`
|
:term:`INIT_MANAGER`
|
||||||
Specifies the system init manager to use. Available options are:
|
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
|
See the :term:`MACHINE` variable for additional
|
||||||
information.
|
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`
|
:term:`INITRAMFS_MULTICONFIG`
|
||||||
Defines the multiconfig to create a multiconfig dependency to be used by
|
Defines the multiconfig to create a multiconfig dependency to be used by
|
||||||
the :ref:`ref-classes-kernel` class.
|
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
|
options not explicitly specified will be disabled in the kernel
|
||||||
config.
|
config.
|
||||||
|
|
||||||
In case :term:`KCONFIG_MODE` is not set the ``defconfig`` file
|
In case :term:`KCONFIG_MODE` is not set the behaviour will depend on where
|
||||||
will be handled in ``allnoconfig`` mode.
|
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
|
A ``defconfig`` file compatible with ``allnoconfig`` mode can be
|
||||||
generated by copying the ``.config`` file from a working Linux kernel
|
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
|
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
|
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>`__.
|
at the `NVD developer's page <https://nvd.nist.gov/developers/start-here>`__.
|
||||||
|
|
||||||
NVD API keys can be requested through the
|
NVD API keys can be requested through the
|
||||||
`Request an API Key <https://nvd.nist.gov/developers/request-an-api-key>`__
|
`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.
|
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
|
For examples of how this data is used, see the
|
||||||
":ref:`overview-manual/concepts:automatically added runtime dependencies`"
|
":ref:`overview-manual/concepts:automatically added runtime dependencies`"
|
||||||
section in the Yocto Project Overview and Concepts Manual and the
|
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
|
section in the Yocto Project Development Tasks Manual. For more
|
||||||
information on the shared, global-state directory, see
|
information on the shared, global-state directory, see
|
||||||
:term:`STAGING_DIR_HOST`.
|
: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
|
the package is built, the version information can be retrieved with
|
||||||
``oe-pkgdata-util package-info <package name>``. See the
|
``oe-pkgdata-util package-info <package name>``. See the
|
||||||
:ref:`dev-manual/debugging:Viewing Package Information with
|
: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``.
|
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
|
prefer to have a read-only root filesystem and prefer to keep
|
||||||
writeable data in one place.
|
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"
|
ROOT_HOME ?= "/root"
|
||||||
|
|
||||||
You can also override the default by setting the variable in your distro
|
These
|
||||||
configuration or in the ``local.conf`` file.
|
override examples use ``/root``, which is probably the most commonly
|
||||||
|
used override.
|
||||||
|
|
||||||
:term:`ROOTFS`
|
:term:`ROOTFS`
|
||||||
Indicates a filesystem image to include as the root filesystem.
|
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.
|
class.
|
||||||
|
|
||||||
:term:`SPL_SIGN_KEYNAME`
|
: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`
|
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``
|
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
|
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
|
The Yocto Project actually shares the cache data objects built by its
|
||||||
autobuilder::
|
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
|
As such binary artifacts are built for the generic QEMU machines
|
||||||
supported by the various Poky releases, they are less likely to be
|
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.
|
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`
|
:term:`STAGING_BASE_LIBDIR_NATIVE`
|
||||||
Specifies the path to the ``/lib`` subdirectory of the sysroot
|
Specifies the path to the ``/lib`` subdirectory of the sysroot
|
||||||
directory for the build host.
|
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"
|
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`
|
:term:`UBOOT_FIT_CONF_USER_LOADABLES`
|
||||||
Adds one or more user-defined images to the ``loadables`` property of the
|
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
|
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"
|
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,
|
U-Boot's :term:`B` directory. An absolute path can be provided too,
|
||||||
e.g.::
|
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
|
Specifies the timeout in seconds used by the ``watchdog-config`` recipe
|
||||||
and also by ``systemd`` during reboot. The default is 60 seconds.
|
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`
|
:term:`WIC_SECTOR_SIZE`
|
||||||
The variable :term:`WIC_SECTOR_SIZE` controls the sector size of Wic
|
The variable :term:`WIC_SECTOR_SIZE` controls the sector size of Wic
|
||||||
images. In the background, this controls the value of the
|
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:
|
if len(sys.argv) == 2:
|
||||||
ourversion = sys.argv[1]
|
ourversion = sys.argv[1]
|
||||||
|
|
||||||
activereleases = ["walnascar", "scarthgap", "kirkstone"]
|
activereleases = ["styhead", "scarthgap", "kirkstone"]
|
||||||
devbranch = "whinlatter"
|
devbranch = "walnascar"
|
||||||
ltsseries = ["scarthgap", "kirkstone"]
|
ltsseries = ["scarthgap", "kirkstone"]
|
||||||
|
|
||||||
# used by run-docs-builds to get the default page
|
# used by run-docs-builds to get the default page
|
||||||
@@ -36,7 +36,6 @@ if ourversion == "getlatest":
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
release_series = collections.OrderedDict()
|
release_series = collections.OrderedDict()
|
||||||
release_series["whinlatter"] = "5.3"
|
|
||||||
release_series["walnascar"] = "5.2"
|
release_series["walnascar"] = "5.2"
|
||||||
release_series["styhead"] = "5.1"
|
release_series["styhead"] = "5.1"
|
||||||
release_series["scarthgap"] = "5.0"
|
release_series["scarthgap"] = "5.0"
|
||||||
@@ -71,7 +70,6 @@ release_series["laverne"] = "0.9"
|
|||||||
|
|
||||||
|
|
||||||
bitbake_mapping = {
|
bitbake_mapping = {
|
||||||
"whinlatter" : "2.14",
|
|
||||||
"walnascar" : "2.12",
|
"walnascar" : "2.12",
|
||||||
"styhead" : "2.10",
|
"styhead" : "2.10",
|
||||||
"scarthgap" : "2.8",
|
"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
|
the Autobuilder tests if things work. The Autobuilder builds all test
|
||||||
targets and runs all the tests.
|
targets and runs all the tests.
|
||||||
|
|
||||||
The Yocto Project uses standard upstream Buildbot to drive its integration and
|
The Yocto Project uses now uses standard upstream
|
||||||
testing. Buildbot has a plug-in interface that the Yocto Project customizes
|
Buildbot (`version 3.8 <https://docs.buildbot.net/3.8.0/>`__) to
|
||||||
using code from the :yocto_git:`yocto-autobuilder2 </yocto-autobuilder2>`
|
drive its integration and testing. Buildbot has a plug-in interface
|
||||||
repository, adding its own console UI plugin. The resulting UI plug-in allows
|
that the Yocto Project customizes using code from the
|
||||||
you to visualize builds in a way suited to the project's needs.
|
``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
|
A ``helper`` layer provides configuration and job management through
|
||||||
scripts found in the ``yocto-autobuilder-helper`` repository. The
|
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
|
You need to run the ``buildslist`` command first to identify existing
|
||||||
builds in the database before using the
|
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:
|
example that assumes default repository and :term:`Build Directory` names:
|
||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
@@ -555,7 +555,7 @@ example that assumes default repository and :term:`Build Directory` names:
|
|||||||
$ python ../bitbake/lib/toaster/manage.py buildslist
|
$ python ../bitbake/lib/toaster/manage.py buildslist
|
||||||
|
|
||||||
If your Toaster database had only one build, the above
|
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::
|
command would return something like the following::
|
||||||
|
|
||||||
1: qemux86 poky core-image-minimal
|
1: qemux86 poky core-image-minimal
|
||||||
@@ -576,7 +576,7 @@ the database.
|
|||||||
|
|
||||||
Prior to running the ``builddelete`` command, you need to get the ID
|
Prior to running the ``builddelete`` command, you need to get the ID
|
||||||
associated with builds by using the
|
associated with builds by using the
|
||||||
:ref:`toaster-manual/reference:``buildslist``` command.
|
:ref:`toaster-manual/reference:\`\`buildslist\`\`` command.
|
||||||
|
|
||||||
``perf``
|
``perf``
|
||||||
--------
|
--------
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ sudo dnf install -y epel-release
|
|||||||
sudo yum install dnf-plugins-core
|
sudo yum install dnf-plugins-core
|
||||||
sudo dnf config-manager --set-enabled crb
|
sudo dnf config-manager --set-enabled crb
|
||||||
sudo dnf makecache
|
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
|
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-", "")
|
bpn = bpn.replace("-nativesdk", "").replace("nativesdk-", "")
|
||||||
|
|
||||||
if bpn in d.getVar("POKY_AUTOREV_RECIPES").split():
|
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}")
|
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"):
|
if "+git" not in d.getVar("PV"):
|
||||||
d.appendVar("PV", "+git")
|
d.appendVar("PV", "+git")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ ENABLE_WIDEC:class-native = "true"
|
|||||||
|
|
||||||
# Drop native language support. This removes the
|
# Drop native language support. This removes the
|
||||||
# eglibc->bash->gettext->libc-posix-clang-wchar dependency.
|
# 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
|
# As we don't have native language support, don't install locales into images
|
||||||
IMAGE_LINGUAS = ""
|
IMAGE_LINGUAS = ""
|
||||||
|
|
||||||
|
|||||||
@@ -240,13 +240,17 @@ BB_DISKMON_DIRS ??= "\
|
|||||||
# Using the CDN rather than the yoctoproject.org address is suggested/preferred.
|
# Using the CDN rather than the yoctoproject.org address is suggested/preferred.
|
||||||
#
|
#
|
||||||
#BB_HASHSERVE_UPSTREAM = 'wss://hashserv.yoctoproject.org/ws'
|
#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
|
# Qemu configuration
|
||||||
#
|
#
|
||||||
# By default native qemu will build with a builtin VNC server and a SDL UI frontend
|
# By default native qemu will build with a builtin VNC server where graphical output can be
|
||||||
# where graphical output can be seen.
|
# 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
|
# 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.
|
# the minimal libsdl built by libsdl2-native then uncomment the ASSUME_PROVIDED line below.
|
||||||
#ASSUME_PROVIDED += "libsdl2-native"
|
#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
|
# long-description: This image contains boot partition and 3 rootfs partitions
|
||||||
# created from core-image-minimal and wic-image-minimal image recipes.
|
# 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 / --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 /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
|
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 / --source rootfs --ondisk sda --fstype=${OVERLAYFS_ROOTFS_TYPE} --use-uuid --align 1024
|
||||||
part --ondisk sda --fstype=ext4 --size=5 --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}"
|
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
|
# 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
|
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
|
||||||
|
|
||||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
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
|
# 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
|
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid --label root
|
||||||
|
|
||||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
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
|
# 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
|
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
|
# 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
|
part / --source rawcopy --sourceparams="file=${IMAGE_LINK_NAME_CORE_IMAGE_MINIMAL}.ext4" --use-uuid
|
||||||
|
|
||||||
bootloader --timeout=0 --append="console=ttyS0,115200n8"
|
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
|
# 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
|
part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,6 @@ PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
|
|||||||
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules"
|
MACHINE_EXTRA_RRECOMMENDS += "kernel-modules"
|
||||||
# Install selected pieces of firmware
|
# Install selected pieces of firmware
|
||||||
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-wl12xx linux-firmware-wl18xx linux-firmware-rtl-nic"
|
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
|
# Use an initramfs and populate it with the kernel modules and key firmware
|
||||||
INITRAMFS_IMAGE ?= "core-image-initramfs-boot"
|
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.
|
#@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"
|
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
|
require conf/machine/include/genericx86-common.inc
|
||||||
|
|
||||||
#For runqemu
|
#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.
|
#@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"
|
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
|
require conf/machine/include/genericx86-common.inc
|
||||||
|
|
||||||
#For runqemu
|
#For runqemu
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
# long-description: Creates a partitioned SD card image for Beaglebone.
|
# long-description: Creates a partitioned SD card image for Beaglebone.
|
||||||
# Boot files are located in the first vfat partition.
|
# 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
|
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4 --use-uuid
|
||||||
bootloader --append="console=ttyS0,115200"
|
bootloader --append="console=ttyS0,115200"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# long-description: Creates a partitioned EFI disk image that the user
|
# long-description: Creates a partitioned EFI disk image that the user
|
||||||
# can directly dd to boot media.
|
# 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
|
part swap --size 44 --label swap --fstype=swap --use-uuid
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# short-description: Create an EFI disk image for genericx86*
|
# short-description: Create an EFI disk image for genericx86*
|
||||||
# long-description: Creates a partitioned EFI disk image for genericx86* machines
|
# 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 / --source rootfs --ondisk sda --fstype=ext4 --label platform --align 1024 --use-uuid
|
||||||
part swap --ondisk sda --size 44 --label swap1 --fstype=swap
|
part swap --ondisk sda --size 44 --label swap1 --fstype=swap
|
||||||
|
|
||||||
|
|||||||
@@ -19,21 +19,6 @@ PACKAGECONFIG_CONFARGS ??= ""
|
|||||||
|
|
||||||
inherit metadata_scm
|
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):
|
def lsb_distro_identifier(d):
|
||||||
adjust = d.getVar('LSB_DISTRO_ADJUST')
|
adjust = d.getVar('LSB_DISTRO_ADJUST')
|
||||||
adjust_func = None
|
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))
|
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
|
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() {
|
python base_eventhandler() {
|
||||||
import bb.runqueue
|
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 isinstance(e, bb.event.ConfigParsed):
|
||||||
if not d.getVar("NATIVELSBSTRING", False):
|
if not d.getVar("NATIVELSBSTRING", False):
|
||||||
d.setVar("NATIVELSBSTRING", lsb_distro_identifier(d))
|
d.setVar("NATIVELSBSTRING", lsb_distro_identifier(d))
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ CHECKLAYER_REQUIRED_TESTS = "\
|
|||||||
invalid-packageconfig la \
|
invalid-packageconfig la \
|
||||||
license-checksum license-exception license-exists license-file-missing license-format license-no-generic license-syntax \
|
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 \
|
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 \
|
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 \
|
unhandled-features-check unknown-configure-option unlisted-pkg-lics uppercase-pn useless-rpaths \
|
||||||
var-undefined virtual-slash xorg-driver-abi"
|
var-undefined virtual-slash xorg-driver-abi"
|
||||||
@@ -832,7 +832,7 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
for rdepend in rdepends:
|
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)
|
error_msg = "%s rdepends on %s" % (pkg,rdepend)
|
||||||
oe.qa.handle_error("debug-deps", error_msg, d)
|
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:
|
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')):
|
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)
|
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
|
# 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)):
|
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)
|
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:
|
except subprocess.CalledProcessError:
|
||||||
pass
|
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)
|
oe.qa.exit_if_errors(d)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1438,12 +1441,6 @@ python do_qa_unpack() {
|
|||||||
python do_recipe_qa() {
|
python do_recipe_qa() {
|
||||||
import re
|
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):
|
def test_missing_metadata(pn, d):
|
||||||
fn = d.getVar("FILE")
|
fn = d.getVar("FILE")
|
||||||
srcfile = d.getVar('SRC_URI').split()
|
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:
|
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)
|
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')
|
pn = d.getVar('PN')
|
||||||
test_naming(pn, d)
|
|
||||||
test_missing_metadata(pn, d)
|
test_missing_metadata(pn, d)
|
||||||
test_missing_maintainer(pn, d)
|
test_missing_maintainer(pn, d)
|
||||||
test_srcuri(pn, d)
|
test_srcuri(pn, d)
|
||||||
test_packageconfig(pn, d)
|
|
||||||
oe.qa.exit_if_errors(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