diff options
author | Thomas Martitz <kugel@rockbox.org> | 2014-01-13 23:06:28 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2014-03-03 15:14:15 +0100 |
commit | 20e114c1a0f086e432f374fe0ecebf014a571448 (patch) | |
tree | 3e515cef06f8210b4d5283be438294f608e7ceeb /wps | |
parent | 62524237f0055d2825d6cde90c49840404c57e30 (diff) | |
download | rockbox-20e114c1a0f086e432f374fe0ecebf014a571448.tar.gz rockbox-20e114c1a0f086e432f374fe0ecebf014a571448.zip |
wpsbuild: The setting strings can now contain an additional feature constraint.
The setting strings are now of the form setting[.resolution[&feature]]
(resolution can be a regex, .+ to match all resultions). wpsbuild.pl will
check against features.txt to see if the target meets it.
This can be used, for example, to add/override default settings for
touchscreen devices.
Change-Id: I2eafa02f10b362a8e7de8e1f3a53115e70d28084
Diffstat (limited to 'wps')
-rwxr-xr-x | wps/wpsbuild.pl | 74 |
1 files changed, 50 insertions, 24 deletions
diff --git a/wps/wpsbuild.pl b/wps/wpsbuild.pl index 35febe3bcb..d6d8085449 100755 --- a/wps/wpsbuild.pl +++ b/wps/wpsbuild.pl @@ -328,20 +328,46 @@ $has_remote = 1 if ($remote_height && $remote_width && $remote_depth); # check if line matches the setting string or if it contains a regex # that contains the targets resolution -sub check_res { +# +# the line can be of the from +# 1) setting: value (handled above) +# 2) setting.128x96x2: value +# 3) setting.128x96x2&touchscreen: value +# The resolution pattern can be a perl-comatible regex +sub check_res_feature { my ($line, $string, $remote) = @_; - if ($line =~ /^${string}: *(.*)/i) { + if ($line =~ /^$string: *(.*)/i) { return $1; } - elsif($line =~ /^${string}.(.*): *(.*)/i) { - # $1 is a resolution regex, $2 the filename incl. resolution + elsif($line =~ /^$string\.(.*): *(.*)/i) { + # $1 is a resolution/feature regex, $2 the filename incl. resolution + my $substr = $1; my $fn = $2; + my $feature; my $size_str = "${main_width}x${main_height}x${main_depth}"; if ($remote) { $size_str = "${remote_width}x${remote_height}x${remote_depth}"; } - if ($size_str =~ /$1$/) { - return $fn; + + # extract feature constraint, if any + if ($substr =~ /&([a-z0-9_]+)/) { + $feature = $1; + $substr =~ s/&$feature//; + } + + if ($size_str =~ /$substr$/) { + if ($feature) { + # check feature constrait + open(FEAT, "<apps/features"); + chomp(my @lines = <FEAT>); + close(FEAT); + my $matches = (grep { /$feature/ } @lines); + return $fn if $matches > 0; + } + else { + # no feature constraint + return $fn; + } } } return ""; @@ -452,22 +478,22 @@ while(<WPS>) { if ($l =~ /^ *<\/main>/i) { last; } - elsif($_ = check_res($l, "wps")) { + elsif($_ = check_res_feature($l, "wps")) { $wps = $_; } - elsif($_ = check_res($l, "sbs")) { + elsif($_ = check_res_feature($l, "sbs")) { $sbs = $_; } - elsif($_ = check_res($l, "fms")) { + elsif($_ = check_res_feature($l, "fms")) { $fms = $_; } - elsif($_ = check_res($l, "Font")) { + elsif($_ = check_res_feature($l, "Font")) { $font = $_; } - elsif($_ = check_res($l, "Statusbar")) { + elsif($_ = check_res_feature($l, "Statusbar")) { $statusbar = $_; } - elsif($_ = check_res($l, "Backdrop")) { + elsif($_ = check_res_feature($l, "Backdrop")) { $backdrop = $_; } elsif($l =~ /^Foreground Color: *(.*)/i) { @@ -482,13 +508,13 @@ while(<WPS>) { elsif($l =~ /^line selector end color: *(.*)/i) { $lineselectend = $1; } - elsif($_ = check_res($l, "selector type")) { + elsif($_ = check_res_feature($l, "selector type")) { $selecttype = $_; } - elsif($_ = check_res($l, "iconset")) { + elsif($_ = check_res_feature($l, "iconset")) { $iconset = $_; } - elsif($_ = check_res($l, "viewers iconset")) { + elsif($_ = check_res_feature($l, "viewers iconset")) { $viewericon = $_; } elsif($l =~ /^show icons: *(.*)/i) { @@ -500,7 +526,7 @@ while(<WPS>) { elsif($l =~ /^filetype colours: *(.*)/i) { $filetylecolor = $1; } - elsif($_ = check_res($l, "ui viewport")) { + elsif($_ = check_res_feature($l, "ui viewport")) { $listviewport = $_; } } @@ -515,28 +541,28 @@ while(<WPS>) { elsif(!$has_remote) { next; # dont parse <remote> section } - elsif($_ = check_res($l, "rwps", 1)) { + elsif($_ = check_res_feature($l, "rwps", 1)) { $rwps = $_; } - elsif($_ = check_res($l, "rsbs", 1)) { + elsif($_ = check_res_feature($l, "rsbs", 1)) { $rsbs = $_; } - elsif($_ = check_res($l, "rfms", 1)) { + elsif($_ = check_res_feature($l, "rfms", 1)) { $rfms = $_; } - elsif($_ = check_res($l, "Font", 1)) { + elsif($_ = check_res_feature($l, "Font", 1)) { $remotefont = $_; } - elsif($_ = check_res($l, "iconset", 1)) { + elsif($_ = check_res_feature($l, "iconset", 1)) { $remoteiconset = $_; } - elsif($_ = check_res($l, "viewers iconset", 1)) { + elsif($_ = check_res_feature($l, "viewers iconset", 1)) { $remoteviewericon = $_; } - elsif($_ = check_res($l, "statusbar", 1)) { + elsif($_ = check_res_feature($l, "statusbar", 1)) { $remotestatusbar = $_; } - elsif($_ = check_res($l, "ui viewport", 1)) { + elsif($_ = check_res_feature($l, "ui viewport", 1)) { $remotelistviewport = $_; } } |