aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scripts/kconfig/streamline_config.pl115
1 files changed, 104 insertions, 11 deletions
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index ab4985f7af79..fcfcb302b0d7 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -420,7 +420,7 @@ my $repeat = 1;
420# to keep on. If A was on in the original config, B would not have been 420# to keep on. If A was on in the original config, B would not have been
421# and B would not be turned on by this script. 421# and B would not be turned on by this script.
422# 422#
423sub parse_config_dep_select 423sub parse_config_depends
424{ 424{
425 my ($p) = @_; 425 my ($p) = @_;
426 426
@@ -448,26 +448,119 @@ sub parse_config_dep_select
448 } 448 }
449} 449}
450 450
451while ($repeat) { 451# Select is treated a bit differently than depends. We call this
452 $repeat = 0; 452# when a config has no prompt and requires another config to be
453# selected. We use to just select all configs that selected this
454# config, but found that that can balloon into enabling hundreds
455# of configs that we do not care about.
456#
457# The idea is we look at all the configs that select it. If one
458# is already in our list of configs to enable, then there's nothing
459# else to do. If there isn't, we pick the first config that was
460# enabled in the orignal config and use that.
461sub parse_config_selects
462{
463 my ($config, $p) = @_;
453 464
454 foreach my $config (keys %configs) { 465 my $next_config;
455 $config =~ s/^CONFIG_//; 466
467 while ($p =~ /[$valid]/) {
468
469 if ($p =~ /^[^$valid]*([$valid]+)/) {
470 my $conf = "CONFIG_" . $1;
471
472 $p =~ s/^[^$valid]*[$valid]+//;
456 473
457 if (defined($depends{$config})) { 474 # Make sure that this config exists in the current .config file
458 # This config has dependencies. Make sure they are also included 475 if (!defined($orig_configs{$conf})) {
459 parse_config_dep_select $depends{$config}; 476 next;
477 }
478
479 # Check if something other than a module selects this config
480 if (defined($orig_configs{$conf}) && $orig_configs{$conf} ne "m") {
481 # we are good with this
482 return;
483 }
484 if (defined($configs{$conf})) {
485 # A set config selects this config, we are good
486 return;
487 }
488 # Set this config to be selected
489 if (!defined($next_config)) {
490 $next_config = $conf;
491 }
492 } else {
493 die "this should never happen";
460 } 494 }
495 }
461 496
462 if (defined($prompts{$config}) || !defined($selects{$config})) { 497 # If no possible config selected this, then something happened.
463 next; 498 if (!defined($next_config)) {
499 print STDERR "WARNING: $config is required, but nothing in the\n";
500 print STDERR " current config selects it.\n";
501 return;
502 }
503
504 # If we are here, then we found no config that is set and
505 # selects this config. Repeat.
506 $repeat = 1;
507 # Make this config need to be selected
508 $configs{$next_config} = 1;
509}
510
511my %process_selects;
512
513# loop through all configs, select their dependencies.
514sub loop_depend {
515 $repeat = 1;
516
517 while ($repeat) {
518 $repeat = 0;
519
520 forloop:
521 foreach my $config (keys %configs) {
522
523 # If this config is not a module, we do not need to process it
524 if (defined($orig_configs{$config}) && $orig_configs{$config} ne "m") {
525 next forloop;
526 }
527
528 $config =~ s/^CONFIG_//;
529
530 if (defined($depends{$config})) {
531 # This config has dependencies. Make sure they are also included
532 parse_config_depends $depends{$config};
533 }
534
535 # If the config has no prompt, then we need to check if a config
536 # that is enabled selected it. Or if we need to enable one.
537 if (!defined($prompts{$config}) && defined($selects{$config})) {
538 $process_selects{$config} = 1;
539 }
464 } 540 }
541 }
542}
543
544sub loop_select {
545
546 foreach my $config (keys %process_selects) {
547 $config =~ s/^CONFIG_//;
465 548
466 # config has no prompt and must be selected. 549 # config has no prompt and must be selected.
467 parse_config_dep_select $selects{$config}; 550 parse_config_selects $config, $selects{$config};
468 } 551 }
469} 552}
470 553
554while ($repeat) {
555 # Get the first set of configs and their dependencies.
556 loop_depend;
557
558 $repeat = 0;
559
560 # Now we need to see if we have to check selects;
561 loop_select;
562}
563
471my %setconfigs; 564my %setconfigs;
472 565
473# Finally, read the .config file and turn off any module enabled that 566# Finally, read the .config file and turn off any module enabled that