summaryrefslogtreecommitdiff
path: root/Build-tools/Do-win-build
blob: a78b091a7379bf0d8008603d2638386b7cf5f87c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/usr/bin/perl -w

use Getopt::Long;

$opt_help=0;
$opt_tarball=$opt_builddir=$opt_suffix="";

GetOptions(
    "help",
    "tarball=s",
    "builddir=s",
    "suffix=s"
) || print_help();

print_help() if ($opt_help);

chomp($MSDEV=`which msdev`);

if (!$opt_builddir) {
  $opt_builddir = "/cygdrive/c/mysql-win-build";
}

$opt_tarball =~ /(mysql[^\/]*)-win-src\.tar/;
$mysqlver=$1;
$basedir = "$opt_builddir/$mysqlver";
$scriptdir = `pwd`;

# Make sure build dir exists
mkdir($opt_builddir);
# Clean out any previous build
system("rm -rf $basedir");

# Unpack in the script directory
system("tar -zxvf $opt_tarball");
# Move to the build directory
system("mv $mysqlver $opt_builddir");

if (!chdir($basedir))
{
  print "Do-win-build error: Could not change to $basedir";
  exit 1;
}

# Check whether this is a classic edition build
if ($opt_suffix =~ /-classic/)
{
  # Blank out ha_innodb.cpp
  chmod 0644, 'sql/ha_innodb.cpp';
  open(OUT, '>', 'sql/ha_innodb.cpp');
  close(OUT);

  # Remove HAVE_INNOBASE_DB from the requisite project files
  for $dspfile ('libmysqld/libmysqld.dsp', 'mysqldemb/mysqldemb.dsp', 'mysqlserver/mysqlserver.dsp', 'sql/mysqld.dsp', 'sql/mysqldmax.dsp')
  {
    open(IN, '<', $dspfile);
    open(OUT, '>', "$dspfile.tmp");
    while (readline IN)
    {
      s/\D \"HAVE_INNOBASE_DB\" //g;
      print OUT $_;
    }
    close(IN);
    close(OUT);
    unlink $dspfile;
    rename "$dspfile.tmp", $dspfile;
  }
}

# Perform compilation
system("\"$MSDEV\" mysql.dsw /MAKE \"ALL\" /OUT $mysqlver-build.log");

# Package binary
system("./scripts/make_win_binary_distribution --suffix=$opt_suffix");

# Copy log back to script directory
system("cp $mysqlver$suffix-build.log $scriptdir");

# Move binary package to script directory
system("mv *.zip $scriptdir");

#
# Print a help text message
#
sub print_help
{
	print <<EOF;
Usage: Do-compile-win [options] source-tarball

Unpacks a Windows source distribution on the local machine and
compiles it using VC++ 6.0.

This script is intended for Cygwin Perl. You must have a working
MSDEV.EXE in your path for compilation, as well as the following:

sed
tar (GNU tar)
which


Options:

--help
Print this text.

--builddir=<dir>
Set the Cygwin path to build under; the tarball will actually
be moved to <builddir>/mysql-<version>/tarball and extracted under
<builddir>/mysql-<version>/build.
Default: /cygdrive/c/mysql-win-build

--suffix=<suffix>
If specified, the resulting binary will have the specified suffix
in its name. If the suffix is "-classic", the project files will
be stripped of all occurrences of HAVE_INNOBASE_DB and
ha_innodb.cpp will be blanked out, to create classic edition
server binaries.

--tarball=<file>
Windows source tarball to use for this build. Must be of the form
mysql[com]-x.x.x-win-src.tar.gz (REQUIRED)

EOF
	exit 1;
}