mysql-copyright 7.27 KB
Newer Older
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1 2 3 4 5
#!/usr/bin/perl -i

# Untar a MySQL distribution, change the copyright texts,
# pack it up again to a given directory

6
$VER="1.3";
bk@work.mysql.com's avatar
bk@work.mysql.com committed
7

8 9 10
use Cwd;
use File::Basename;
use File::Copy;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
11 12
use Getopt::Long;

13 14
$opt_help    = 0;
$opt_version = 0;
15
$opt_verbose = 0;
16 17
$opt_target  = "mysql-copyright-target-";
$opt_target .= `date +%d%m%y-%H%M%S`;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
18 19
chop $opt_target;

20
GetOptions("help","version","target=s", "verbose") || error();
bk@work.mysql.com's avatar
bk@work.mysql.com committed
21 22 23

# fix the directory prefix for target dir

24 25
$WD= cwd();
my $win_flag = 0;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
26 27 28 29 30 31 32 33 34 35 36 37 38 39
$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;

40 41 42 43 44 45 46
  if ($opt_version)
  {
    print "$0 version $VER by Jani Tolonen\n";
    exit(0);
  }
  usage() if ($opt_help);
  print error() if ($#ARGV == -1);
bk@work.mysql.com's avatar
bk@work.mysql.com committed
47 48 49 50 51 52 53 54

  `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];
55
    $win_flag = ($distfile =~ /win-src/) ? 1 : 0;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
    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'
72 73
    if ($distfile =~
      m/^($REG_BASENAME)([\-\_])($REG_VERSION){1}([\.\-\+]\w+\-\w+)?[\.\-\+](.*)?$/xo) 
bk@work.mysql.com's avatar
bk@work.mysql.com committed
74 75
    {
      $distname= $1.$2.$3;
76 77
      $suffix= $5;
      $fileext = $6;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
78
      $newdistname= $1."com".$2.$3;
79
      $newdistname .= $suffix if $win_flag;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
80 81
    }
    # find out the extract path (should be same as distname!)
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
82
    chomp($destdir = `tar ztf ../$distfile | head -1`);
83 84
    # remove slash from the end
    $destdir= substr($destdir, 0, -1);
bk@work.mysql.com's avatar
bk@work.mysql.com committed
85 86 87 88 89 90 91 92 93 94 95
    
    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..
96
    `tar xfz ../$distfile`;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
97 98 99
    $pec= $? >> 8;
    abort($dir, "Extracting from tar failed!\n") if ($pec);

100
    # remove the 'PUBLIC' file from distribution and copy MySQLEULA.txt
bk@work.mysql.com's avatar
bk@work.mysql.com committed
101 102
    # on the toplevel of the directory instead. file 'PUBLIC' shouldn't
    # exist in the new mysql distributions, but let's be sure..
103
    unlink("$destdir/PUBLIC", "$destdir/README");
104
    unlink("$destdir/COPYING", "$destdir/EXCEPTIONS-CLIENT");
105
    copy("$WD/Docs/MySQLEULA.txt", "$destdir");
bk@work.mysql.com's avatar
bk@work.mysql.com committed
106
    
107 108 109
    # remove readline subdir and update configure accordingly
    system("rm -rf $destdir/cmd-line-utils/readline");
    if ($win_flag) {
110
      chdir("$destdir") or (print "$! Unable to change directory to $destdir!\n" && exit(0));
111
    } else {
112 113 114
      chdir("$destdir");
      unlink ("configure") or die "Can't delete $destdir/configure: $!\n";
      open(CONFIGURE,"<configure.in") or die "$! Unable to open configure.in to read from!\n";
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
115
      local $/;
116 117 118 119 120 121 122
      undef $/;
      my $configure = <CONFIGURE>;
      close(CONFIGURE);
      $configure =~ s|cmd\-line\-utils/readline/Makefile dnl\n?||g;
      open(CONFIGURE,">configure.in") or die "$! Unable to open configure.in to write to!\n";
      print CONFIGURE $configure;
      close(CONFIGURE);
123
      `aclocal && autoheader && aclocal && automake && autoconf`;
124 125 126 127
      if (! -f "configure") {
        print "\"./configure\" was not produced, exiting!\n";
        exit(0);
      }
128 129 130 131
      if (-d "autom4te.cache") {
        print "Trying to delete autom4te.cache dir\n" if $opt_verbose;
        system("rm -rf autom4te.cache") or print "Unable to delete autom4te.cache dir: $!\n";
      }
132 133
    }

bk@work.mysql.com's avatar
bk@work.mysql.com committed
134 135 136 137 138
    # fix file copyrights
    &fix_usage_copyright();
    &add_copyright();
    
    # rename the directory with new distribution name
139 140
    chdir("$WD/$dir");
    print "renaming $destdir $newdistname\n" if $opt_verbose; 
141
    rename($destdir, $newdistname);
bk@work.mysql.com's avatar
bk@work.mysql.com committed
142 143
    
    # tar the new distribution
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
144
    `tar cz -f $WD/$newdistname.tar.gz $newdistname`;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
145 146 147 148
    $pec= $? >> 8;
    abort($dir, "Making new tar archive failed!\n") if ($pec);
  
    # remove temporary directory
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
149
    chdir($WD) or print "$! Unable to move up one dir\n";
150 151 152 153 154 155 156 157 158
    `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";
      }
    }
bk@work.mysql.com's avatar
bk@work.mysql.com committed
159 160 161 162 163 164 165 166 167 168
  }
  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
{
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
169 170 171 172 173
  my $findlist = `find . -type f -name \"*.c*\"`;
  my @files = split("\n", $findlist);
  my $cwd = getcwd();

  foreach my $file (@files)
bk@work.mysql.com's avatar
bk@work.mysql.com committed
174
  {
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
175 176 177
    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"` ;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
178 179 180 181 182 183 184 185 186
  }
}

####
#### change the copyright text in the beginning of the files
####

sub add_copyright
{
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
187 188 189 190
  my $findlist = `find . -type f -name "*"`;
  my @files = split("\n", $findlist);
  my $cwd = getcwd();

bk@work.mysql.com's avatar
bk@work.mysql.com committed
191 192
  foreach my $file (@files)
  {
193
    next if ! -f $file;
patg@krsna.patg.net's avatar
patg@krsna.patg.net committed
194
    print "processing file $file in cwd $cwd\n" if $opt_verbose;
195
    `$WD/Build-tools/mysql-copyright-2 "$file"`;
bk@work.mysql.com's avatar
bk@work.mysql.com committed
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
  }
}

####
#### 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);
}
269 270 271 272 273 274 275 276 277 278 279 280 281

####
#### error
####

sub error
{
  if ($#ARGV == -1)
  {
    print "Too few arguments to $0!\n";
  }
  exit(1);
}