
Building XZ Utils on Windows
============================

Introduction
------------

    This document explains shortly where to get and how to install the
    build tools that are needed to build XZ Utils on Windows. The final
    binary package will be standalone in sense that it will depend only
    on DLLs that are included in all Windows installations.

    These instructions don't apply to Cygwin. XZ Utils can be built under
    Cygwin in the same way as many other packages.

    These instructions don't apply to MinGW and MSYS developers either,
    who may want to package XZ Utils for MinGW or MSYS distributions.
    You know who you are, and will probably use quite different configure
    options etc. than what is described here.


Installing the toolchain(s)
---------------------------

    Some of the following is needed:
      - MSYS is always needed to use the GNU Autotools based build system.
      - MinGW builds 32-bit x86 binaries.
      - 32-bit MinGW-w64 (I call it MingW-w32 here) builds 32-bit x86
        executables too.
      - MinGW-w64 builds 64-bit x86-64 binaries.

    So you need to pick between MinGW and MinGW-w32 when building
    32-bit version. You don't need both.

    You might find 7-Zip <https://7-zip.org/> handy when extracting
    some files. The ready-made build script build.bash will also use
    7-Zip to create the distributable .zip and .7z files.

    I used the following directory structure but you can use whatever
    you want. Just note that I will use these in my examples. Each of
    these should have a subdirectory "bin":

        C:\devel\tools\msys
        C:\devel\tools\mingw
        C:\devel\tools\mingw-w32
        C:\devel\tools\mingw-w64


Installing MSYS

    You can download MSYS from MinGW's Sourceforge page:

        https://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/

    I recommend using MSYS 1.0.11 (MSYS-1.0.11.exe or
    msysCORE-1.0.11-bin.tar.gz) because that package includes all the
    required tools. At least some of the later versions include only
    a subset and thus you would need to download the rest separately.
    The old version will work fine for building XZ Utils.

    You can use either the .exe or .tar.gz package. I prefer .tar.gz,
    because it can be extracted into any directory and later removed
    without worrying about uninstallers.


Installing MinGW

    NOTE: This section may be outdated. I haven't tried MinGW recently.

    You can download the required packages from MinGW's Sourceforge page:

        https://sourceforge.net/projects/mingw/files/

    These version numbers were the latest when I wrote this document, but
    you probably should pick the latest versions:

        MinGW Runtime -> mingwrt-3.17-mingw32-dev.tar.gz
        MinGW API for MS-Windows -> w32api-3.14-mingw32-dev.tar.gz
        GNU Binutils -> binutils-2.20-1-bin.tar.gz
        GCC Version 4 -> gcc-full-4.4.0-mingw32-bin-2.tar.lzma

    The full GCC package is quite big, but if you want a smaller
    download, you will need to download more than one file, so I'm
    using the full package in this document for simplicity.

    Extract the packages in the above order, possibly overwriting files
    from packages that were extracted earlier.


Installing MinGW-w32 or MinGW-w64

    I used the packages from Mingw-builds project. With that it is
    enough to pick one .7z file for 32-bit and another for 64-bit
    toolchain. For XZ Utils 5.2.0 I used the packages from these
    directories:

        https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/

        https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/sjlj/

    If you install both MinGW-w32 and MinGW-w64, remember to extract
    them into different directories. build.bash looks at
    C:\devel\tools\mingw-w32 and C:\devel\tools\mingw-w64 by default.


Building XZ Utils
-----------------

    Start MSYS by going to the directory C:\devel\tools\msys and running
    msys.bat there (double-click or use command prompt). It will start
    at "home" directory, which is C:\devel\tools\msys\home\YourUserName.

    If you have xz-5.x.x.tar.gz in C:\devel, you should be able to build
    it now with the following commands:

        cd /c/devel
        tar xzf xz-5.x.x.tar.gz
        cd xz-5.x.x
        bash windows/build.bash

    If you used some other directory than C:\devel\tools for the build
    tools, edit the variables near the beginning of build.bash first.

    If you want to build manually, read the buildit() function in
    build.bash. Look especially at the latter configure invocation.

    Be patient. Running configure and other scripts used by the build
    system is (very) slow under Windows.


Using a snapshot from the Git repository

    To use a snapshot, the build system files need to be generated with
    autogen.sh or "autoreconf -fi" before trying to build using the
    above build instructions. You can install the relevant extra packages
    from MinGW or use Cygwin or use e.g. a GNU/Linux system to create a
    source package with the required build system files.

