blob: 49129d11b6b7ba60dbdb1e5d116bd16a20aa4d71 [file] [log] [blame]
#!/usr/bin/perl -w
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
use lib ("$ENV{SOLARENV}/bin/modules");
use installer::patch::InstallationSet;
use installer::patch::Msi;
use installer::patch::ReleasesList;
use installer::ziplist;
use installer::logger;
use Getopt::Long;
use Pod::Usage;
use Digest;
#use Carp::Always;
use strict;
=head1 NAME
release_prepare.pl - Several functions to prepare release builds
=head1 SYNOPSIS
release_prepare.pl [options] <language1> <language2> ...
Options:
--lst-file <filename>
Path to the .lst file, eg ../util/openoffice.lst
--product-name <product-name>
The product name, eg Apache_OpenOffice
--output-path <path>
Path to the instsetoo_native platform output tree
--source-version <major>.<minor>.<micro>
Override version number of the source. If not given it is computed from the target version.
=head1 DESCRIPTION
Prepare a release build:
- Provide installation sets of the previous version.
If they are not in ext_sources/ then they are downloaded.
- Unpack the installation sets.
=cut
sub ProcessCommandline ()
{
my $arguments = {
'lst-file' => undef,
'product-name' => undef,
'output-path' => undef,
'source-version' => undef};
if ( ! GetOptions(
"lst-file=s", \$arguments->{'lst-file'},
"product-name=s", \$arguments->{'product-name'},
"output-path=s", \$arguments->{'output-path'},
"source-version:s" => \$arguments->{'source-version'}
))
{
pod2usage(1);
}
if ( ! defined $arguments->{'lst-file'})
{
print STDERR "lst-file missing, please provide --lst-file\n";
pod2usage(2);
}
if ( ! defined $arguments->{'product-name'})
{
print STDERR "product name missing, please provide --product-name\n";
pod2usage(2);
}
if ( ! defined $arguments->{'output-path'})
{
print STDERR "output path missing, please provide --output-path\n";
pod2usage(2);
}
$arguments->{'languages'} = \@ARGV;
return $arguments;
}
sub ProcessLanguage ($$$$$)
{
my ($version, $is_current_version, $language, $package_format, $product_name) = @_;
$installer::logger::Info->printf("%s\n", $language);
$installer::logger::Info->increase_indentation();
if ( ! defined installer::patch::ReleasesList::Instance()
->{$version}
->{$package_format}
->{$language})
{
$installer::logger::Info->printf(
"there is no recorded information about language '%s' in version '%s'\n",
$language,
$version);
$installer::logger::Info->printf(" skipping\n");
}
else
{
# For every language we need
# 1. have downloadable installation set available (download if missing)
# 2. unpack it to get access to .cab and .msi
# 3. unpack .cab so that msimsp.exe can be run
installer::patch::InstallationSet::ProvideUnpackedCab(
$version,
$is_current_version,
$language,
$package_format,
$product_name);
}
$installer::logger::Info->decrease_indentation();
}
sub main ()
{
installer::logger::SetupSimpleLogging();
my $arguments = ProcessCommandline();
$arguments->{'package-format'} = 'msi';
$installer::logger::Info->print("preparing release build\n");
my ($variables, undef, undef)
= installer::ziplist::read_openoffice_lst_file(
$arguments->{'lst-file'},
$arguments->{'product-name'},
undef);
if ( ! defined $arguments->{'source-version'})
{
$arguments->{'source-version'} = $variables->{'PREVIOUS_VERSION'};
if ( ! defined $arguments->{'source-version'})
{
$arguments->{'source-version'} = installer::patch::ReleasesList::GetPreviousVersion(
$variables->{'PRODUCTVERSION'});
if ( ! defined $arguments->{'source-version'})
{
$installer::logger::Info->printf("ERROR: can not autodetect previous version\n");
$installer::logger::Info->printf(" please specify via 'PREVIOUS_VERSION' in %s\n",
$arguments->{'lst-file'});
$installer::logger::Info->printf(" or the --source-version commandline option\n");
exit(1);
}
}
}
my $current_version = $variables->{'PRODUCTVERSION'};
$installer::logger::Info->printf("data from '%s'\n", $arguments->{'lst-file'});
$installer::logger::Info->printf("name is '%s'\n", $arguments->{'product-name'});
$installer::logger::Info->printf("path is '%s'\n", $arguments->{'output-path'});
$installer::logger::Info->printf("source version is '%s'\n", $arguments->{'source-version'});
$installer::logger::Info->printf("target version is '%s'\n", $current_version);
foreach my $language (@{$arguments->{'languages'}})
{
ProcessLanguage(
$arguments->{'source-version'},
$arguments->{'source-version'} eq $current_version,
$language,
$arguments->{'package-format'},
$arguments->{'product-name'});
}
}
main();