summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Zanussi <tom.zanussi@intel.com>2013-03-11 22:36:44 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-17 23:10:28 +0000
commit8c9320cc922a165946ac557f0bda2e29ab794951 (patch)
treefa84332422b156ae252821b163ca5e6a2d74cb1e
parent5edc7af428cccfbf53780fc98ed1685b655f43d1 (diff)
downloadpoky-8c9320cc922a165946ac557f0bda2e29ab794951.tar.gz
yocto-kernel: add support for destroying recipe-space kernel features
Add a yocto-kernel command allowing users to destroy a recipe-space kernel feature local to a particular BSP. The removed feature is subsequently no longer available for the normal feature addition and removal yocto-kernel commands. (From meta-yocto rev: faa18f56d9412694f2c8e0b0c09e751cb7f3a743) Signed-off-by: Tom Zanussi <tom.zanussi@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--scripts/lib/bsp/help.py31
-rw-r--r--scripts/lib/bsp/kernel.py79
-rwxr-xr-xscripts/yocto-kernel23
3 files changed, 133 insertions, 0 deletions
diff --git a/scripts/lib/bsp/help.py b/scripts/lib/bsp/help.py
index d7c0360a7a..427b5a00e9 100644
--- a/scripts/lib/bsp/help.py
+++ b/scripts/lib/bsp/help.py
@@ -389,6 +389,7 @@ yocto_kernel_usage = """
389 features list List the features available to BSPs 389 features list List the features available to BSPs
390 feature describe Describe a particular feature 390 feature describe Describe a particular feature
391 feature create Create a new BSP-local feature 391 feature create Create a new BSP-local feature
392 feature destroy Remove a BSP-local feature
392 393
393 See 'yocto-kernel help COMMAND' for more information on a specific command. 394 See 'yocto-kernel help COMMAND' for more information on a specific command.
394 395
@@ -788,6 +789,36 @@ DESCRIPTION
788 (which for the time being can be one of: 'all' or 'board'). 789 (which for the time being can be one of: 'all' or 'board').
789""" 790"""
790 791
792
793yocto_kernel_feature_destroy_usage = """
794
795 Destroy a recipe-space kernel feature in a BSP
796
797 usage: yocto-kernel feature destroy <bsp-name> feature.scc
798
799 This command destroys a kernel feature defined in the specified BSP's
800 recipe-space kernel definition.
801"""
802
803
804yocto_kernel_feature_destroy_help = """
805
806NAME
807 yocto-kernel feature destroy <bsp-name> feature.scc - destroy a
808 recipe-space kernel feature in a BSP
809
810SYNOPSIS
811 yocto-kernel feature destroy <bsp-name> feature.scc
812
813DESCRIPTION
814 This command destroys a kernel feature defined in the specified
815 BSP's recipe-space kernel definition. The named feature must end
816 with .scc and must not contain a feature directory to contain the
817 feature (this will be determined automatically). If the kernel
818 feature is in use by a BSP, it can't be removed until the BSP
819 stops using it (see yocto-kernel feature rm to stop using it).
820"""
821
791## 822##
792# yocto-layer help and usage strings 823# yocto-layer help and usage strings
793## 824##
diff --git a/scripts/lib/bsp/kernel.py b/scripts/lib/bsp/kernel.py
index ac6861e14b..fc1e6bdd08 100644
--- a/scripts/lib/bsp/kernel.py
+++ b/scripts/lib/bsp/kernel.py
@@ -910,6 +910,85 @@ def yocto_kernel_feature_create(scripts_path, machine, feature_items):
910 print "\t%s" % feature_dirname + "/" + feature 910 print "\t%s" % feature_dirname + "/" + feature
911 911
912 912
913def feature_in_use(scripts_path, machine, feature):
914 """
915 Determine whether the specified feature is in use by the BSP.
916 Return True if so, False otherwise.
917 """
918 features = read_features(scripts_path, machine)
919 for f in features:
920 if f == feature:
921 return True
922 return False
923
924
925def feature_remove(scripts_path, machine, feature):
926 """
927 Remove the specified feature from the available recipe-space
928 features defined for the BSP.
929 """
930 features = read_features(scripts_path, machine)
931 new_features = []
932 for f in features:
933 if f == feature:
934 continue
935 new_features.append(f)
936 write_features(scripts_path, machine, new_features)
937
938
939def yocto_kernel_feature_destroy(scripts_path, machine, feature):
940 """
941 Remove a recipe-space kernel feature from a BSP.
942 """
943 if not check_feature_name(feature):
944 sys.exit(1)
945
946 if feature_in_use(scripts_path, machine, "features/" + feature) or \
947 feature_in_use(scripts_path, machine, "cfg/" + feature):
948 print "Feature %s is in use (use 'feature rm' to un-use it first), exiting" % feature
949 sys.exit(1)
950
951 filesdir = find_filesdir(scripts_path, machine)
952 if not filesdir:
953 print "Couldn't destroy feature (%s), no 'files' dir found" % feature
954 sys.exit(1)
955
956 feature_dirname = "features"
957 featdir = os.path.join(filesdir, feature_dirname)
958 if not os.path.exists(featdir):
959 print "Couldn't find feature directory (%s)" % feature_dirname
960 sys.exit(1)
961
962 feature_fqn = os.path.join(featdir, feature)
963 if not os.path.exists(feature_fqn):
964 feature_dirname = "cfg"
965 featdir = os.path.join(filesdir, feature_dirname)
966 if not os.path.exists(featdir):
967 print "Couldn't find feature directory (%s)" % feature_dirname
968 sys.exit(1)
969 feature_fqn = os.path.join(featdir, feature_filename)
970 if not os.path.exists(feature_fqn):
971 print "Couldn't find feature (%s)" % feature
972 sys.exit(1)
973
974 f = open(feature_fqn, "r")
975 lines = f.readlines()
976 for line in lines:
977 s = line.strip()
978 if s.startswith("patch ") or s.startswith("kconf "):
979 split_line = s.split()
980 filename = os.path.join(featdir, split_line[-1])
981 if os.path.exists(filename):
982 os.remove(filename)
983 f.close()
984 os.remove(feature_fqn)
985
986 feature_remove(scripts_path, machine, feature)
987
988 print "Removed feature:"
989 print "\t%s" % feature_dirname + "/" + feature
990
991
913def base_branches(context): 992def base_branches(context):
914 """ 993 """
915 Return a list of the base branches found in the kernel git repo. 994 Return a list of the base branches found in the kernel git repo.
diff --git a/scripts/yocto-kernel b/scripts/yocto-kernel
index 69fe344d8d..c9b2821e00 100755
--- a/scripts/yocto-kernel
+++ b/scripts/yocto-kernel
@@ -287,6 +287,26 @@ def yocto_kernel_feature_create_subcommand(args, usage_str):
287 yocto_kernel_feature_create(scripts_path, machine, args) 287 yocto_kernel_feature_create(scripts_path, machine, args)
288 288
289 289
290def yocto_kernel_feature_destroy_subcommand(args, usage_str):
291 """
292 Command-line handling for removing a recipe-space kernel feature
293 from a BSP. The real work is done by
294 bsp.kernel.yocto_kernel_feature_destroy().
295 """
296 logging.debug("yocto_kernel_feature_destroy_subcommand")
297
298 parser = optparse.OptionParser(usage = usage_str)
299
300 (options, args) = parser.parse_args(args)
301
302 if len(args) != 2:
303 logging.error("Wrong number of arguments, exiting\n")
304 parser.print_help()
305 sys.exit(1)
306
307 yocto_kernel_feature_destroy(scripts_path, args[0], args[1])
308
309
290subcommands = { 310subcommands = {
291 "config-list": [yocto_kernel_config_list_subcommand, 311 "config-list": [yocto_kernel_config_list_subcommand,
292 yocto_kernel_config_list_usage, 312 yocto_kernel_config_list_usage,
@@ -324,6 +344,9 @@ subcommands = {
324 "feature-create": [yocto_kernel_feature_create_subcommand, 344 "feature-create": [yocto_kernel_feature_create_subcommand,
325 yocto_kernel_feature_create_usage, 345 yocto_kernel_feature_create_usage,
326 yocto_kernel_feature_create_help], 346 yocto_kernel_feature_create_help],
347 "feature-destroy": [yocto_kernel_feature_destroy_subcommand,
348 yocto_kernel_feature_destroy_usage,
349 yocto_kernel_feature_destroy_help],
327} 350}
328 351
329 352