recipetool: create: support extracting SUMMARY and HOMEPAGE

Allow plugins to set any variable value through the extravalues dict,
and use this to support extracting SUMMARY and HOMEPAGE values from spec
files included with the source; additionally translate "License:" to a
comment next to the LICENSE field (we have our own logic for setting
LICENSE, but it will often be useful to see what the spec file says if
one is present).

Also use the same mechanism for setting the same variables for node.js
modules; this was already supported but wasn't inserting the settings in
the appropriate place in the file which this will now do.

(From OE-Core rev: 91fc35ff5e89aa6d4c4ad945e45406fb4f71018e)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2016-05-30 10:20:59 +12:00 committed by Richard Purdie
parent c056dad62c
commit 2b510f5e01
3 changed files with 54 additions and 36 deletions

View File

@ -331,6 +331,7 @@ def create_recipe(args):
import bb.process
import tempfile
import shutil
import oe.recipeutils
pkgarch = ""
if args.machine:
@ -429,7 +430,8 @@ def create_recipe(args):
lines_before.append('# Recipe created by %s' % os.path.basename(sys.argv[0]))
lines_before.append('# This is the basis of a recipe and may need further editing in order to be fully functional.')
lines_before.append('# (Feel free to remove these comments when editing.)')
lines_before.append('#')
# We need a blank line here so that patch_recipe_lines can rewind before the LICENSE comments
lines_before.append('')
licvalues = guess_license(srctree_use)
lic_files_chksum = []
@ -561,28 +563,28 @@ def create_recipe(args):
handler.process(srctree_use, classes, lines_before, lines_after, handled, extravalues)
extrafiles = extravalues.pop('extrafiles', {})
extra_pn = extravalues.pop('PN', None)
extra_pv = extravalues.pop('PV', None)
if not realpv:
realpv = extravalues.get('PV', None)
if realpv:
if not validate_pv(realpv):
realpv = None
else:
realpv = realpv.lower().split()[0]
if '_' in realpv:
realpv = realpv.replace('_', '-')
if not pn:
pn = extravalues.get('PN', None)
if pn:
if pn.startswith('GNU '):
pn = pn[4:]
if ' ' in pn:
# Probably a descriptive identifier rather than a proper name
pn = None
else:
pn = pn.lower()
if '_' in pn:
pn = pn.replace('_', '-')
if extra_pv and not realpv:
realpv = extra_pv
if not validate_pv(realpv):
realpv = None
else:
realpv = realpv.lower().split()[0]
if '_' in realpv:
realpv = realpv.replace('_', '-')
if extra_pn and not pn:
pn = extra_pn
if pn.startswith('GNU '):
pn = pn[4:]
if ' ' in pn:
# Probably a descriptive identifier rather than a proper name
pn = None
else:
pn = pn.lower()
if '_' in pn:
pn = pn.replace('_', '-')
if not outfile:
if not pn:
@ -662,6 +664,9 @@ def create_recipe(args):
outlines.append('')
outlines.extend(lines_after)
if extravalues:
_, outlines = oe.recipeutils.patch_recipe_lines(outlines, extravalues, trailing_newline=False)
if args.extract_to:
scriptutils.git_convert_standalone_clone(srctree)
if os.path.isdir(args.extract_to):

View File

@ -830,22 +830,35 @@ class SpecFileRecipeHandler(RecipeHandler):
if 'PV' in extravalues and 'PN' in extravalues:
return
filelist = RecipeHandler.checkfiles(srctree, ['*.spec'], recursive=True)
pn = None
pv = None
valuemap = {'Name': 'PN',
'Version': 'PV',
'Summary': 'SUMMARY',
'Url': 'HOMEPAGE',
'License': 'LICENSE'}
foundvalues = {}
for fileitem in filelist:
linecount = 0
with open(fileitem, 'r') as f:
for line in f:
if line.startswith('Name:') and not pn:
pn = line.split(':')[1].strip()
if line.startswith('Version:') and not pv:
pv = line.split(':')[1].strip()
if pv or pn:
if pv and not 'PV' in extravalues and validate_pv(pv):
extravalues['PV'] = pv
if pn and not 'PN' in extravalues:
extravalues['PN'] = pn
break
for value, varname in valuemap.iteritems():
if line.startswith(value + ':') and not varname in foundvalues:
foundvalues[varname] = line.split(':', 1)[1].strip()
break
if len(foundvalues) == len(valuemap):
break
if 'PV' in foundvalues:
if not validate_pv(foundvalues['PV']):
del foundvalues['PV']
license = foundvalues.pop('LICENSE', None)
if license:
liccomment = '# NOTE: spec file indicates the license may be "%s"' % license
for i, line in enumerate(lines_before):
if line.startswith('LICENSE ='):
lines_before.insert(i, liccomment)
break
else:
lines_before.append(liccomment)
extravalues.update(foundvalues)
def register_recipe_handlers(handlers):
# Set priorities with some gaps so that other plugins can insert

View File

@ -104,9 +104,9 @@ class NpmRecipeHandler(RecipeHandler):
classes.append('npm')
handled.append('buildsystem')
if 'description' in data:
lines_before.append('SUMMARY = "%s"' % data['description'])
extravalues['SUMMARY'] = data['description']
if 'homepage' in data:
lines_before.append('HOMEPAGE = "%s"' % data['homepage'])
extravalues['HOMEPAGE'] = data['homepage']
# Shrinkwrap
localfilesdir = tempfile.mkdtemp(prefix='recipetool-npm')