| #!/usr/bin/env perl |
| # 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 strict; |
| use warnings; |
| use FindBin qw( $Bin ); |
| use File::Find; |
| |
| # make sure we are at the top-level dir |
| if ( !-d 'perl' and !-d 'core' ) { |
| chdir("$Bin/../../"); |
| } |
| |
| my $usage = "$0 version\n"; |
| my $version = shift(@ARGV) or die $usage; |
| |
| # standardize version strings |
| my $x_y_z_version = ""; |
| my $x_yyyzzz_version = ""; |
| if ( $version =~ m/^(\d+)\.(\d+)\.(\d+)$/ ) { |
| $x_yyyzzz_version = sprintf( "%d.%03d%03d", $1, $2, $3 ); |
| $x_y_z_version = $version; |
| } |
| elsif ( $version =~ m/^(\d+)\.(\d\d\d)(\d\d\d)$/ ) { |
| $x_y_z_version = sprintf( "%d.%d.%d", $1, $2, $3 ); |
| $x_yyyzzz_version = $version; |
| } |
| else { |
| die "Unknown version syntax. Try X.Y.Z or X.YYYZZZ\n"; |
| } |
| |
| print "Using version: $x_y_z_version ( $x_yyyzzz_version )\n"; |
| |
| my $buf; |
| |
| # Update Lucy.pm. |
| $buf = read_file('perl/lib/Lucy.pm'); |
| $buf =~ s/(our \$VERSION\ +=\ +)'.+?'/$1'$x_yyyzzz_version'/g |
| or die "no match"; |
| $buf =~ s/XSLoader::load\( 'Lucy', '(.+?)'/XSLoader::load\( 'Lucy', '$x_y_z_version'/ |
| or die "no match"; |
| write_file( 'perl/lib/Lucy.pm', $buf ); |
| |
| # Update Lucy.pod. |
| $buf = read_file('perl/lib/Lucy.pod'); |
| $buf =~ s/(^=head1\s+VERSION\s+)([\d.]+)/$1$x_y_z_version/m |
| or die "no match"; |
| write_file( 'perl/lib/Lucy.pod', $buf ); |
| |
| # Update Build.PL |
| $buf = read_file('perl/Build.PL'); |
| $buf =~ s/(dist_version\ +=>\ +)'.+?'/$1'$x_y_z_version'/ |
| or die "no match"; |
| write_file( 'perl/Build.PL', $buf ); |
| |
| # Update all other Perl modules. |
| find sub { |
| return unless /[.]pm$/; |
| my $name = $_; |
| return if $name eq 'Lucy.pm'; |
| my $buf = read_file($name); |
| $buf =~ s/(our \$VERSION\ +=\ +)'.+?'/$1'$x_yyyzzz_version'/g |
| or die "no match in $File::Find::name"; |
| write_file($name, $buf); |
| }, 'perl'; |
| |
| # utility functions |
| sub read_file { |
| my ($file) = @_; |
| local $/; |
| open( F, "< $file" ) or die "Cannot read $file: $!\n"; |
| my $buf = <F>; |
| close(F) or die "Cannot close $file: $!\n"; |
| return $buf; |
| } |
| |
| sub write_file { |
| my ( $file, $buf ) = @_; |
| open( F, "> $file" ) or die "Cannot write $file: $!\n"; |
| print F $buf; |
| close(F) or die "Cannot close $file: $!\n"; |
| } |
| |
| exit(); |
| |
| __END__ |
| |
| =head1 NAME |
| |
| update_version - update Lucy version strings in source files |
| |
| =head1 SYNOPSIS |
| |
| perl devel/bin/update_version version |
| |
| =head1 DESCRIPTION |
| |
| Updates key source files with I<version>, using correct syntax |
| depending on the file format and type. |
| |
| I<version> may be specified in either format: |
| |
| X.Y.Z |
| X.YYYZZZ |
| |
| and update_version will convert the specified string into the |
| correct format for each relevant file. |
| |
| =cut |