#!/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] ... Options: --lst-file Path to the .lst file, eg ../util/openoffice.lst --product-name The product name, eg Apache_OpenOffice --output-path Path to the instsetoo_native platform output tree --source-version .. 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(); # 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();