summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-07-28 23:28:15 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-08-02 15:44:10 +0100
commitbb6ddc3691ab04162ec5fd69a2d5e7876713fd15 (patch)
tree76e376b01253c3aace1a98a5021bcaad3c92e861 /scripts
parentfcc456ee4b8f619134abb4649db53c638074082c (diff)
downloadpoky-bb6ddc3691ab04162ec5fd69a2d5e7876713fd15.tar.gz
Convert to new override syntax
This is the result of automated script conversion: scripts/contrib/convert-overrides.py <oe-core directory> converting the metadata to use ":" as the override character instead of "_". (From OE-Core rev: 42344347be29f0997cc2f7636d9603b1fe1875ae) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/buildhistory-collect-srcrevs2
-rwxr-xr-xscripts/crosstap6
-rw-r--r--scripts/lib/devtool/build_image.py2
-rw-r--r--scripts/lib/devtool/sdk.py2
-rw-r--r--scripts/lib/devtool/search.py2
-rw-r--r--scripts/lib/devtool/standard.py12
-rw-r--r--scripts/lib/devtool/upgrade.py6
-rw-r--r--scripts/lib/recipetool/append.py4
-rw-r--r--scripts/lib/recipetool/create.py4
-rw-r--r--scripts/lib/recipetool/create_buildsys_python.py10
-rw-r--r--scripts/lib/recipetool/create_kmod.py2
-rwxr-xr-xscripts/oe-check-sstate4
-rwxr-xr-xscripts/oe-debuginfod2
-rwxr-xr-xscripts/oe-pkgdata-util4
14 files changed, 31 insertions, 31 deletions
diff --git a/scripts/buildhistory-collect-srcrevs b/scripts/buildhistory-collect-srcrevs
index 340bee78bb..bca01a922b 100755
--- a/scripts/buildhistory-collect-srcrevs
+++ b/scripts/buildhistory-collect-srcrevs
@@ -101,7 +101,7 @@ def main():
101 if name: 101 if name:
102 print('SRCREV_%s_pn-%s%s = "%s"' % (name, pn, forcevariable, srcrev)) 102 print('SRCREV_%s_pn-%s%s = "%s"' % (name, pn, forcevariable, srcrev))
103 else: 103 else:
104 print('SRCREV_pn-%s%s = "%s"' % (pn, forcevariable, srcrev)) 104 print('SRCREV:pn-%s%s = "%s"' % (pn, forcevariable, srcrev))
105 105
106 106
107if __name__ == "__main__": 107if __name__ == "__main__":
diff --git a/scripts/crosstap b/scripts/crosstap
index 40856bc208..73c8947442 100755
--- a/scripts/crosstap
+++ b/scripts/crosstap
@@ -365,13 +365,13 @@ IMAGE_FSTYPES_DEBUGFS = "tar.bz2"
365USER_CLASSES += "image-combined-dbg" 365USER_CLASSES += "image-combined-dbg"
366 366
367# enables kernel debug symbols 367# enables kernel debug symbols
368KERNEL_EXTRA_FEATURES_append = " features/debug/debug-kernel.scc" 368KERNEL_EXTRA_FEATURES:append = " features/debug/debug-kernel.scc"
369 369
370# minimal, just run-time systemtap configuration in target image 370# minimal, just run-time systemtap configuration in target image
371PACKAGECONFIG_pn-systemtap = "monitor" 371PACKAGECONFIG:pn-systemtap = "monitor"
372 372
373# add systemtap run-time into target image if it is not there yet 373# add systemtap run-time into target image if it is not there yet
374IMAGE_INSTALL_append = " systemtap" 374IMAGE_INSTALL:append = " systemtap"
375""" 375"""
376 option_parser = optparse.OptionParser(usage=usage) 376 option_parser = optparse.OptionParser(usage=usage)
377 377
diff --git a/scripts/lib/devtool/build_image.py b/scripts/lib/devtool/build_image.py
index 9388abbacf..980f90ddd6 100644
--- a/scripts/lib/devtool/build_image.py
+++ b/scripts/lib/devtool/build_image.py
@@ -113,7 +113,7 @@ def build_image_task(config, basepath, workspace, image, add_packages=None, task
113 with open(appendfile, 'w') as afile: 113 with open(appendfile, 'w') as afile:
114 if packages: 114 if packages:
115 # include packages from workspace recipes into the image 115 # include packages from workspace recipes into the image
116 afile.write('IMAGE_INSTALL_append = " %s"\n' % ' '.join(packages)) 116 afile.write('IMAGE_INSTALL:append = " %s"\n' % ' '.join(packages))
117 if not task: 117 if not task:
118 logger.info('Building image %s with the following ' 118 logger.info('Building image %s with the following '
119 'additional packages: %s', image, ' '.join(packages)) 119 'additional packages: %s', image, ' '.join(packages))
diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py
index 3aa42a1466..ae3fc4caf9 100644
--- a/scripts/lib/devtool/sdk.py
+++ b/scripts/lib/devtool/sdk.py
@@ -207,7 +207,7 @@ def sdk_update(args, config, basepath, workspace):
207 if not sstate_mirrors: 207 if not sstate_mirrors:
208 with open(os.path.join(conf_dir, 'site.conf'), 'a') as f: 208 with open(os.path.join(conf_dir, 'site.conf'), 'a') as f:
209 f.write('SCONF_VERSION = "%s"\n' % site_conf_version) 209 f.write('SCONF_VERSION = "%s"\n' % site_conf_version)
210 f.write('SSTATE_MIRRORS_append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver) 210 f.write('SSTATE_MIRRORS:append = " file://.* %s/sstate-cache/PATH \\n "\n' % updateserver)
211 finally: 211 finally:
212 shutil.rmtree(tmpsdk_dir) 212 shutil.rmtree(tmpsdk_dir)
213 213
diff --git a/scripts/lib/devtool/search.py b/scripts/lib/devtool/search.py
index d24040df37..d81cdd876f 100644
--- a/scripts/lib/devtool/search.py
+++ b/scripts/lib/devtool/search.py
@@ -65,7 +65,7 @@ def search(args, config, basepath, workspace):
65 splitline = line.split(':', 1) 65 splitline = line.split(':', 1)
66 key = splitline[0] 66 key = splitline[0]
67 value = splitline[1].strip() 67 value = splitline[1].strip()
68 if key in ['PKG_%s' % pkg, 'DESCRIPTION', 'FILES_INFO'] or key.startswith('FILERPROVIDES_'): 68 if key in ['PKG:%s' % pkg, 'DESCRIPTION', 'FILES_INFO'] or key.startswith('FILERPROVIDES_'):
69 if keyword_rc.search(value): 69 if keyword_rc.search(value):
70 match = True 70 match = True
71 break 71 break
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 5eba2191d9..61f40da90f 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -254,13 +254,13 @@ def add(args, config, basepath, workspace):
254 f.write('\n# initial_rev: %s\n' % initial_rev) 254 f.write('\n# initial_rev: %s\n' % initial_rev)
255 255
256 if args.binary: 256 if args.binary:
257 f.write('do_install_append() {\n') 257 f.write('do_install:append() {\n')
258 f.write(' rm -rf ${D}/.git\n') 258 f.write(' rm -rf ${D}/.git\n')
259 f.write(' rm -f ${D}/singletask.lock\n') 259 f.write(' rm -f ${D}/singletask.lock\n')
260 f.write('}\n') 260 f.write('}\n')
261 261
262 if bb.data.inherits_class('npm', rd): 262 if bb.data.inherits_class('npm', rd):
263 f.write('python do_configure_append() {\n') 263 f.write('python do_configure:append() {\n')
264 f.write(' pkgdir = d.getVar("NPM_PACKAGE")\n') 264 f.write(' pkgdir = d.getVar("NPM_PACKAGE")\n')
265 f.write(' lockfile = os.path.join(pkgdir, "singletask.lock")\n') 265 f.write(' lockfile = os.path.join(pkgdir, "singletask.lock")\n')
266 f.write(' bb.utils.remove(lockfile)\n') 266 f.write(' bb.utils.remove(lockfile)\n')
@@ -936,20 +936,20 @@ def modify(args, config, basepath, workspace):
936 936
937 bb.utils.mkdirhier(os.path.dirname(appendfile)) 937 bb.utils.mkdirhier(os.path.dirname(appendfile))
938 with open(appendfile, 'w') as f: 938 with open(appendfile, 'w') as f:
939 f.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n') 939 f.write('FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n')
940 # Local files can be modified/tracked in separate subdir under srctree 940 # Local files can be modified/tracked in separate subdir under srctree
941 # Mostly useful for packages with S != WORKDIR 941 # Mostly useful for packages with S != WORKDIR
942 f.write('FILESPATH_prepend := "%s:"\n' % 942 f.write('FILESPATH:prepend := "%s:"\n' %
943 os.path.join(srctreebase, 'oe-local-files')) 943 os.path.join(srctreebase, 'oe-local-files'))
944 f.write('# srctreebase: %s\n' % srctreebase) 944 f.write('# srctreebase: %s\n' % srctreebase)
945 945
946 f.write('\ninherit externalsrc\n') 946 f.write('\ninherit externalsrc\n')
947 f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n') 947 f.write('# NOTE: We use pn- overrides here to avoid affecting multiple variants in the case where the recipe uses BBCLASSEXTEND\n')
948 f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree)) 948 f.write('EXTERNALSRC:pn-%s = "%s"\n' % (pn, srctree))
949 949
950 b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd) 950 b_is_s = use_external_build(args.same_dir, args.no_same_dir, rd)
951 if b_is_s: 951 if b_is_s:
952 f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree)) 952 f.write('EXTERNALSRC_BUILD:pn-%s = "%s"\n' % (pn, srctree))
953 953
954 if bb.data.inherits_class('kernel', rd): 954 if bb.data.inherits_class('kernel', rd):
955 f.write('SRCTREECOVEREDTASKS = "do_validate_branches do_kernel_checkout ' 955 f.write('SRCTREECOVEREDTASKS = "do_validate_branches do_kernel_checkout '
diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py
index da1456a01a..63362b4900 100644
--- a/scripts/lib/devtool/upgrade.py
+++ b/scripts/lib/devtool/upgrade.py
@@ -103,14 +103,14 @@ def _write_append(rc, srctree, same_dir, no_same_dir, rev, copied, workspace, d)
103 pn = d.getVar('PN') 103 pn = d.getVar('PN')
104 af = os.path.join(appendpath, '%s.bbappend' % brf) 104 af = os.path.join(appendpath, '%s.bbappend' % brf)
105 with open(af, 'w') as f: 105 with open(af, 'w') as f:
106 f.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n\n') 106 f.write('FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"\n\n')
107 f.write('inherit externalsrc\n') 107 f.write('inherit externalsrc\n')
108 f.write(('# NOTE: We use pn- overrides here to avoid affecting' 108 f.write(('# NOTE: We use pn- overrides here to avoid affecting'
109 'multiple variants in the case where the recipe uses BBCLASSEXTEND\n')) 109 'multiple variants in the case where the recipe uses BBCLASSEXTEND\n'))
110 f.write('EXTERNALSRC_pn-%s = "%s"\n' % (pn, srctree)) 110 f.write('EXTERNALSRC:pn-%s = "%s"\n' % (pn, srctree))
111 b_is_s = use_external_build(same_dir, no_same_dir, d) 111 b_is_s = use_external_build(same_dir, no_same_dir, d)
112 if b_is_s: 112 if b_is_s:
113 f.write('EXTERNALSRC_BUILD_pn-%s = "%s"\n' % (pn, srctree)) 113 f.write('EXTERNALSRC_BUILD:pn-%s = "%s"\n' % (pn, srctree))
114 f.write('\n') 114 f.write('\n')
115 if rev: 115 if rev:
116 f.write('# initial_rev: %s\n' % rev) 116 f.write('# initial_rev: %s\n' % rev)
diff --git a/scripts/lib/recipetool/append.py b/scripts/lib/recipetool/append.py
index e9d52bb67b..5f629c07d8 100644
--- a/scripts/lib/recipetool/append.py
+++ b/scripts/lib/recipetool/append.py
@@ -49,7 +49,7 @@ def find_target_file(targetpath, d, pkglist=None):
49 '/etc/group': '/etc/group should be managed through the useradd and extrausers classes', 49 '/etc/group': '/etc/group should be managed through the useradd and extrausers classes',
50 '/etc/shadow': '/etc/shadow should be managed through the useradd and extrausers classes', 50 '/etc/shadow': '/etc/shadow should be managed through the useradd and extrausers classes',
51 '/etc/gshadow': '/etc/gshadow should be managed through the useradd and extrausers classes', 51 '/etc/gshadow': '/etc/gshadow should be managed through the useradd and extrausers classes',
52 '${sysconfdir}/hostname': '${sysconfdir}/hostname contents should be set by setting hostname_pn-base-files = "value" in configuration',} 52 '${sysconfdir}/hostname': '${sysconfdir}/hostname contents should be set by setting hostname:pn-base-files = "value" in configuration',}
53 53
54 for pthspec, message in invalidtargets.items(): 54 for pthspec, message in invalidtargets.items():
55 if fnmatch.fnmatchcase(targetpath, d.expand(pthspec)): 55 if fnmatch.fnmatchcase(targetpath, d.expand(pthspec)):
@@ -79,7 +79,7 @@ def find_target_file(targetpath, d, pkglist=None):
79 for fullpth in dictval.keys(): 79 for fullpth in dictval.keys():
80 if fnmatch.fnmatchcase(fullpth, targetpath): 80 if fnmatch.fnmatchcase(fullpth, targetpath):
81 recipes[targetpath].append(pn) 81 recipes[targetpath].append(pn)
82 elif line.startswith('pkg_preinst_') or line.startswith('pkg_postinst_'): 82 elif line.startswith('pkg_preinst:') or line.startswith('pkg_postinst:'):
83 scriptval = line.split(':', 1)[1].strip().encode('utf-8').decode('unicode_escape') 83 scriptval = line.split(':', 1)[1].strip().encode('utf-8').decode('unicode_escape')
84 if 'update-alternatives --install %s ' % targetpath in scriptval: 84 if 'update-alternatives --install %s ' % targetpath in scriptval:
85 recipes[targetpath].append('?%s' % pn) 85 recipes[targetpath].append('?%s' % pn)
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 566c75369a..0ac97e02e9 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -710,7 +710,7 @@ def create_recipe(args):
710 lines_after.append('') 710 lines_after.append('')
711 711
712 if args.binary: 712 if args.binary:
713 lines_after.append('INSANE_SKIP_${PN} += "already-stripped"') 713 lines_after.append('INSANE_SKIP:${PN} += "already-stripped"')
714 lines_after.append('') 714 lines_after.append('')
715 715
716 if args.npm_dev: 716 if args.npm_dev:
@@ -1177,7 +1177,7 @@ def split_pkg_licenses(licvalues, packages, outlines, fallback_licenses=None, pn
1177 license = ' '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown' 1177 license = ' '.join(list(set(pkglicenses.get(pkgname, ['Unknown'])))) or 'Unknown'
1178 if license == 'Unknown' and pkgname in fallback_licenses: 1178 if license == 'Unknown' and pkgname in fallback_licenses:
1179 license = fallback_licenses[pkgname] 1179 license = fallback_licenses[pkgname]
1180 outlines.append('LICENSE_%s = "%s"' % (pkgname, license)) 1180 outlines.append('LICENSE:%s = "%s"' % (pkgname, license))
1181 outlicenses[pkgname] = license.split() 1181 outlicenses[pkgname] = license.split()
1182 return outlicenses 1182 return outlicenses
1183 1183
diff --git a/scripts/lib/recipetool/create_buildsys_python.py b/scripts/lib/recipetool/create_buildsys_python.py
index adfa377956..fdd3366038 100644
--- a/scripts/lib/recipetool/create_buildsys_python.py
+++ b/scripts/lib/recipetool/create_buildsys_python.py
@@ -45,9 +45,9 @@ class PythonRecipeHandler(RecipeHandler):
45 'Summary': 'SUMMARY', 45 'Summary': 'SUMMARY',
46 'Description': 'DESCRIPTION', 46 'Description': 'DESCRIPTION',
47 'License': 'LICENSE', 47 'License': 'LICENSE',
48 'Requires': 'RDEPENDS_${PN}', 48 'Requires': 'RDEPENDS:${PN}',
49 'Provides': 'RPROVIDES_${PN}', 49 'Provides': 'RPROVIDES:${PN}',
50 'Obsoletes': 'RREPLACES_${PN}', 50 'Obsoletes': 'RREPLACES:${PN}',
51 } 51 }
52 # PN/PV are already set by recipetool core & desc can be extremely long 52 # PN/PV are already set by recipetool core & desc can be extremely long
53 excluded_fields = [ 53 excluded_fields = [
@@ -301,7 +301,7 @@ class PythonRecipeHandler(RecipeHandler):
301 inst_req_deps = ('python3-' + r.replace('.', '-').lower() for r in sorted(inst_reqs)) 301 inst_req_deps = ('python3-' + r.replace('.', '-').lower() for r in sorted(inst_reqs))
302 lines_after.append('# WARNING: the following rdepends are from setuptools install_requires. These') 302 lines_after.append('# WARNING: the following rdepends are from setuptools install_requires. These')
303 lines_after.append('# upstream names may not correspond exactly to bitbake package names.') 303 lines_after.append('# upstream names may not correspond exactly to bitbake package names.')
304 lines_after.append('RDEPENDS_${{PN}} += "{}"'.format(' '.join(inst_req_deps))) 304 lines_after.append('RDEPENDS:${{PN}} += "{}"'.format(' '.join(inst_req_deps)))
305 305
306 if mapped_deps: 306 if mapped_deps:
307 name = info.get('Name') 307 name = info.get('Name')
@@ -313,7 +313,7 @@ class PythonRecipeHandler(RecipeHandler):
313 lines_after.append('') 313 lines_after.append('')
314 lines_after.append('# WARNING: the following rdepends are determined through basic analysis of the') 314 lines_after.append('# WARNING: the following rdepends are determined through basic analysis of the')
315 lines_after.append('# python sources, and might not be 100% accurate.') 315 lines_after.append('# python sources, and might not be 100% accurate.')
316 lines_after.append('RDEPENDS_${{PN}} += "{}"'.format(' '.join(sorted(mapped_deps)))) 316 lines_after.append('RDEPENDS:${{PN}} += "{}"'.format(' '.join(sorted(mapped_deps))))
317 317
318 unmapped_deps -= set(extensions) 318 unmapped_deps -= set(extensions)
319 unmapped_deps -= set(self.assume_provided) 319 unmapped_deps -= set(self.assume_provided)
diff --git a/scripts/lib/recipetool/create_kmod.py b/scripts/lib/recipetool/create_kmod.py
index 85b5c48e53..cc00106961 100644
--- a/scripts/lib/recipetool/create_kmod.py
+++ b/scripts/lib/recipetool/create_kmod.py
@@ -113,7 +113,7 @@ class KernelModuleRecipeHandler(RecipeHandler):
113 kdirpath, _ = check_target(compile_lines, install=False) 113 kdirpath, _ = check_target(compile_lines, install=False)
114 114
115 if manual_install or not install_lines: 115 if manual_install or not install_lines:
116 lines_after.append('EXTRA_OEMAKE_append_task-install = " -C ${STAGING_KERNEL_DIR} M=${S}"') 116 lines_after.append('EXTRA_OEMAKE:append:task-install = " -C ${STAGING_KERNEL_DIR} M=${S}"')
117 elif install_target and install_target != 'modules_install': 117 elif install_target and install_target != 'modules_install':
118 lines_after.append('MODULES_INSTALL_TARGET = "install"') 118 lines_after.append('MODULES_INSTALL_TARGET = "install"')
119 119
diff --git a/scripts/oe-check-sstate b/scripts/oe-check-sstate
index ca249ca67b..59bcb32a8c 100755
--- a/scripts/oe-check-sstate
+++ b/scripts/oe-check-sstate
@@ -47,8 +47,8 @@ def check(args):
47 try: 47 try:
48 env = os.environ.copy() 48 env = os.environ.copy()
49 if not args.same_tmpdir: 49 if not args.same_tmpdir:
50 env['BB_ENV_EXTRAWHITE'] = env.get('BB_ENV_EXTRAWHITE', '') + ' TMPDIR_forcevariable' 50 env['BB_ENV_EXTRAWHITE'] = env.get('BB_ENV_EXTRAWHITE', '') + ' TMPDIR:forcevariable'
51 env['TMPDIR_forcevariable'] = tmpdir 51 env['TMPDIR:forcevariable'] = tmpdir
52 52
53 try: 53 try:
54 output = subprocess.check_output( 54 output = subprocess.check_output(
diff --git a/scripts/oe-debuginfod b/scripts/oe-debuginfod
index 5560769888..9e5482d869 100755
--- a/scripts/oe-debuginfod
+++ b/scripts/oe-debuginfod
@@ -23,4 +23,4 @@ if __name__ == "__main__":
23 subprocess.call(['bitbake', '-c', 'addto_recipe_sysroot', 'elfutils-native']) 23 subprocess.call(['bitbake', '-c', 'addto_recipe_sysroot', 'elfutils-native'])
24 24
25 subprocess.call(['oe-run-native', 'elfutils-native', 'debuginfod', '--verbose', '-R', '-U', feed_dir]) 25 subprocess.call(['oe-run-native', 'elfutils-native', 'debuginfod', '--verbose', '-R', '-U', feed_dir])
26 print("\nTo use the debuginfod server please ensure that this variable PACKAGECONFIG_pn-elfutils-native = \"debuginfod libdebuginfod\" is set in the local.conf") 26 print("\nTo use the debuginfod server please ensure that this variable PACKAGECONFIG:pn-elfutils-native = \"debuginfod libdebuginfod\" is set in the local.conf")
diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util
index 75dd23efa3..94d44002ab 100755
--- a/scripts/oe-pkgdata-util
+++ b/scripts/oe-pkgdata-util
@@ -96,7 +96,7 @@ def glob(args):
96 pn = os.path.basename(pkgdata_file) 96 pn = os.path.basename(pkgdata_file)
97 with open(pkgdata_file, 'r') as f: 97 with open(pkgdata_file, 'r') as f:
98 for line in f: 98 for line in f:
99 if line.startswith("PKG_%s:" % pn): 99 if line.startswith("PKG:%s:" % pn):
100 renamed = line.split(': ')[1].rstrip() 100 renamed = line.split(': ')[1].rstrip()
101 return renamed 101 return renamed
102 102
@@ -213,7 +213,7 @@ def lookup_pkglist(pkgs, pkgdata_dir, reverse):
213 with open(pkgfile, 'r') as f: 213 with open(pkgfile, 'r') as f:
214 for line in f: 214 for line in f:
215 fields = line.rstrip().split(': ') 215 fields = line.rstrip().split(': ')
216 if fields[0] == 'PKG_%s' % pkg: 216 if fields[0] == 'PKG:%s' % pkg:
217 mappings[pkg].append(fields[1]) 217 mappings[pkg].append(fields[1])
218 break 218 break
219 return mappings 219 return mappings