recipetool: create: improve mapping for autotools program macros

Make the following improvements to mapping items specified in
AC_CHECK_PROG, AC_PATH_PROG and AX_WITH_PROG to recipes/classes:

* Produce a map of native recipe -> binary for all binaries currently in
  STAGING_BINDIR_NATIVE and use this when mapping items
* Add some more entries to the class map
* Ignore autotools binaries since they are covered by the inherit of
  autotools
* Ignore coreutils-native since that would almost always be a bogus
  dependency

(From OE-Core rev: 5614c5ae6a004d4367eccc34dd3cc7ee61fb7e57)

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-03-09 17:48:49 +13:00 committed by Richard Purdie
parent 1607fac521
commit 2b6a35212d
2 changed files with 50 additions and 8 deletions

View File

@ -1,6 +1,6 @@
# Recipe creation tool - create command plugin # Recipe creation tool - create command plugin
# #
# Copyright (C) 2014-2015 Intel Corporation # Copyright (C) 2014-2016 Intel Corporation
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as # it under the terms of the GNU General Public License version 2 as
@ -44,6 +44,7 @@ class RecipeHandler(object):
recipelibmap = {} recipelibmap = {}
recipeheadermap = {} recipeheadermap = {}
recipecmakefilemap = {} recipecmakefilemap = {}
recipebinmap = {}
@staticmethod @staticmethod
def load_libmap(d): def load_libmap(d):
@ -121,6 +122,23 @@ class RecipeHandler(object):
for fn in cmakefiles: for fn in cmakefiles:
RecipeHandler.recipecmakefilemap[fn] = pn RecipeHandler.recipecmakefilemap[fn] = pn
@staticmethod
def load_binmap(d):
'''Build up native binary->recipe mapping'''
if RecipeHandler.recipebinmap:
return
sstate_manifests = d.getVar('SSTATE_MANIFESTS', True)
staging_bindir_native = d.getVar('STAGING_BINDIR_NATIVE', True)
build_arch = d.getVar('BUILD_ARCH', True)
fileprefix = 'manifest-%s-' % build_arch
for fn in glob.glob(os.path.join(sstate_manifests, '%s*-native.populate_sysroot' % fileprefix)):
with open(fn, 'r') as f:
pn = os.path.basename(fn).rsplit('.', 1)[0][len(fileprefix):]
for line in f:
if line.startswith(staging_bindir_native):
prog = os.path.basename(line.rstrip())
RecipeHandler.recipebinmap[prog] = pn
@staticmethod @staticmethod
def checkfiles(path, speclist, recursive=False): def checkfiles(path, speclist, recursive=False):
results = [] results = []
@ -143,7 +161,7 @@ class RecipeHandler(object):
RecipeHandler.load_libmap(d) RecipeHandler.load_libmap(d)
ignorelibs = ['socket'] ignorelibs = ['socket']
ignoredeps = ['gcc-runtime', 'glibc', 'uclibc', 'musl', 'tar-native', 'binutils-native'] ignoredeps = ['gcc-runtime', 'glibc', 'uclibc', 'musl', 'tar-native', 'binutils-native', 'coreutils-native']
unmappedpc = [] unmappedpc = []
pcdeps = list(set(pcdeps)) pcdeps = list(set(pcdeps))

View File

@ -1,6 +1,6 @@
# Recipe creation tool - create command build system handlers # Recipe creation tool - create command build system handlers
# #
# Copyright (C) 2014 Intel Corporation # Copyright (C) 2014-2016 Intel Corporation
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as # it under the terms of the GNU General Public License version 2 as
@ -404,14 +404,34 @@ class AutotoolsRecipeHandler(RecipeHandler):
values = {} values = {}
inherits = [] inherits = []
# FIXME this mapping is very thin # Hardcoded map, we also use a dynamic one based on what's in the sysroot
progmap = {'flex': 'flex-native', progmap = {'flex': 'flex-native',
'bison': 'bison-native', 'bison': 'bison-native',
'm4': 'm4-native', 'm4': 'm4-native',
'tar': 'tar-native', 'tar': 'tar-native',
'ar': 'binutils-native'} 'ar': 'binutils-native',
'ranlib': 'binutils-native',
'ld': 'binutils-native',
'strip': 'binutils-native',
'libtool': '',
'autoconf': '',
'autoheader': '',
'automake': '',
'uname': '',
'rm': '',
'cp': '',
'mv': '',
'find': '',
'awk': '',
'sed': '',
}
progclassmap = {'gconftool-2': 'gconf', progclassmap = {'gconftool-2': 'gconf',
'pkg-config': 'pkgconfig'} 'pkg-config': 'pkgconfig',
'python': 'pythonnative',
'python3': 'python3native',
'perl': 'perlnative',
'makeinfo': 'texinfo',
}
pkg_re = re.compile('PKG_CHECK_MODULES\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*') pkg_re = re.compile('PKG_CHECK_MODULES\(\s*\[?[a-zA-Z0-9_]*\]?,\s*\[?([^,\]]*)\]?[),].*')
pkgce_re = re.compile('PKG_CHECK_EXISTS\(\s*\[?([^,\]]*)\]?[),].*') pkgce_re = re.compile('PKG_CHECK_EXISTS\(\s*\[?([^,\]]*)\]?[),].*')
@ -462,6 +482,8 @@ class AutotoolsRecipeHandler(RecipeHandler):
deps = [] deps = []
unmapped = [] unmapped = []
RecipeHandler.load_binmap(tinfoil.config_data)
def process_macro(keyword, value): def process_macro(keyword, value):
for handler in handlers: for handler in handlers:
if handler.process_macro(srctree, keyword, value, process_value, libdeps, pcdeps, deps, outlines, inherits, values): if handler.process_macro(srctree, keyword, value, process_value, libdeps, pcdeps, deps, outlines, inherits, values):
@ -498,10 +520,12 @@ class AutotoolsRecipeHandler(RecipeHandler):
if progclass: if progclass:
inherits.append(progclass) inherits.append(progclass)
else: else:
progdep = progmap.get(prog, None) progdep = RecipeHandler.recipebinmap.get(prog, None)
if not progdep:
progdep = progmap.get(prog, None)
if progdep: if progdep:
deps.append(progdep) deps.append(progdep)
else: elif progdep is None:
if not prog.startswith('$'): if not prog.startswith('$'):
unmapped.append(prog) unmapped.append(prog)
elif keyword == 'AC_CHECK_LIB': elif keyword == 'AC_CHECK_LIB':