From: Constantin Musca <constantinx.musca@intel.com>
To: bitbake-devel@lists.openembedded.org
Cc: Constantin Musca <constantinx.musca@intel.com>,
Constantin Musca <constantin.musca@gmail.com>
Subject: [PATCH] sanity.bbclass: bblayers.conf should be updated automatically
Date: Wed, 26 Sep 2012 09:49:38 +0300 [thread overview]
Message-ID: <1348642178-27405-2-git-send-email-constantinx.musca@intel.com> (raw)
In-Reply-To: <1348642178-27405-1-git-send-email-constantinx.musca@intel.com>
From: Constantin Musca <constantin.musca@gmail.com>
- add check_bblayers_conf bitbake function which does the bblayers.conf
v4 -> v5 update if necessary (every layer should make its specific
bblayers.conf upgrades appending to the check_bblayers_conf function)
- we ask the user to re-run bitbake because we can't trigger reparsing
without being invasive
[YOCTO #3082]
Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
---
meta/classes/sanity.bbclass | 56 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/meta/classes/sanity.bbclass b/meta/classes/sanity.bbclass
index 385d733..e25dcf5 100644
--- a/meta/classes/sanity.bbclass
+++ b/meta/classes/sanity.bbclass
@@ -4,6 +4,56 @@
SANITY_REQUIRED_UTILITIES ?= "patch diffstat makeinfo git bzip2 tar gzip gawk chrpath wget cpio"
+python check_bblayers_conf() {
+ bblayers_fn = os.path.join(d.getVar('TOPDIR', True), 'conf/bblayers.conf')
+
+ current_lconf = int(d.getVar('LCONF_VERSION', True))
+ if not current_lconf:
+ sys.exit()
+ lconf_version = int(d.getVar('LAYER_CONF_VERSION', True))
+ lines = []
+
+ import re
+ def find_line(pattern, lines):
+ return next(((index, line)
+ for index, line in enumerate(lines)
+ if re.search(pattern, line)), (None, None))
+
+ if current_lconf < 4:
+ sys.exit()
+
+ with open(bblayers_fn, 'r') as f:
+ lines = f.readlines()
+
+ if current_lconf == 4:
+ topdir_var = '$' + '{TOPDIR}'
+ index, bbpath_line = find_line('BBPATH', lines)
+ if bbpath_line:
+ start = bbpath_line.find('"')
+ if start != -1 and (len(bbpath_line) != (start + 1)):
+ if bbpath_line[start + 1] == '"':
+ lines[index] = (bbpath_line[:start + 1] +
+ topdir_var + bbpath_line[start + 1:])
+ else:
+ if not topdir_var in bbpath_line:
+ lines[index] = (bbpath_line[:start + 1] +
+ topdir_var + ':' + bbpath_line[start + 1:])
+ else:
+ sys.exit()
+ else:
+ index, bbfiles_line = find_line('BBFILES', lines)
+ if bbfiles_line:
+ lines.insert(index, 'BBPATH = "' + topdir_var + '"\n')
+ else:
+ sys.exit()
+
+ index, line = find_line('LCONF_VERSION', lines)
+ current_lconf += 1
+ lines[index] = 'LCONF_VERSION = "%d"\n' % current_lconf
+ with open(bblayers_fn, "w") as f:
+ f.write(''.join(lines))
+}
+
def raise_sanity_error(msg, d):
if d.getVar("SANITY_USE_EVENTS", True) == "1":
bb.event.fire(bb.event.SanityCheckFailed(msg), d)
@@ -337,7 +387,11 @@ def check_sanity(sanity_data):
current_lconf = sanity_data.getVar('LCONF_VERSION', True)
lconf_version = sanity_data.getVar('LAYER_CONF_VERSION', True)
if current_lconf != lconf_version:
- messages = messages + "Your version of bblayers.conf was generated from an older version of bblayers.conf.sample and there have been updates made to this file. Please compare the two files and merge any changes before continuing.\nMatching the version numbers will remove this message.\n\"meld conf/bblayers.conf ${COREBASE}/meta*/conf/bblayers.conf.sample\" is a good way to visualise the changes.\n"
+ try:
+ bb.build.exec_func("check_bblayers_conf", sanity_data)
+ messages = messages + "Your bblayers.conf has been updated. Please re-run."
+ except Exception:
+ messages = messages + "Your version of bblayers.conf was generated from an older version of bblayers.conf.sample and there have been updates made to this file. Please compare the two files and merge any changes before continuing.\nMatching the version numbers will remove this message.\n\"meld conf/bblayers.conf ${COREBASE}/meta*/conf/bblayers.conf.sample\" is a good way to visualise the changes.\n"
# If we have a site.conf, check it's valid
if check_conf_exists("conf/site.conf", sanity_data):
--
1.7.9.5
next prev parent reply other threads:[~2012-09-26 7:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-26 6:49 [PATCH] *** bblayers.conf should be updated automatically Constantin Musca
2012-09-26 6:49 ` Constantin Musca [this message]
2012-09-26 6:51 ` Constantin Musca
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1348642178-27405-2-git-send-email-constantinx.musca@intel.com \
--to=constantinx.musca@intel.com \
--cc=bitbake-devel@lists.openembedded.org \
--cc=constantin.musca@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox