mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			233 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			5.3 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.2";
 | |
| 
 | |
| use Getopt::Long;
 | |
| 
 | |
| $opt_help    = 0;
 | |
| $opt_version = 0;
 | |
| $opt_target  = "mysql-copyright-target-";
 | |
| $opt_target .= `date +%d%m%y-%H%M%S`;
 | |
| chop $opt_target;
 | |
| 
 | |
| GetOptions("help","version","target=s") || error();
 | |
| 
 | |
| # fix the directory prefix for target dir
 | |
| 
 | |
| $WD= `pwd`;
 | |
| chop $WD;
 | |
| $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];
 | |
|     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}([\.\-\+])
 | |
| 	(.*)?$/xo) 
 | |
|     {
 | |
|       $distname= $1.$2.$3;
 | |
|       $suffix= $5.$6;
 | |
|       $newdistname= $1."com".$2.$3;
 | |
|     }
 | |
|     # find out the extract path (should be same as distname!)
 | |
|     $destdir= `tar tvzf ../$distfile | head -1`;
 | |
|     # remove leading crab
 | |
|     $destdir =~ s/.*\d+:\d+:\d+[ ]//;
 | |
|     # remove newline and slash from the end
 | |
|     $destdir= substr($destdir, 0, -2);
 | |
|     
 | |
|     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..
 | |
|     `rm -f $destdir/PUBLIC $destdir/README`;
 | |
|     `cp -p $WD/Docs/MySQLEULA.txt $destdir/`;
 | |
|     
 | |
|     # fix file copyrights
 | |
|     &fix_usage_copyright();
 | |
|     &add_copyright();
 | |
|     
 | |
|     # rename the directory with new distribution name
 | |
|     `mv -f $destdir $newdistname`;
 | |
|     
 | |
|     # tar the new distribution
 | |
|     `tar cz -f $opt_target/$newdistname.tar.gz *`;
 | |
|     $pec= $? >> 8;
 | |
|     abort($dir, "Making new tar archive failed!\n") if ($pec);
 | |
|   
 | |
|     # remove temporary directory
 | |
|     chdir "..";
 | |
|     `rm -rf $dir/`;
 | |
|   }
 | |
|   exit(0);
 | |
| }  
 | |
| 
 | |
| ####
 | |
| #### 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 @Cfiles = `find . -type f -name \"*.c*\"`;
 | |
|   foreach my $Cfile (@Cfiles)
 | |
|   {
 | |
|     chop $Cfile;
 | |
|     `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" -- $Cfile`;
 | |
|   }
 | |
| }
 | |
| 
 | |
| ####
 | |
| #### change the copyright text in the beginning of the files
 | |
| ####
 | |
| 
 | |
| sub add_copyright
 | |
| {
 | |
|   my @files = `find . -type f -name "*"`;
 | |
|   foreach my $file (@files)
 | |
|   {
 | |
|     chop $file;
 | |
|     `$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);
 | |
| }
 | 
