[oe-commits] [openembedded-core] 17/22: devtool: provide support for devtool menuconfig command

git at git.openembedded.org git at git.openembedded.org
Tue Jul 16 11:18:38 UTC 2019

This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 417feb559a74b367315e8658d6ba868a4f8d1340
Author: Sai Hari Chandana Kalluri <chandana.kalluri at xilinx.com>
AuthorDate: Wed Jul 10 11:27:34 2019 -0700

    devtool: provide support for devtool menuconfig command
    All packages that support the menuconfig task will be able to run
    devtool menuconfig command. This would allow the user to modify the
    current configure options and create a config fragment which can be
    added to a recipe using devtool finish.
    1. The patch checks if devtool menuconfig command is called for a valid
    2. It checks for oe-local-files dir within source and creates one if
    needed, this directory is needed to store the final generated config
    fragment so that devtool finish can update the recipe.
    3. Menuconfig command is called for users to make necessary changes.
    After saving the changes, diffconfig command is run to generate the
    	devtool menuconfig <package name>
    	 Ex: devtool menuconfig linux-yocto
    The config fragment is saved as devtool-fragment.cfg within
    oe-local-files dir.
    Run devtool finish to update the recipe by appending the config fragment
    to SRC_URI and place a copy of the fragment within the layer where the
    recipe resides.
    	Ex: devtool finish linux-yocto meta
    [YOCTO #10416]
    Signed-off-by: Sai Hari Chandana Kalluri <chandana.kalluri at xilinx.com>
    Signed-off-by: Alejandro Enedino Hernandez Samaniego <alejandr at xilinx.com>
    Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
 scripts/lib/devtool/menuconfig.py | 79 +++++++++++++++++++++++++++++++++++++++
 scripts/lib/devtool/standard.py   |  5 +++
 2 files changed, 84 insertions(+)

diff --git a/scripts/lib/devtool/menuconfig.py b/scripts/lib/devtool/menuconfig.py
new file mode 100644
index 0000000..95384c5
--- /dev/null
+++ b/scripts/lib/devtool/menuconfig.py
@@ -0,0 +1,79 @@
+# OpenEmbedded Development tool - menuconfig command plugin
+# Copyright (C) 2018 Xilinx
+# Written by: Chandana Kalluri <ckalluri at xilinx.com>
+# 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
+# published by the Free Software Foundation.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# GNU General Public License for more details.
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+"""Devtool menuconfig plugin"""
+import os
+import bb
+import logging
+import argparse
+import re
+import glob
+from devtool import setup_tinfoil, parse_recipe, DevtoolError, standard, exec_build_env_command
+from devtool import check_workspace_recipe
+logger = logging.getLogger('devtool')
+def menuconfig(args, config, basepath, workspace):
+    """Entry point for the devtool 'menuconfig' subcommand"""
+    rd = ""
+    kconfigpath = ""
+    pn_src = ""
+    localfilesdir = ""
+    workspace_dir = ""
+    tinfoil = setup_tinfoil(basepath=basepath)
+    try:
+        rd = parse_recipe(config, tinfoil, args.component, appends=True, filter_workspace=False)
+        if not rd:
+            return 1
+        check_workspace_recipe(workspace, args.component)
+        pn = rd.getVar('PN', True)
+        if not rd.getVarFlag('do_menuconfig','task'):
+            raise DevtoolError("This recipe does not support menuconfig option")
+        workspace_dir = os.path.join(config.workspace_path,'sources')
+        kconfigpath = rd.getVar('B')
+        pn_src = os.path.join(workspace_dir,pn)
+        # add check to see if oe_local_files exists or not
+        localfilesdir = os.path.join(pn_src,'oe-local-files')
+        if not os.path.exists(localfilesdir):
+            bb.utils.mkdirhier(localfilesdir)
+            # Add gitignore to ensure source tree is clean
+            gitignorefile = os.path.join(localfilesdir,'.gitignore')
+            with open(gitignorefile, 'w') as f:
+                f.write('# Ignore local files, by default. Remove this file if you want to commit the directory to Git\n')
+                f.write('*\n')
+    finally:
+        tinfoil.shutdown()
+    logger.info('Launching menuconfig')
+    exec_build_env_command(config.init_path, basepath, 'bitbake -c menuconfig %s' % pn, watch=True)
+    fragment = os.path.join(localfilesdir, 'devtool-fragment.cfg')
+    res = standard._create_kconfig_diff(pn_src,rd,fragment)
+    return 0
+def register_commands(subparsers, context):
+    """register devtool subcommands from this plugin"""
+    parser_menuconfig = subparsers.add_parser('menuconfig',help='Alter build-time configuration for a recipe', description='Launches the make menuconfig command (for recipes where do_menuconfig is available), allowing users to make changes to the build-time configuration. Creates a config fragment corresponding to changes made.', group='advanced')
+    parser_menuconfig.add_argument('component', help='compenent to alter config')
+    parser_menuconfig.set_defaults(func=menuconfig,fixed_setup=context.fixed_setup)
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index 6661a21..96af488 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -938,6 +938,11 @@ def modify(args, config, basepath, workspace):
                         '    cp ${B}/.config ${S}/.config.baseline\n'
                         '    ln -sfT ${B}/.config ${S}/.config.new\n'
+            if rd.getVarFlag('do_menuconfig','task'):
+                f.write('\ndo_configure_append() {\n'
+                '    cp ${B}/.config ${S}/.config.baseline\n'
+                '    ln -sfT ${B}/.config ${S}/.config.new\n'
+                '}\n')
             if initial_rev:
                 f.write('\n# initial_rev: %s\n' % initial_rev)
                 for commit in commits:

To stop receiving notification emails like this one, please contact
the administrator of this repository.

More information about the Openembedded-commits mailing list