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