2.4.14.6 Installing MySQL from Source on Windows
................................................

* Menu:

* windows-source-build-cmake::   Building MySQL from Source Using CMake and Visual Studio
* windows-vc-plus-plus-build::   Building MySQL from Source Using VC++
* borland-c-plus-plus::          Building MySQL from Source Using Borland C++
* windows-bitkeeper-build::      Creating a Windows Source Package from the Latest Development Source

This section does not apply to MySQL Enterprise Server users.

These instructions describe how to build binaries from source for MySQL
5.0 on Windows. Instructions are provided for building binaries from a
standard source distribution or from the BitKeeper tree that contains
the latest development source.

*Note*: The instructions here are strictly for users who want to test
MySQL on Microsoft Windows from the latest source distribution or from
the BitKeeper tree.  For production use, MySQL AB does not advise using
a MySQL server built by yourself from source. Normally, it is best to
use precompiled binary distributions of MySQL that are built
specifically for optimal performance on Windows by MySQL AB.
Instructions for installing binary distributions are available in *Note
windows-installation::.

To build MySQL on Windows from source, you must satisfy the following
system, compiler, and resource requirements:

   * Windows 2000, Windows XP, or newer version. Windows Vista is not
     supported until Microsoft certifies Visual Studio 2005 on Vista.

   * CMake, which can be downloaded from `http://www.cmake.org'. After
     installing, modify your path to include the `cmake' binary.

   * Microsoft Visual C++ 2005 Express Edition, Visual Studio .Net 2003
     (7.1), or Visual Studio 2005 (8.0) compiler system.

   * If you are using Visual C++ 2005 Express Edition, you must also
     install an appropriate Platform SDK. More information and links to
     downloads for various Windows platforms is available from
     `http://msdn.microsoft.com/platformsdk/'.

   * If you are compiling from a BitKeeper tree or making changes to
     the parser, you need `bison' for Windows, which can be downloaded
     from `http://gnuwin32.sourceforge.net/packages/bison.htm'.
     Download the package labeled `Complete package, excluding
     sources'. After installing the package, modify your path to
     include the `bison' binary and ensure that this binary is
     accessible from Visual Studio.

   * Cygwin might be necessary if you want to run the test script or
     package the compiled binaries and support files into a Zip
     archive. (Cygwin is needed only to test or package the
     distribution, not to build it.) Cygwin is available from
     `http://cygwin.com'.

   * 3GB to 5GB of disk space.

The exact system requirements can be found here:
`http://msdn.microsoft.com/vstudio/Previous/2003/sysreqs/default.aspx'
and `http://msdn.microsoft.com/vstudio/products/sysreqs/default.aspx'

You also need a MySQL source distribution for Windows, which can be
obtained two ways:

   * Obtain a Windows source distribution packaged by MySQL AB for the
     particular version of MySQL in which you are interested. These are
     available from `http://dev.mysql.com/downloads/'.

   * Package a source distribution yourself from the latest BitKeeper
     developer source tree. If you plan to do this, and you are not
     using the CMake build method, you must create the package on a
     Unix system and then transfer it to your Windows system. (Some of
     the configuration and build steps require tools that work only on
     Unix.) Thus, if you are not using CMake, the BitKeeper approach
     requires:

        * A system running Unix, or a Unix-like system such as Linux.

        * BitKeeper installed on that system. See *Note
          installing-source-tree::, for instructions how to download
          and install BitKeeper.

If you are using a Windows source distribution, you can go directly to
*Note windows-source-build-cmake::, or *Note
windows-vc-plus-plus-build::. To build from the BitKeeper tree without
CMake, proceed to *Note windows-bitkeeper-build::.

If you find something not working as expected, or you have suggestions
about ways to improve the current build process on Windows, please send
a message to the `win32' mailing list. See *Note mailing-lists::.

File: manual.info,  Node: windows-source-build-cmake,  Next: windows-vc-plus-plus-build,  Prev: windows-source-build,  Up: windows-source-build

2.4.14.7 Building MySQL from Source Using CMake and Visual Studio
.................................................................

This section does not apply to MySQL Enterprise Server users.

Follow this procedure to build MySQL:

  1. If you are installing from a packaged source distribution, create
     a work directory (for example, `C:\workdir'), and unpack the source
     distribution there using `WinZip' or another Windows tool that can
     read `.zip' files. This directory is the work directory in the
     following instructions.

  2. If you are installing from a BitKeeper tree, the root directory of
     that tree is the work directory in the following instructions.

  3. Using a command shell, navigate to the work directory and run the
     following command:

          C:\workdir>win\configure OPTIONS

     These options are available:

        * `WITH_INNOBASE_STORAGE_ENGINE': Enable the `InnoDB' storage
          engine.

        * `WITH_PARTITION_STORAGE_ENGINE': Enable user-defined
          partitioning.

        * `WITH_ARCHIVE_STORAGE_ENGINE': Enable the `ARCHIVE' storage
          engine.

        * `WITH_BLACKHOLE_STORAGE_ENGINE': Enable the `BLACKHOLE'
          storage engine.

        * `WITH_EXAMPLE_STORAGE_ENGINE': Enable the `EXAMPLE' storage
          engine.

        * `WITH_FEDERATED_STORAGE_ENGINE': Enable the `FEDERATED'
          storage engine.

        * `__NT__': Enable support for named pipes.

        * `MYSQL_SERVER_SUFFIX=SUFFIX': Server suffix, default none.

        * `COMPILATION_COMMENT=COMMENT': Server comment, default
          "Source distribution".

        * `MYSQL_TCP_PORT=PORT': Server port, default 3306.

        * `DISABLE_GRANT_OPTIONS': Disables the the `--bootstrap',
          `--skip-grant-tables', and `--init-file' options for
          `mysqld'. This option is available as of MySQL 5.0.36.

     For example (type the command on one line):

          C:\workdir>win\configure WITH_INNOBASE_STORAGE_ENGINE
                       WITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro

  4. From the work directory, execute the `win\build-vs8.bat' or
     `win\build-vs71.bat' file, depending on the version of Visual
     Studio you have installed. The script invokes CMake, which
     generates the `mysql.sln' solution file.

     You can also use `win\build-vs8_x64.bat' to build the 64-bit
     version of MySQL. However, you cannot build the 64-bit version
     with Visual Studio Express Edition. You must use Visual Studio
     2005 (8.0) or higher.

  5. From the work directory, open the generated `mysql.sln' file with
     Visual Studio and select the proper configuration using the
     `Configuration' menu. The menu provides `Debug', `Release',
     `RelwithDebInfo', `MinRelInfo' options. Then select `Solution' >
     `Build' to build the solution.

     Remember the configuration that you use in this step. It is
     important later when you run the test script because that script
     needs to know which configuration you used.

  6. Test the server. The server built using the preceding instructions
     expects that the MySQL base directory and data directory are
     `C:\mysql' and `C:\mysql\data' by default. If you want to test
     your server using the source tree root directory and its data
     directory as the base directory and data directory, you need to
     tell the server their pathnames.  You can either do this on the
     command line with the `--basedir' and `--datadir' options, or by
     placing appropriate options in an option file. (See *Note
     option-files::.) If you have an existing data directory elsewhere
     that you want to use, you can specify its pathname instead.

     When the server is running in standalone fashion or as a service
     based on your configuration, try to connect to it from the `mysql'
     interactive command-line utility.

     You can also run the standard test script, `mysql-test-run.pl'.
     This script is written in Perl, so you'll need either Cygwin or
     ActiveState Perl to run it. You may also need to install the
     modules required by the script. To run the test script, change
     location into the `mysql-test' directory under the work directory,
     set the `MTR_VS_CONFIG' environment variable to the configuration
     you selected earlier (or use the `--vs-config' option), and invoke
     `mysql-test-run.pl'.  For example (using Cygwin and the `bash'
     shell):

          shell> `cd mysql-test'
          shell> `export MTS_VS_CONFIG=debug'
          shell> `./mysqltest-run.pl --force --timer'
          shell> `./mysqltest-run.pl --force --timer --ps-protocol'

When you are satisfied that the programs you have built are working
correctly, stop the server. Now you can install the distribution. One
way to do this is to use the `make_win_bin_dist' script in the
`scripts' directory of the MySQL source distribution (see *Note
make-win-bin-dist::). This is a shell script, so you must have Cygwin
installed if you want to use it. It creates a Zip archive of the built
executables and support files that you can unpack in the location at
which you want to install MySQL.

It is also possible to install MySQL by copying directories and files
directly:

  1. Create the directories where you want to install MySQL.  For
     example, to install into `C:\mysql', use these commands:

          C:\> mkdir C:\mysql
          C:\> mkdir C:\mysql\bin
          C:\> mkdir C:\mysql\data
          C:\> mkdir C:\mysql\share
          C:\> mkdir C:\mysql\scripts

     If you want to compile other clients and link them to MySQL, you
     should also create several additional directories:

          C:\> mkdir C:\mysql\include
          C:\> mkdir C:\mysql\lib
          C:\> mkdir C:\mysql\lib\debug
          C:\> mkdir C:\mysql\lib\opt

     If you want to benchmark MySQL, create this directory:

          C:\> mkdir C:\mysql\sql-bench

     Benchmarking requires Perl support. See *Note perl-support::.

  2. From the work directory, copy into the `C:\mysql' directory the
     following directories:

          C:\> cd \workdir
          C:\workdir> copy client_release\*.exe C:\mysql\bin
          C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
          C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E
          C:\workdir> xcopy share\*.* C:\mysql\share /E

     If you want to compile other clients and link them to MySQL, you
     should also copy several libraries and header files:

          C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
          C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug
          C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug
          C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt
          C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt
          C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt
          C:\workdir> copy include\*.h C:\mysql\include
          C:\workdir> copy libmysql\libmysql.def C:\mysql\include

     If you want to benchmark MySQL, you should also do this:

          C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E

After installation, set up and start the server in the same way as for
binary Windows distributions. See *Note windows-installation::.

File: manual.info,  Node: windows-vc-plus-plus-build,  Next: borland-c-plus-plus,  Prev: windows-source-build-cmake,  Up: windows-source-build

2.4.14.8 Building MySQL from Source Using VC++
..............................................

This section does not apply to MySQL Enterprise Server users.

*Note*: VC++ workspace files for MySQL 4.1 and above are compatible
with Microsoft Visual Studio 7.1 and tested by MySQL AB staff before
each release.

Follow this procedure to build MySQL:

  1. Create a work directory (for example, `C:\workdir').

  2. Unpack the source distribution in the aforementioned directory
     using `WinZip' or another Windows tool that can read `.zip' files.

  3. Start Visual Studio .Net 2003 (7.1).

  4. From the `File' menu, select `Open Solution...'.

  5. Open the `mysql.sln' solution you find in the work directory.

  6. From the `Build' menu, select `Configuration Manager...'.

  7. In the `Active Solution Configuration' pop-up menu, select the
     configuration to use. You likely want to use one of `nt' (normal
     server, not for Windows 98/ME), `Max nt' (more engines and
     features, not for 98/ME) or `Debug' configuration.

  8. From the `Build' menu, select `Build Solution'.

  9. Debug versions of the programs and libraries are placed in the
     `client_debug' and `lib_debug' directories. Release versions of
     the programs and libraries are placed in the `client_release' and
     `lib_release' directories.

 10. Test the server. The server built using the preceding instructions
     expects that the MySQL base directory and data directory are
     `C:\mysql' and `C:\mysql\data' by default. If you want to test
     your server using the source tree root directory and its data
     directory as the base directory and data directory, you need to
     tell the server their pathnames.  You can either do this on the
     command line with the `--basedir' and `--datadir' options, or by
     placing appropriate options in an option file. (See *Note
     option-files::.) If you have an existing data directory elsewhere
     that you want to use, you can specify its pathname instead.

 11. Start your server from the `client_release' or `client_debug'
     directory, depending on which server you built or want to use. The
     general server startup instructions are in *Note
     windows-installation::. You must adapt the instructions
     appropriately if you want to use a different base directory or
     data directory.

 12. When the server is running in standalone fashion or as a service
     based on your configuration, try to connect to it from the `mysql'
     interactive command-line utility that exists in your
     `client_release' or `client_debug' directory.

When you are satisfied that the programs you have built are working
correctly, stop the server. Then install MySQL using the instructions
at the end of *Note windows-source-build-cmake::.

After installation, set up and start the server in the same way as for
binary Windows distributions. See *Note windows-installation::.

File: manual.info,  Node: borland-c-plus-plus,  Next: windows-bitkeeper-build,  Prev: windows-vc-plus-plus-build,  Up: windows-source-build

2.4.14.9 Building MySQL from Source Using Borland C++
.....................................................

This section does not apply to MySQL Enterprise Server users.

You can compile the MySQL Windows source with Borland C++ 5.02. (The
Windows source includes only projects for Microsoft VC++, for Borland
C++ you have to do the project files yourself.)

One known problem with Borland C++ is that it uses a different
structure alignment than VC++. This means that you run into problems if
you try to use the default `libmysql.dll' libraries (that were compiled
using VC++) with Borland C++. To avoid this problem, only call
`mysql_init()' with `NULL' as an argument, not a pre-allocated `MYSQL'
structure.

File: manual.info,  Node: windows-bitkeeper-build,  Prev: borland-c-plus-plus,  Up: windows-source-build

2.4.14.10 Creating a Windows Source Package from the Latest Development Source
..............................................................................

This section does not apply to MySQL Enterprise Server users.

To create a Windows source package from the current BitKeeper source
tree, use the instructions here. This procedure must be performed on a
system running a Unix or Unix-like operating system because some of the
configuration and build steps require tools that work only on Unix. For
example, the following procedure is known to work well on Linux.

  1. Copy the BitKeeper source tree for MySQL 5.0.  For instructions on
     how to do this, see *Note installing-source-tree::.

  2. Configure and build the distribution so that you have a server
     binary to work with. One way to do this is to run the following
     command in the top-level directory of your source tree:

          shell> ./BUILD/compile-pentium-max

  3. After making sure that the build process completed successfully,
     run the following utility script from top-level directory of your
     source tree:

          shell> ./scripts/make_win_src_distribution

     This script creates a Windows source package to be used on your
     Windows system. You can supply different options to the script
     based on your needs. It accepts the following options:

        * `--help'

          Display a help message.

        * `--debug'

          Print information about script operations, do not create
          package.

        * `--tmp'

          Specify the temporary location.

        * `--suffix'

          The suffix name for the package.

        * `--dirname'

          Directory name to copy files (intermediate).

        * `--silent'

          Do not print verbose list of files processed.

        * `--tar'

          Create `tar.gz' package instead of `.zip' package.

     By default, `make_win_src_distribution' creates a Zip-format
     archive with the name `mysql-VERSION-win-src.zip', where VERSION
     represents the version of your MySQL source tree.

  4. Copy or upload the Windows source package that you have just
     created to your Windows machine. To compile it, use the
     instructions in *Note windows-vc-plus-plus-build::.

File: manual.info,  Node: windows-client-compiling,  Prev: windows-source-build,  Up: installing-source

2.4.14.11 Compiling MySQL Clients on Windows
............................................

This section does not apply to MySQL Enterprise Server users.

In your source files, you should include `my_global.h' before `mysql.h':

     #include <my_global.h>
     #include <mysql.h>

`my_global.h' includes any other files needed for Windows compatibility
(such as `windows.h') if you compile your program on Windows.

You can either link your code with the dynamic `libmysql.lib' library,
which is just a wrapper to load in `libmysql.dll' on demand, or link
with the static `mysqlclient.lib' library.

The MySQL client libraries are compiled as threaded libraries, so you
should also compile your code to be multi-threaded.

