diff options
| -rw-r--r-- | scripts/lib/bsp/help.py | 31 | ||||
| -rw-r--r-- | scripts/lib/bsp/kernel.py | 79 | ||||
| -rwxr-xr-x | scripts/yocto-kernel | 23 |
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 | |||
| 793 | yocto_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 | |||
| 804 | yocto_kernel_feature_destroy_help = """ | ||
| 805 | |||
| 806 | NAME | ||
| 807 | yocto-kernel feature destroy <bsp-name> feature.scc - destroy a | ||
| 808 | recipe-space kernel feature in a BSP | ||
| 809 | |||
| 810 | SYNOPSIS | ||
| 811 | yocto-kernel feature destroy <bsp-name> feature.scc | ||
| 812 | |||
| 813 | DESCRIPTION | ||
| 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 | ||
| 913 | def 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 | |||
| 925 | def 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 | |||
| 939 | def 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 | |||
| 913 | def base_branches(context): | 992 | def 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 | ||
| 290 | def 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 | |||
| 290 | subcommands = { | 310 | subcommands = { |
| 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 | ||
