source: subversion/applications/rendering/tahNG/development/tahconfig.pm @ 29825

Last change on this file since 29825 was 7696, checked in by deelkar, 12 years ago

workaround: orp cannot work with relative working directory paths

File size: 8.5 KB
Line 
1use strict; 
2
3#--------------------------------------------------------------------------
4# Any application-specific knowledge regarding config file options
5# e.g. correct common errors in config files, or enforce naming conventions
6#--------------------------------------------------------------------------
7sub ApplyConfigLogic
8{
9    #my $Config = shift();
10    my $Config = $main::Config;
11
12    if (!defined($Config->get("Layers")))
13    {
14        die("no layers configured");
15    }
16
17    # check layer configuration and if not present, use sensible defaults
18    foreach my $layer(split(/,/, $Config->get("Layers")))
19    {
20
21        if (!defined($Config->get($layer."_Prefix")))
22        {
23            die($layer.": Prefix not configured");
24        }
25
26        if (!defined($Config->get($layer."_Preprocessor")))
27        {
28            die($layer.": Preprocessor not configured");
29        }
30
31        if (!defined($Config->get($layer."_Transparent")))
32        {
33            die($layer.": Transparent not configured");
34        }
35
36        if (!defined($Config->get($layer."_RenderFullTileset")))
37        {
38            die($layer.": RenderFullTileset not configured");
39        }
40    }
41
42    ## switch on verbose mode if Debug is set
43    if ($Config->get("Debug"))
44    {
45        $Config->set("Verbose",1);
46    }
47
48    if ($Config->get("WorkingDirectory"))
49    {
50        $Config->set("WorkingDirectory",File::Spec->rel2abs($Config->get("WorkingDirectory")));
51    }
52
53    if (($Config->get("WorkingDirectory") !~ /\/$/) and ("MSWin32" ne $^O))
54    {
55        $Config->set("WorkingDirectory",$Config->get("WorkingDirectory") . "/");
56    }
57    elsif (($Config->get("WorkingDirectory") !~ /\\$/) and ("MSWin32" eq $^O))
58    {
59        $Config->set("WorkingDirectory",$Config->get("WorkingDirectory") . "\\");
60    }
61
62}
63
64#--------------------------------------------------------------------------
65# Checks a tiles@home configuration
66#--------------------------------------------------------------------------
67sub CheckConfig
68{
69    my $Config = shift();
70    my %EnvironmentInfo;
71    my $cmd;
72    printf "- Using working directory %s\n", $Config->get("WorkingDirectory");
73
74    if ($Config->get("Batik"))
75    {
76        print "- Using Batik";
77        if ($Config->get("Batik") == 1)
78        {
79            print " in jar mode";
80        }
81        if ($Config->get("Batik") == 2)
82        {
83            print " in wrapper mode";
84        }
85        print "\n";
86    }
87    else
88    {
89        # Inkscape version
90        $cmd=$Config->get("Inkscape");
91        my $InkscapeV = `\"$cmd\" --version`;
92        $EnvironmentInfo{"Inkscape"}=$InkscapeV;
93 
94        if($InkscapeV !~ /Inkscape (\d+)\.(\d+\.?\d*)/)
95        {
96            die("Can't find inkscape (using \"".$Config->get("Inkscape")."\")\n");
97        }
98   
99        if($2 < 42.0){
100            die("This version of inkscape ($1.$2) is known not to work with tiles\@home\n");
101        }
102        if($2 < 45.1){
103            print "* Please upgrade to inkscape 0.45.1 due to security problems with your inkscape version:\n"
104        }
105        print "- Inkscape version $1.$2\n";
106    }
107
108    # Rendering through Omsarender/XSLT or or/p
109    if ($Config->get("Osmarender") eq "XSLT")
110    {
111        print "- rendering using Osmarender/XSLT\n";
112        die "! Can't find osmarender/osmarender.xsl" unless (-f "osmarender/osmarender.xsl");
113
114        # XmlStarlet version
115        $cmd=$Config->get("XmlStarlet");
116        my $XmlV = `\"$cmd\" --version`;
117        $EnvironmentInfo{Xml}=$XmlV;
118
119        if($XmlV !~ /(\d+\.\d+\.\d+)/) {
120            die("Can't find xmlstarlet (using \"".$Config->{"XmlStarlet"}."\")\n");
121        }
122        print "- xmlstarlet version $1\n";
123    }
124    elsif ($Config->get("Osmarender") eq "orp")
125    {
126        print "- rendering using or/p\n";
127        die "! Can't find orp/orp.pl" unless (-f "orp/orp.pl");
128    }
129    else
130    {
131        die "! invalid configuration setting for 'Osmarender' - allowed values are 'XSLT', 'orp'";
132    }
133
134    # Zip version
135    $cmd=$Config->get("Zip");
136    my $ZipV = `\"$cmd\" -v`;
137    $EnvironmentInfo{Zip}=$ZipV;
138
139    if ($ZipV eq "") 
140    {
141        die("! Can't find zip (using \"".$Config->get("Zip")."\")\n");
142    }
143    print "- zip is present\n";
144
145    # check a correct pngoptimizer is set
146    if ( ! (($Config->get("PngOptimizer") eq "pngcrush") or ($Config->get("PngOptimizer") eq "optipng")))
147    {
148        die("! Can't find valid PngOptimizer setting, check config");
149    }
150    print "going to use ".$Config->get("PngOptimizer")."\n";
151   
152    # PNGCrush version
153    $cmd=$Config->get("Pngcrush");
154    my $PngcrushV = `\"$cmd\" -version`;
155    $EnvironmentInfo{Pngcrush}=$PngcrushV;
156
157    if (($PngcrushV !~ /[Pp]ngcrush\s+(\d+\.\d+\.?\d*)/) and ($Config->get("PngOptimizer") eq "pngcrush"))
158    {
159        # die here if pngcrush shall be mandatory
160        print "Can't find pngcrush (using \"".$Config->get("Pngcrush")."\")\n";
161    }
162    else
163    {
164        print "- Pngcrush version $1\n";
165    }
166
167    # Optipng version
168    $cmd=$Config->get("Optipng");
169    my $OptipngV = `\"$cmd\" -v`;
170    $EnvironmentInfo{Pngcrush}=$OptipngV;
171
172    if (($OptipngV !~ /[Oo]pti[Pp][Nn][Gg]\s+(\d+\.\d+\.?\d*)/) and ($Config->get("PngOptimizer") eq "optipng"))
173    {
174        # die here if optipng shall be mandatory
175        print "Can't find OptiPNG (using \"".$Config->get("Optipng")."\")\n";
176    }
177    else
178    {
179        print "- OptiPNG version $1\n";
180    }
181
182    if ($Config->get("LocalSlippymap"))
183    {
184        print "- Writing LOCAL slippy map directory hierarchy, no uploading\n";
185    }
186    else
187    {
188        # Upload URL, username
189        printf "- Uploading with username \"".$Config->get("UploadUsername")."\"\n", ;
190        my $pw = $Config->get("UploadPassword");
191        if($pw =~ /\W/){
192            die("Check your upload password\n");
193        }
194
195        if( ($Config->get("UploadChunkSize")*1024*1024) > ($Config->get("ZipHardLimit")*1000*1000)){
196            die("! Upload chunks may be too large for server\n");
197        }
198
199        if($Config->get("UploadChunkSize") < 0.2){
200            $Config->get("UploadChunkSize") = 2;
201            print "! Using default upload chunk size of 2.0 MB\n";
202        }
203
204        if($Config->get("DeleteZipFilesAfterUpload")){
205            print "- Deleting ZIP files after upload\n";
206        }
207    }
208
209    if ($Config->get("UploadToDirectory"))
210    {
211        if (! $Config->get("UseHostnameInZipname")) 
212        {
213            print " * UseHostnameInZipname should be set when using UploadToDirectory\n";
214        }
215    }
216
217    if($Config->get("RequestUrl")){
218        print "- Using ".$Config->get("RequestUrl")." for Requests\n";
219    }
220
221    # Misc stuff
222    foreach(qw(N S E W)){
223        if($Config->get("Border".$_) > 0.5){
224            printf "Border".$_." looks abnormally large\n";
225        }
226    }
227
228    ## not used any longer, superseded by per-layer value
229    #if($Config->get("MaxZoom") < 12 || $Config->get("MaxZoom") > 20){
230    #    print "Check MaxZoom\n";
231    #}
232
233    # layers
234    foreach my $layer(split(/,/, $Config->get("Layers")))
235    {
236        print "- Configured Layer: $layer\n";
237
238        if ($Config->get($layer."_MaxZoom") < 12 || $Config->get($layer."_MaxZoom") > 20) 
239        {
240            print "Check $layer._MaxZoom\n";
241        }
242
243        for(my $zoom=12; $zoom<=$Config->get($layer."_MaxZoom"); $zoom++)
244        {
245            if (!defined($Config->get($layer."_Rules.$zoom")))
246            {
247                die "config option $layer._Rules.$zoom is not set";
248            }
249            if (!-f $Config->get($layer."_Rules.$zoom"))
250            {
251                die "rules file ".$Config->get($layer."_Rules.$zoom").
252                    " referenced by config option $layer._Rules.$zoom ".
253                    "is not present";
254            }
255        }
256
257        if (!defined($Config->get($layer."_Prefix")))
258        {
259            die "config option $layer._Prefix is not set";
260        }
261
262        # any combination of comma-separated preprocessor names is allowed
263        die "config option $layer._Preprocessor has invalid value" 
264            if (grep { $_ !~ /frollo|maplint|close-areas|mercator|attribution|autocut/} split(/,/, $Config->get($layer."_Preprocessor")));
265
266        foreach my $reqfile(split(/,/, $Config->get($layer."_RequiredFiles")))
267        {
268            die "file $reqfile required for layer $layer as per config option ".
269                $layer."_RequiredFiles not found" unless (-f $reqfile);
270        }
271
272    }
273    print "* UploadConfiguredLayersOnly not set. \n  Defaulting to uploading all zipfiles found, not just configured layers\n" unless defined($Config->get("UploadConfiguredLayersOnly"));
274    return %EnvironmentInfo;
275
276}
277
2781;
Note: See TracBrowser for help on using the repository browser.