mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
bd000dd232
Fixed vim to expandtab's, retab'd code Fixed CWD bug in trim_the_fat() Build-tools/mysql-copyright: Fixed vim to expandtab's, retab'd code Fixed CWD bug in trim_the_fat()
295 lines
7.4 KiB
Perl
Executable file
295 lines
7.4 KiB
Perl
Executable file
#!/usr/bin/perl -i
|
|
|
|
# Untar a MySQL distribution, change the copyright texts,
|
|
# pack it up again to a given directory
|
|
|
|
$VER="1.3";
|
|
|
|
use Cwd;
|
|
use File::Basename;
|
|
use File::Copy;
|
|
use Getopt::Long;
|
|
|
|
$opt_help = 0;
|
|
$opt_version = 0;
|
|
$opt_verbose = 0;
|
|
$opt_target = "mysql-copyright-target-";
|
|
$opt_target .= `date +%d%m%y-%H%M%S`;
|
|
chop $opt_target;
|
|
|
|
GetOptions("help","version","target=s", "verbose") || error();
|
|
|
|
# fix the directory prefix for target dir
|
|
|
|
$WD= cwd();
|
|
my $win_flag = 0;
|
|
$opt_target= $WD . '/' . $opt_target;
|
|
|
|
&main();
|
|
|
|
####
|
|
#### main
|
|
####
|
|
|
|
sub main
|
|
{
|
|
my $REG_BASENAME = '[a-z0-9A-Z\-\_\+]+';
|
|
my $REG_VERSION = '[0-9\.\-]+[a-z]?[0-9\.\-]+?(.alpha|.beta|.gamma|pre\d|[0-9\.\-a-z])?';
|
|
my $target;
|
|
|
|
if ($opt_version)
|
|
{
|
|
print "$0 version $VER by Jani Tolonen\n";
|
|
exit(0);
|
|
}
|
|
usage() if ($opt_help);
|
|
print error() if ($#ARGV == -1);
|
|
|
|
`mkdir -p $opt_target`;
|
|
$pec= $? >> 8;
|
|
die "Couldn't make the target directory!\n" if ($pec);
|
|
|
|
for ($i=0; $ARGV[$i]; $i++)
|
|
{
|
|
my $distfile= $ARGV[$i];
|
|
$win_flag = ($distfile =~ /win-src/) ? 1 : 0;
|
|
my $dir;
|
|
|
|
$dir= "mysql-copyright-";
|
|
$dir.= `date +%d%m%y-%H%M%S`;
|
|
chop $dir;
|
|
|
|
if (!(mkdir "$dir", 0700))
|
|
{
|
|
die "Couldn't make directory $dir!";
|
|
}
|
|
if (!(chdir "$dir"))
|
|
{
|
|
abort($dir, "Couldn't cd to $dir!");
|
|
}
|
|
# if the distfile is mysql-3.22.22-alpha.tar.gz, then
|
|
# distname is 'mysql-3.22.22-alpha' and suffix '.tar.gz'
|
|
if ($distfile =~
|
|
m/^($REG_BASENAME)([\-\_])($REG_VERSION){1}([\.\-\+]\w+\-\w+)?[\.\-\+](.*)?$/xo)
|
|
{
|
|
$distname= $1.$2.$3;
|
|
$suffix= $5;
|
|
$fileext = $6;
|
|
$newdistname= $1."com".$2.$3;
|
|
$newdistname .= $suffix if $win_flag;
|
|
}
|
|
# find out the extract path (should be same as distname!)
|
|
chomp($destdir= `tar ztf ../$distfile | head -1`);
|
|
# remove slash from the end
|
|
$destdir= substr($destdir, 0, -1);
|
|
|
|
if ("$destdir" ne "$distname")
|
|
{
|
|
print "Destination directory (the directory that will be extracted\n";
|
|
print "from the original distribution file) differs from the\n";
|
|
print "distribution name! Are you sure you want to continue? (Y/N) [N]:";
|
|
$ans= my_read(1);
|
|
abort($dir, "Aborted!") if ("$ans" ne "Y" && "$ans" ne "y");
|
|
}
|
|
|
|
# everything should be ok, continue with extracting..
|
|
`tar xfz ../$distfile`;
|
|
$pec= $? >> 8;
|
|
abort($dir, "Extracting from tar failed!\n") if ($pec);
|
|
|
|
# remove the 'PUBLIC' file from distribution and copy MySQLEULA.txt
|
|
# on the toplevel of the directory instead. file 'PUBLIC' shouldn't
|
|
# exist in the new mysql distributions, but let's be sure..
|
|
unlink("$destdir/PUBLIC", "$destdir/README");
|
|
copy("$WD/Docs/MySQLEULA.txt", "$destdir");
|
|
|
|
# remove readline, bdb subdirs and update 'configure'
|
|
my @extra_fat= ('bdb', 'cmd-line-utils/readline');
|
|
|
|
foreach my $fat (@extra_fat)
|
|
{
|
|
&trim_the_fat($fat);
|
|
}
|
|
|
|
# fix file copyrights
|
|
&fix_usage_copyright();
|
|
&add_copyright();
|
|
|
|
# rename the directory with new distribution name
|
|
chdir("$WD/$dir");
|
|
print "renaming $destdir $newdistname\n" if $opt_verbose;
|
|
rename($destdir, $newdistname);
|
|
|
|
# tar the new distribution
|
|
`tar cz -f $WD/$newdistname.tar.gz $newdistname`;
|
|
$pec= $? >> 8;
|
|
abort($dir, "Making new tar archive failed!\n") if ($pec);
|
|
|
|
# remove temporary directory
|
|
chdir($WD) or print "$! Unable to move up one dir\n";
|
|
`cd $WD`;
|
|
my $cwd = getcwd();
|
|
print "current dir is $cwd\n" if $opt_verbose ;
|
|
if (-e $dir) {
|
|
print "Trying to delete $dir\n" if $opt_verbose;
|
|
if ( system("rm -rf $dir")){
|
|
print "$! Unable to delete $dir!\n";
|
|
}
|
|
}
|
|
}
|
|
exit(0);
|
|
}
|
|
|
|
####
|
|
#### This function will remove unwanted parts of a src tree for the mysqlcom
|
|
#### distributions.
|
|
####
|
|
sub trim_the_fat
|
|
{
|
|
my $the_fat= shift;
|
|
my $cwd= getcwd();
|
|
|
|
system("rm -rf $destdir/${the_fat}");
|
|
if ($win_flag)
|
|
{
|
|
chdir("$destdir") or die "Unable to change directory to $destdir!: $!\n";
|
|
}
|
|
else
|
|
{
|
|
chdir("$destdir");
|
|
unlink ("configure") or die "Can't delete $destdir/configure: $!\n";
|
|
open(CONFIGURE,"<configure.in") or die "Unable to open configure.in for read: $!\n";
|
|
undef $/;
|
|
my $configure= <CONFIGURE>;
|
|
close(CONFIGURE);
|
|
$configure=~ s|${the_fat}/Makefile dnl\n?||g;
|
|
open(CONFIGURE,">configure.in") or die "Unable to open configure.in for write: $!\n";
|
|
print CONFIGURE $configure;
|
|
close(CONFIGURE);
|
|
`autoconf`;
|
|
die "'./configure' was not produced!" unless (-f "configure");
|
|
chdir("$cwd");
|
|
}
|
|
}
|
|
|
|
|
|
####
|
|
#### mysqld and MySQL client programs have a usage printed with --help.
|
|
#### This usage includes a copyright, which needs to be modified
|
|
####
|
|
sub fix_usage_copyright
|
|
{
|
|
my $findlist = `find . -type f -name \"*.c*\"`;
|
|
my @files = split("\n", $findlist);
|
|
my $cwd = getcwd();
|
|
|
|
foreach my $file (@files)
|
|
{
|
|
next if ! -f $file;
|
|
print "processing file $file in cwd $cwd\n" if $opt_verbose;
|
|
`replace "This is free software," "This is commercial software," "and you are welcome to modify and redistribute it under the GPL license" "please see the file MySQLEULA.txt for details" -- "$file"` ;
|
|
}
|
|
}
|
|
|
|
####
|
|
#### change the copyright text in the beginning of the files
|
|
####
|
|
|
|
sub add_copyright
|
|
{
|
|
my $findlist = `find . -type f -name "*"`;
|
|
my @files = split("\n", $findlist);
|
|
my $cwd = getcwd();
|
|
|
|
foreach my $file (@files)
|
|
{
|
|
next if ! -f $file;
|
|
next if -B $file;
|
|
print "processing file $file in cwd $cwd\n" if $opt_verbose;
|
|
`$WD/Build-tools/mysql-copyright-2 "$file"`;
|
|
}
|
|
}
|
|
|
|
####
|
|
#### read stdin
|
|
####
|
|
|
|
sub my_read
|
|
{
|
|
($length)= @_; # Max allowed length for the string.
|
|
|
|
$input= getc(STDIN);
|
|
if($input eq "\n")
|
|
{
|
|
return "\n";
|
|
}
|
|
for($new_input= getc(STDIN); $new_input ne "\n" ;)
|
|
{
|
|
if(length($input) < $length)
|
|
{
|
|
$input.= $new_input;
|
|
}
|
|
$new_input= getc(STDIN);
|
|
}
|
|
return $input;
|
|
}
|
|
|
|
####
|
|
#### abort
|
|
####
|
|
|
|
sub abort
|
|
{
|
|
my ($dir, $errstr)= @_;
|
|
# remove newly made directory and it's contents
|
|
print "$errstr\n";
|
|
chdir "..";
|
|
print "Removing directory $dir...\n";
|
|
`rm -rf $dir`;
|
|
exit(0);
|
|
}
|
|
|
|
####
|
|
#### usage
|
|
####
|
|
|
|
sub usage
|
|
{
|
|
print <<EOF;
|
|
$0 version $VER by Jani Tolonen
|
|
|
|
Description: The program takes one or more MySQL distributions as an
|
|
argument(s), extracts them, changes the copyright text in the
|
|
distribution files and makes a new distribution with suffix "com" in
|
|
the basename to directory mysql-copyright-target-DATE, where the
|
|
command was issued. For example: mysql-3.23.18-beta.tar.gz ->
|
|
mysqlcom-3.23.18-beta.tar.gz. DATE is of form DDMMYY-HHMMSS. The
|
|
target directory can be changed with option
|
|
--target=... mysql-copyright consists of two perl programs, this one
|
|
and another, mysql-copyright-2. Make sure the second part of the
|
|
script is available to the main script.
|
|
|
|
Usage:
|
|
$0 [options] file1 [file2 file3...]
|
|
|
|
Options:
|
|
--help Show this help and exit.
|
|
--target Target directory for new distribution files.
|
|
'.' can be used for the current directory.
|
|
(Default: $opt_target)
|
|
EOF
|
|
exit(0);
|
|
}
|
|
|
|
####
|
|
#### error
|
|
####
|
|
|
|
sub error
|
|
{
|
|
if ($#ARGV == -1)
|
|
{
|
|
print "Too few arguments to $0!\n";
|
|
}
|
|
exit(1);
|
|
}
|