X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fcheck-configs.pl;h=7a1e26f5230754488d27f57b27d339ae995a97cb;hb=39809ded547bdbb08207d3e514950425215b4410;hp=d4ec71990875cf965b69944cc773b60208411a95;hpb=aa75c7476aeaa84cf3abc192b376a8b03c325213;p=xscreensaver diff --git a/hacks/check-configs.pl b/hacks/check-configs.pl index d4ec7199..7a1e26f5 100755 --- a/hacks/check-configs.pl +++ b/hacks/check-configs.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2008-2016 Jamie Zawinski +# Copyright © 2008-2017 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -21,7 +21,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.21 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.25 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $debug_p = 0; @@ -204,6 +204,8 @@ sub parse_src($) { return (\%res_to_val, \%switch_to_res); } +my %video_dups; + # Returns a list of: # "resource = default value" # or "resource != non-default value" @@ -392,7 +394,7 @@ sub parse_xml($$$) { $res = $res2; $ctrl->{resource} = $res; - $ctrl->{convert} = 'invert' if ($val =~ m/false/i); + $ctrl->{convert} = 'invert' if ($val =~ m/off|false|no/i); $ctrl->{default} = ($ctrl->{convert} ? 'true' : 'false'); # $val = ($set ? "$res != $val" : "$res = $val"); @@ -427,6 +429,13 @@ sub parse_xml($$$) { # error ("$file: no video") unless $video; print STDERR "\n$file: WARNING: no video\n\n" unless $video; + if ($video && $video_dups{$video} && + $video_dups{$video} ne $saver_title) { + print STDERR "\n$file: WARNING: $saver_title: dup video with " . + $video_dups{$video} . "\n"; + } + $video_dups{$video} = $saver_title if ($video); + return ($saver_title, $gl_p, \@result, \@widgets); } @@ -687,7 +696,7 @@ sub build_android(@) { my (@savers) = @_; my $package = "org.jwz.xscreensaver"; - my $project_dir = "project/xscreensaver"; + my $project_dir = "xscreensaver"; my $xml_dir = "$project_dir/res/xml"; my $values_dir = "$project_dir/res/values"; my $java_dir = "$project_dir/src/org/jwz/xscreensaver/gen"; @@ -696,6 +705,11 @@ sub build_android(@) { my $xml_header = "\n"; my $manifest = ''; + my $daydream_java = ''; + my $settings_java = ''; + my $wallpaper_java = ''; + my $fntable_h2 = ''; + my $fntable_h3 = ''; my $arrays = ''; my $strings = ''; my %write_files; @@ -721,12 +735,9 @@ sub build_android(@) { my ($saver_title, $gl_p, $xml_opts, $widgets) = parse_xml ($saver, $switchmap, $src_opts); - my $daydream_class = "${saver_title}Daydream"; - my $settings_class = "${saver_title}Settings"; - foreach ($settings_class, $daydream_class) { - s/\s+//gs; - s/^([a-z])/\U$1/gs; # upcase first letter - } + my $saver_class = "${saver_title}"; + $saver_class =~ s/\s+//gs; + $saver_class =~ s/^([a-z])/\U$1/gs; # upcase first letter $saver_title =~ s/(.[a-z])([A-Z\d])/$1 $2/gs; # Spaces in InterCaps $saver_title =~ s/^(GL|RD)[- ]?(.)/$1 \U$2/gs; # Space after "GL" @@ -932,7 +943,7 @@ sub build_android(@) { " android:summary=\"" . $localize0->("${saver_underscore}_saver_desc", $daydream_desc) . "\"\n" . - " android:name=\".gen.$daydream_class\"\n" . + " android:name=\".gen.Daydream\$$saver_class\"\n" . " android:permission=\"android.permission" . ".BIND_DREAM_SERVICE\"\n" . " android:exported=\"true\"\n" . @@ -946,24 +957,67 @@ sub build_android(@) { " \n" . "\n" . - "\n" + "("${saver_underscore}_saver_title", + $saver_title) . + "\"\n" . + " android:summary=\"" . + $localize0->("${saver_underscore}_saver_desc", + $daydream_desc) . "\"\n" . + " android:name=\".gen.Wallpaper\$$saver_class\"\n" . + " android:permission=\"android.permission" . + ".BIND_WALLPAPER\">\n" . + " \n" . + " \n" . + " \n" . # TODO: Is the DEFAULT category needed? + " \n" . + " \n" . + "\n" . + "("${saver}_settings_title", $heading) . "\"\n" . + " android:name=\"$package.gen.Settings\$$saver_class\"\n" . + " android:exported=\"true\">\n" . + "\n" ); my $dream = ("\n"); + "$package.gen.Settings\$$saver_class\" />\n"); $write_files{"$xml_dir/${saver_underscore}_dream.xml"} = $dream; - $write_files{"$java_dir/$daydream_class.java"} = - read_template ("XScreenSaverDaydream.java.in", - { CLASS => $daydream_class, - API => ($gl_p ? 'GL' : 'XLIB') }); - - $write_files{"$java_dir/$settings_class.java"} = - read_template ("XScreenSaverSettings.java.in", - { CLASS => $settings_class }); + my $wallpaper = ("\n"); + $write_files{"$xml_dir/${saver_underscore}_wallpaper.xml"} = $wallpaper; + + $daydream_java .= + (" public static class $saver_class extends XScreenSaverDaydream {\n" . + " }\n" . + "\n"); + + $wallpaper_java .= + (" public static class $saver_class extends XScreenSaverWallpaper {\n" . + " }\n" . + "\n"); + + $settings_java .= + (" public static class $saver_class extends XScreenSaverSettings\n" . + " implements SharedPreferences.OnSharedPreferenceChangeListener {\n" . + " }\n" . + "\n"); + + $fntable_h2 .= ",\n " if $fntable_h2 ne ''; + $fntable_h3 .= ",\n " if $fntable_h3 ne ''; + + $fntable_h2 .= "${saver}_xscreensaver_function_table"; + $fntable_h3 .= "{\"${saver}\", &${saver}_xscreensaver_function_table, " . + 'API_' . ($gl_p ? 'GL' : 'XLIB') . '}'; } $arrays =~ s/^/ /gm; @@ -1001,6 +1055,30 @@ sub build_android(@) { " \n" . "\n"); + + $manifest .= ("\n" . + " \n" . + " \n" . + " \n" . + " \n" . + " \n" . + " \n" . + " \n" . + " \n" . + " \n" . + "\n"); + + + + # Android wants this to be an int my $versb = $vers; $versb =~ s/^(\d+)\.(\d+).*$/{ $1 * 10000 + $2 * 100 }/sex; @@ -1020,37 +1098,66 @@ sub build_android(@) { " \n" . + " \n" . + + " \n" . + " \n" . " \n" . " \n" . $manifest . " \n" . "\n"); + $daydream_java = ("package org.jwz.xscreensaver.gen;\n" . + "\n" . + "import org.jwz.xscreensaver.XScreenSaverDaydream;\n" . + "import org.jwz.xscreensaver.jwxyz;\n" . + "\n" . + "public class Daydream {\n" . + $daydream_java . + "}\n"); + + $wallpaper_java = ("package org.jwz.xscreensaver.gen;\n" . + "\n" . + "import org.jwz.xscreensaver.XScreenSaverWallpaper;\n" . + "import org.jwz.xscreensaver.jwxyz;\n" . + "\n" . + "public class Wallpaper {\n" . + $wallpaper_java . + "}\n"); + + $settings_java = ("package org.jwz.xscreensaver.gen;\n" . + "\n" . + "import android.content.SharedPreferences;\n" . + "import org.jwz.xscreensaver.XScreenSaverSettings;\n" . + "\n" . + "public class Settings {\n" . + $settings_java . + "}\n"); + $write_files{"$project_dir/AndroidManifest.xml"} = $manifest; $write_files{"$values_dir/settings.xml"} = $arrays; $write_files{"$values_dir/strings.xml"} = $strings; - - my @s2 = (); - foreach my $saver (sort @savers) { - push @s2, $saver unless ($saver =~ m/(-helper)$/); - } - my @s3 = @s2; - - foreach (@s2) { s/^(.*)$/${1}_xscreensaver_function_table/s; } - foreach (@s3) { s/^(.*)$/{"$1", &${1}_xscreensaver_function_table}/s; } + $write_files{"$java_dir/Daydream.java"} = $daydream_java; + $write_files{"$java_dir/Wallpaper.java"} = $wallpaper_java; + $write_files{"$java_dir/Settings.java"} = $settings_java; my $fntable_h = ("extern struct xscreensaver_function_table\n" . - " " . join(",\n ", @s2) . ";\n" . + " " . $fntable_h2 . ";\n" . "\n" . "static const struct function_table_entry" . " function_table[] = {\n" . - " " . join(",\n ", @s3) . "\n" . + " " . $fntable_h3 . "\n" . "};\n"); $write_files{"$gen_dir/function-table.h"} = $fntable_h; @@ -1080,18 +1187,21 @@ sub build_android(@) { # if a hack is removed from $ANDROID_HACKS in android/Makefile but # the old XML files remain behind, the build blows up. # - opendir (my $dirp, $xml_dir) || error ("$xml_dir: $!"); - my @files = readdir ($dirp); - closedir $dirp; - foreach my $f (sort @files) { - next if ($f eq '.' || $f eq '..'); - $f = "$xml_dir/$f"; - next if (defined ($write_files{$f})); - if ($f =~ m/_(settings|dream)\.xml$/s) { - print STDERR "$progname: rm $f\n"; - unlink ($f) unless ($debug_p); - } else { - print STDERR "$progname: warning: unrecognised file: $f\n"; + foreach my $dd ($xml_dir, $gen_dir, $java_dir) { + opendir (my $dirp, $dd) || error ("$dd: $!"); + my @files = readdir ($dirp); + closedir $dirp; + foreach my $f (sort @files) { + next if ($f eq '.' || $f eq '..'); + $f = "$dd/$f"; + next if (defined ($write_files{$f})); + if ($f =~ m/_(settings|wallpaper|dream)\.xml$/s || + $f =~ m/(Settings|Daydream)\.java$/s) { + print STDERR "$progname: rm $f\n"; + unlink ($f) unless ($debug_p); + } else { + print STDERR "$progname: warning: unrecognised file: $f\n"; + } } } }