mirror of https://github.com/schoebel/mars
159 lines
3.5 KiB
Perl
Executable File
159 lines
3.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use 5.010;
|
|
|
|
use Data::Dumper;
|
|
|
|
my $DEBUG = 0;
|
|
|
|
##
|
|
## Parse Kconfig from STDIN
|
|
##
|
|
|
|
my $option;
|
|
my $type;
|
|
my $depends;
|
|
my $value;
|
|
my @default;
|
|
my %setByEnv;
|
|
|
|
while (my $line = <STDIN>) {
|
|
if ($line =~ /^config\s+(\w+)\W*$/) {
|
|
$option = $1;
|
|
$setByEnv{$option} = $ENV{$option} if exists $ENV{$option};
|
|
printf STDERR "OPTION: %s\n", $option if $DEBUG;
|
|
printf STDERR "--> ENV: %s='%s'\n", $option, $setByEnv{$option} if $DEBUG && exists $ENV{$option};
|
|
}
|
|
elsif ($line =~ /^\s+(tristate|bool|int|string)\s+.*$/) {
|
|
$type = $1;
|
|
printf STDERR "--> TYPE: %s\n", $type if $DEBUG;
|
|
}
|
|
elsif ($line =~/^\s+depends\s+on\s+(.*)$/) {
|
|
$depends = ($option ne 'MARS') ? $1 : '';
|
|
printf STDERR "--> DEPENDS: %s\n", $depends if $DEBUG;
|
|
}
|
|
elsif ($line =~ /^\s+default\s+(.*)$/) {
|
|
if ($option eq 'MARS') {
|
|
$value = 'y';
|
|
printf STDERR "--> DEFAULT: y (OVERRIDDEN by script)\n" if $DEBUG;
|
|
}
|
|
else {
|
|
$value = $1;
|
|
printf STDERR "--> DEFAULT: %s\n", $value if $DEBUG;
|
|
}
|
|
push @default, {
|
|
option => $option,
|
|
type => $type,
|
|
depends => $depends,
|
|
value => $value,
|
|
} if $option;
|
|
}
|
|
elsif ($line =~ /^\s+---help---\s+$/) {
|
|
# ignore lines after this by unsetting $option
|
|
undef $option;
|
|
# Kconfig syntax allows to have directives after the help section,
|
|
# but we do not use this freedom here, for simplicity.
|
|
}
|
|
}
|
|
|
|
print STDERR Dumper(\@default) if $DEBUG >= 2;
|
|
|
|
|
|
##
|
|
## Print the header
|
|
##
|
|
|
|
print qq%
|
|
#ifndef MARS_CONFIG_H
|
|
#define MARS_CONFIG_H
|
|
|
|
/*
|
|
* Module default settings from Kconfig
|
|
*
|
|
* If the module is built as an external module, this file provides
|
|
* reasonable default settings for configuration variables CONFIG_*.
|
|
* The defaults are extracted from Kconfig. If you want to change a
|
|
* setting, please edit Kconfig directly and regenerate this file.
|
|
*
|
|
* This file was auto-generated with $0
|
|
* -- DO NOT EDIT MANUALLY --
|
|
*/
|
|
|
|
#ifndef CONFIG_MARS_HAVE_BIGMODULE
|
|
#define CONFIG_MARS_HAVE_BIGMODULE
|
|
#endif
|
|
%;
|
|
|
|
##
|
|
## Print option defaults
|
|
##
|
|
|
|
foreach my $opt (@default) {
|
|
|
|
my $optname = $opt->{option};
|
|
my $optval = $opt->{value};
|
|
|
|
if (exists $setByEnv{$optname}) {
|
|
print qq%
|
|
/* CONFIG_$optname overridden by ENVIRONMENT */%;
|
|
$optval = $setByEnv{$optname};
|
|
$opt->{value} = $optval;
|
|
}
|
|
|
|
if (!defined($optname) || !defined($optval)) {
|
|
printf(STDERR "SKIPPED option due to missing parameters: optname=%s optval=%s\n",
|
|
$optname||'', $optval||'');
|
|
next;
|
|
}
|
|
|
|
if ($opt->{depends}) {
|
|
my @deps = grep { $_->{option} eq $opt->{depends} } @default;
|
|
if (scalar @deps && $deps[0]->{value} eq 'n') {
|
|
print qq%
|
|
/* CONFIG_$optname is unset (depends on $deps[0]->{option}, which is unset) */
|
|
%;
|
|
next;
|
|
}
|
|
}
|
|
|
|
given ($opt->{type}) {
|
|
|
|
when ('tristate') {
|
|
# ignore tristate
|
|
}
|
|
|
|
when ('bool') {
|
|
if ($optval eq 'n') {
|
|
print qq%
|
|
/* CONFIG_$optname is unset */
|
|
%;
|
|
}
|
|
else {
|
|
print qq%
|
|
#ifndef CONFIG_$optname
|
|
#define CONFIG_$optname 1
|
|
#endif
|
|
%;
|
|
}
|
|
}
|
|
|
|
when (['int', 'string']) {
|
|
print qq%
|
|
#ifndef CONFIG_$optname
|
|
#define CONFIG_$optname $optval
|
|
#endif
|
|
%;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
print qq%
|
|
|
|
#endif /* MARS_CONFIG_H */
|
|
%;
|