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