1*c9b362f6SAndre Fischer#!/usr/bin/perl -w
2*c9b362f6SAndre Fischer
3*c9b362f6SAndre Fischer#**************************************************************
4*c9b362f6SAndre Fischer#
5*c9b362f6SAndre Fischer#  Licensed to the Apache Software Foundation (ASF) under one
6*c9b362f6SAndre Fischer#  or more contributor license agreements.  See the NOTICE file
7*c9b362f6SAndre Fischer#  distributed with this work for additional information
8*c9b362f6SAndre Fischer#  regarding copyright ownership.  The ASF licenses this file
9*c9b362f6SAndre Fischer#  to you under the Apache License, Version 2.0 (the
10*c9b362f6SAndre Fischer#  "License"); you may not use this file except in compliance
11*c9b362f6SAndre Fischer#  with the License.  You may obtain a copy of the License at
12*c9b362f6SAndre Fischer#
13*c9b362f6SAndre Fischer#    http://www.apache.org/licenses/LICENSE-2.0
14*c9b362f6SAndre Fischer#
15*c9b362f6SAndre Fischer#  Unless required by applicable law or agreed to in writing,
16*c9b362f6SAndre Fischer#  software distributed under the License is distributed on an
17*c9b362f6SAndre Fischer#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18*c9b362f6SAndre Fischer#  KIND, either express or implied.  See the License for the
19*c9b362f6SAndre Fischer#  specific language governing permissions and limitations
20*c9b362f6SAndre Fischer#  under the License.
21*c9b362f6SAndre Fischer#
22*c9b362f6SAndre Fischer#**************************************************************
23*c9b362f6SAndre Fischer
24*c9b362f6SAndre Fischeruse LWP::UserAgent;
25*c9b362f6SAndre Fischer
26*c9b362f6SAndre Fischeruse strict;
27*c9b362f6SAndre Fischer
28*c9b362f6SAndre Fischer=head1 NAME
29*c9b362f6SAndre Fischer
30*c9b362f6SAndre Fischer    patch_make_releases_xml.pl - Create a section for the instsetoo_native/data/releases.xml file.
31*c9b362f6SAndre Fischer
32*c9b362f6SAndre Fischer=head1 SYNOPSIS
33*c9b362f6SAndre Fischer
34*c9b362f6SAndre Fischer    patch_make_releases_xml.pl <version-number>
35*c9b362f6SAndre Fischer
36*c9b362f6SAndre Fischer        version-number is the version number (eg 4.0.1) for which to create the releases.xml file.
37*c9b362f6SAndre Fischer
38*c9b362f6SAndre Fischer=head1 DESCRIPTION
39*c9b362f6SAndre Fischer
40*c9b362f6SAndre Fischer    Will contact http://archive.apache.org/dist/openoffice/<version-number>/binaries/ and
41*c9b362f6SAndre Fischer    a) determine the set of languages
42*c9b362f6SAndre Fischer    b) collect sizes and sha256 check sums for all Windows installation sets.
43*c9b362f6SAndre Fischer
44*c9b362f6SAndre Fischer    The result is printed to the console.  It has to be added manually to releases.xml.
45*c9b362f6SAndre Fischer
46*c9b362f6SAndre Fischer=cut
47*c9b362f6SAndre Fischer
48*c9b362f6SAndre Fischer
49*c9b362f6SAndre Fischerif (scalar @ARGV != 1)
50*c9b362f6SAndre Fischer{
51*c9b362f6SAndre Fischer    print STDERR "usage: $0 <version-number>\n";
52*c9b362f6SAndre Fischer    die;
53*c9b362f6SAndre Fischer}
54*c9b362f6SAndre Fischer
55*c9b362f6SAndre Fischermy $version = $ARGV[0];
56*c9b362f6SAndre Fischer
57*c9b362f6SAndre Fischerprint <<EOT;
58*c9b362f6SAndre Fischer<?xml version='1.0' encoding='UTF-8'?>
59*c9b362f6SAndre Fischer<!--***********************************************************
60*c9b362f6SAndre Fischer *
61*c9b362f6SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one
62*c9b362f6SAndre Fischer * or more contributor license agreements.  See the NOTICE file
63*c9b362f6SAndre Fischer * distributed with this work for additional information
64*c9b362f6SAndre Fischer * regarding copyright ownership.  The ASF licenses this file
65*c9b362f6SAndre Fischer * to you under the Apache License, Version 2.0 (the
66*c9b362f6SAndre Fischer * "License"); you may not use this file except in compliance
67*c9b362f6SAndre Fischer * with the License.  You may obtain a copy of the License at
68*c9b362f6SAndre Fischer *
69*c9b362f6SAndre Fischer *   http://www.apache.org/licenses/LICENSE-2.0
70*c9b362f6SAndre Fischer *
71*c9b362f6SAndre Fischer * Unless required by applicable law or agreed to in writing,
72*c9b362f6SAndre Fischer * software distributed under the License is distributed on an
73*c9b362f6SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
74*c9b362f6SAndre Fischer * KIND, either express or implied.  See the License for the
75*c9b362f6SAndre Fischer * specific language governing permissions and limitations
76*c9b362f6SAndre Fischer * under the License.
77*c9b362f6SAndre Fischer *
78*c9b362f6SAndre Fischer ***********************************************************-->
79*c9b362f6SAndre FischerEOT
80*c9b362f6SAndre Fischer
81*c9b362f6SAndre Fischersub DownloadFile ($)
82*c9b362f6SAndre Fischer{
83*c9b362f6SAndre Fischer    my $url = shift;
84*c9b362f6SAndre Fischer
85*c9b362f6SAndre Fischer    my $agent = LWP::UserAgent->new();
86*c9b362f6SAndre Fischer    $agent->timeout(120);
87*c9b362f6SAndre Fischer    $agent->show_progress(0);
88*c9b362f6SAndre Fischer
89*c9b362f6SAndre Fischer    my $file_content = "";
90*c9b362f6SAndre Fischer    my $last_was_redirect = 0;
91*c9b362f6SAndre Fischer    my $bytes_read = 0;
92*c9b362f6SAndre Fischer    $agent->add_handler('response_redirect'
93*c9b362f6SAndre Fischer        => sub{
94*c9b362f6SAndre Fischer            $last_was_redirect = 1;
95*c9b362f6SAndre Fischer            return;
96*c9b362f6SAndre Fischer        });
97*c9b362f6SAndre Fischer    $agent->add_handler('response_data'
98*c9b362f6SAndre Fischer        => sub{
99*c9b362f6SAndre Fischer            if ($last_was_redirect)
100*c9b362f6SAndre Fischer            {
101*c9b362f6SAndre Fischer                $last_was_redirect = 0;
102*c9b362f6SAndre Fischer                # Throw away the data we got so far.
103*c9b362f6SAndre Fischer		$file_content = "";
104*c9b362f6SAndre Fischer            }
105*c9b362f6SAndre Fischer            my($response,$agent,$h,$data)=@_;
106*c9b362f6SAndre Fischer	    $file_content .= $data;
107*c9b362f6SAndre Fischer        });
108*c9b362f6SAndre Fischer    $agent->get($url);
109*c9b362f6SAndre Fischer
110*c9b362f6SAndre Fischer    return $file_content;
111*c9b362f6SAndre Fischer}
112*c9b362f6SAndre Fischer
113*c9b362f6SAndre Fischer
114*c9b362f6SAndre Fischer
115*c9b362f6SAndre Fischer
116*c9b362f6SAndre Fischersub GetResponse ($)
117*c9b362f6SAndre Fischer{
118*c9b362f6SAndre Fischer    my $url = shift;
119*c9b362f6SAndre Fischer
120*c9b362f6SAndre Fischer    my $agent = LWP::UserAgent->new();
121*c9b362f6SAndre Fischer    $agent->timeout(120);
122*c9b362f6SAndre Fischer    $agent->show_progress(0);
123*c9b362f6SAndre Fischer
124*c9b362f6SAndre Fischer    my $file_content = "";
125*c9b362f6SAndre Fischer    my $last_was_redirect = 0;
126*c9b362f6SAndre Fischer    my $bytes_read = 0;
127*c9b362f6SAndre Fischer    $agent->add_handler('response_redirect'
128*c9b362f6SAndre Fischer        => sub{
129*c9b362f6SAndre Fischer            $last_was_redirect = 1;
130*c9b362f6SAndre Fischer            return;
131*c9b362f6SAndre Fischer        });
132*c9b362f6SAndre Fischer    $agent->add_handler('response_data'
133*c9b362f6SAndre Fischer        => sub{
134*c9b362f6SAndre Fischer            if ($last_was_redirect)
135*c9b362f6SAndre Fischer            {
136*c9b362f6SAndre Fischer                $last_was_redirect = 0;
137*c9b362f6SAndre Fischer                # Throw away the data we got so far.
138*c9b362f6SAndre Fischer		$file_content = "";
139*c9b362f6SAndre Fischer            }
140*c9b362f6SAndre Fischer            my($response,$agent,$h,$data)=@_;
141*c9b362f6SAndre Fischer	    $file_content .= $data;
142*c9b362f6SAndre Fischer        });
143*c9b362f6SAndre Fischer    return $agent->get($url, 'Range' => "bytes=0-0");
144*c9b362f6SAndre Fischer}
145*c9b362f6SAndre Fischer
146*c9b362f6SAndre Fischermy @languages = ();
147*c9b362f6SAndre Fischermy @lines = split(/\n/, DownloadFile("http://archive.apache.org/dist/openoffice/".$version."/binaries/"));
148*c9b362f6SAndre Fischerforeach my $line (@lines)
149*c9b362f6SAndre Fischer{
150*c9b362f6SAndre Fischer    next unless $line =~ /folder.gif/;
151*c9b362f6SAndre Fischer    if ($line =~ /a href=\"([^\"\/]+)\/\"/)
152*c9b362f6SAndre Fischer    {
153*c9b362f6SAndre Fischer	my $language = $1;
154*c9b362f6SAndre Fischer	next if $language eq "SDK";
155*c9b362f6SAndre Fischer	next if $language =~ /^[A-Z]/;
156*c9b362f6SAndre Fischer	push @languages, $language;
157*c9b362f6SAndre Fischer    }
158*c9b362f6SAndre Fischer}
159*c9b362f6SAndre Fischer
160*c9b362f6SAndre Fischerprint "<releases>\n";
161*c9b362f6SAndre Fischerprint "  <release>\n";
162*c9b362f6SAndre Fischerprintf "    <version>%s</version>\n", $version;
163*c9b362f6SAndre Fischerprint "    <download>\n";
164*c9b362f6SAndre Fischerprint "      <package-format>msi</package-format>\n";
165*c9b362f6SAndre Fischerprint "      <url-template>\n";
166*c9b362f6SAndre Fischerprintf "        http://archive.apache.org/dist/openoffice/%s/binaries/%%L/Apache_OpenOffice_%s_Win_x86_install_%%L.exe\n",$version, $version;
167*c9b362f6SAndre Fischerprint "      </url-template>\n";
168*c9b362f6SAndre Fischerforeach my $language (sort @languages)
169*c9b362f6SAndre Fischer{
170*c9b362f6SAndre Fischer    print "      <item>\n";
171*c9b362f6SAndre Fischer    printf "        <language>%s</language>\n", $language;
172*c9b362f6SAndre Fischer    my $name = sprintf(
173*c9b362f6SAndre Fischer	"Apache_OpenOffice_%s_Win_x86_install_%s.exe",
174*c9b362f6SAndre Fischer	$version,
175*c9b362f6SAndre Fischer	$language,
176*c9b362f6SAndre Fischer	$version,
177*c9b362f6SAndre Fischer	$language);
178*c9b362f6SAndre Fischer
179*c9b362f6SAndre Fischer    my $content = DownloadFile(
180*c9b362f6SAndre Fischer	sprintf("http://archive.apache.org/dist/openoffice/%s/binaries/%s/%s.sha256", $version, $language, $name));
181*c9b362f6SAndre Fischer    if ($content =~ /^([a-f0-9]+)/)
182*c9b362f6SAndre Fischer    {
183*c9b362f6SAndre Fischer	printf("        <checksum type=\"sha256\">%s</checksum>\n", $1);
184*c9b362f6SAndre Fischer    }
185*c9b362f6SAndre Fischer    my $response = GetResponse(
186*c9b362f6SAndre Fischer	sprintf("http://archive.apache.org/dist/openoffice/%s/binaries/%s/%s", $version, $language, $name));
187*c9b362f6SAndre Fischer    my $content_range = $response->{'_headers'}->{'content-range'};
188*c9b362f6SAndre Fischer    if ($content_range =~ /bytes 0-0\/(\d+)/)
189*c9b362f6SAndre Fischer    {
190*c9b362f6SAndre Fischer	printf("        <size>%s</size>\n", $1);
191*c9b362f6SAndre Fischer    }
192*c9b362f6SAndre Fischer    print "      </item>\n";
193*c9b362f6SAndre Fischer}
194*c9b362f6SAndre Fischer
195*c9b362f6SAndre Fischerprint "    </download>\n";
196*c9b362f6SAndre Fischerprint "  </release>\n";
197*c9b362f6SAndre Fischerprint "</releases>\n";
198