ezwinports -- MS-Windows ports of Unix and GNU software
This project is a collection of ports to MS-Windows of GNU and Unix
software packages, which either don't have precompiled Windows
binaries available, or whose existing ports are buggy or broken or
outdated. All the ports are built using the 32-bit MinGW development
environment, with or without MSYS. (MSYS is used to run the
`configure' scripts and the subsequent build with the Make utility,
where these make heavy use of Unix-isms.)
The ports are not necessarily of the "latest and greatest" versions
you can find upstream. But they are well tested and "work for me" in
daily usage (on a couple of XP SP2/SP3 boxes and on Windows 7).
For each package, you will find here 2 compressed archives: a source
archive and a binary archive.
The binary archive includes all the executable programs, dynamic
libraries, header files, and all the documentation files -- in
general, everything that is installed by running "make install". For
those of you who don't have Groff installed, I've included formatted
versions of man pages, so just a port of Less should be enough to
display them. If the executable programs need additional DLLs, they
are also included, to make the zip archive self-contained.
To install a binary archive, simply unzip it, preserving the directory
structure recorded in it, and make sure the 'bin' directory is on your
Path. If you already have a public 'bin' directory, unzip the binary
archive from that 'bin's parent directory. The other directories,
like 'include', 'lib', and 'share' are populated with the rest of the
package; in particular, the man pages are in 'share/man' and
'share/cat', and the Info docs in 'share/info'. It is advisable to
unpack all the archives you download from this site into the same
tree: this will ensure all the packages work seamlessly together.
The source archive includes everything needed to build the binaries;
in particular, the sources are already patched with all the changes
necessary for the Windows port to function correctly. The source
archive also includes the results of configuring the package: the
generated Makefile's, the famous config.h header file, etc. It is
possible that some of the generated files includes traces of my local
directory tree (e.g., I have a Unix-style directory hierarchy under
`D:\usr'), in which case you may need to edit those files to adapt
them to your machine. In most case, but not always, there's a "diffs"
file somewhere that shows the changes I made relative to the original
Most of the ports use a small number of DLLs for libraries, such as
libiconv or libintl, which I didn't build myself. The GPL requires
that the sources of those libraries be available from this very site.
Therefore, I provide those sources in the Dependencies/ subdirectory
of this directory. The file README.txt there explains how to find the
source distribution for the library you are interested in.
Here's a short description of each package you will find in this
This is a port of the official RCS v5.7.13 source to MS-Windows. I
did this port because the existing GnuWin32 port was broken: any RCS
command that required running another program as a subprocess (e.g.,
rcsdiff) would either crash or produce an error message, due to an
unhandled problem in the Windows versions of the spawn* library
This is a Windows port of the `flip' utility, which converts newline
format between Unix LF and DOS/Windows CR-LF conventions. Its home
page is http://packages.debian.org/sid/flip. I like this utility
better than unix2dos/dos2unix, because (a) it's a single program,
(b) it doesn't try to convert character sets, (c) it changes files
in-place while keeping their time stamp intact, and (d) it keeps its
claws off any binary files, so it's safe.
This is a Windows port of GNU Findutils 4.2.30. It includes all the
binaries in the original distribution, even those, such as code.exe,
frcode.exe, and bigram.exe that you are not supposed to need. I
made this port because the GnuWin32 port of v4.2.20 had several
grave problems: find.exe was abysmally slow, xargs.exe didn't work
at all, and neither did locate.exe. This port includes updatedb.bat,
which is a stripped-down replacement for the original updatedb Unix
shell script. Please note that xargs.exe in this distribution has
some issues that cause it to fail sometimes. But find.exe and
locate.exe work flawlessly for me for several years.
This fourth upload, prepared by Erwin Waterlander <email@example.com>,
solves problems that prevented the ported sourced from building with
MinGW64 compiler. As an additional bonus, Erwin also provided his
64-bit binaries that are in a separate findutils-4.2.30-4-w64-bin zip
file. If you are running a 64-bit Windows version, you may wish to
use these 64-bit executables, as they are about 5 times faster than
the 32-bit ones.
This is a Windows port of GNU ID Utils. ID Utils and the
corresponding Emacs front end is an essential part of my Emacs-based
development tool-chain. Without ID Utils, there's no easy way of
finding your ways in a large and complex software project.
Unfortunately, the port available from GnuWin32 is broken and does
not work (mkid emits an error message and quits). So I made my own
Windows port of ID Utils version 3.2d (an interim version that was
only available from alpha.gnu.org in the past, and now deleted even
from alpha.gnu and not available anymore on any GNU site, although
you can still find it on the net if you are persistent enough).
That port was done in May 2005. Later, I upgraded that port using
the user-visible changes from ID Utils 4.5, because I needed ID
Utils to support Java and Lisp, which was not available in v3.2d.
If you wonder why not just port ID Utils 4.5, then you should know
that I found out to my astonishment that 99% of the changes between
4.5 and 3.2d have no user-visible effect. The bulk of the changes
were "portability enhancements". As result of these "enhancements",
the number of files imported from gnulib (in the lib/ subdirectory)
went up from 38 to 143(!), the configury of the package became much
more complex, but the net gain for users in terms of functionality
was almost nil. Needless to say, none of the real problems that
made the Windows port buggy were fixed by these "enhancements"...
So instead of porting ID Utils 4.5, I copied the few changes that
actually contributed to user-visible functionality to the old 3.2d
sources, added to lib/ 3 files that were required for those changes,
fixed a couple more of Windows-related problems (e.g., that `sbrk' is
not available, and therefore "mkid -s" would not display meaningful
memory-usage statistics), and that's what I have now. I call this
version 3.2.99, because its source code base is still largely 3.2
vintage. The ChangeLog file in the top-level directory describes the
Windows-related changes I made in more detail. The file
DIFFS-3.2d-3.2.99.dif shows all the diffs wrt version 3.2d, which
include modifications copied from ID Utils 4.5. I also modified the
Copyright notices of all the old files, to have their years extended
This is a Windows port of the GNU Texinfo package, version 4.13a.
My reasons for making this port are (1) the makeinfo.exe available
from GnuWin32 crashes for any non-trivial Texinfo source; and (2)
info.exe refuses to work on Windows because no one bothered to make
its terminal display code work on Windows. This port solves both of
This is a Windows port of the ministat program, you can find the
original sources here:
AFAIK, there's no Windows port of this program anywhere. The
program is handy for computing statistics and significance testing
of a series of measurements, e.g. running times of some program (for
A Unix `man' command for Windows. Unlike all the other packages on
this page, this one is not a port. It is a clone of its Unix
namesake, and has absolutely no code common with its cousins. I
wrote it originally as part of the DJGPP project
(http://www.delorie.com/djgpp/), and later updated it to compile
with MinGW and run on MS-Windows as a native Windows program.
If you want to view unformatted man pages, you will have to install
a port of Groff (it is available from this page, see below).
A Windows port of GNU Grep.
The latest port available from GnuWin32 is of version 2.5.4, which
was released in Feb 2009, quite some time ago. Also, it always
annoyed me that color highlighting of Grep matches is not available
on MS-Windows. This port of the latest release 2.10 of Grep fixes
To use Perl-style regular expression, Grep needs to be built with
libpcre, so you have this as a bonus below.
Library of Perl-compatible regular expressions. I needed this to
build Grep capable of "grep -P" mode.
A Windows port of GNU Groff.
I successfully used Groff-1.19.1 from GnuWin32 for several years.
However, the latest man pages emit more and more error messages,
because Groff 1.19 doesn't support several new roff features.
GnuWin32 offers version 1.20, but it was released in Jan 2009, and
at least its source GnuWin32 distribution suspiciously lacks several
Therefore, I built the latest release 1.21 using MSYS and MinGW. It
wasn't easy, due to some subtle MSYS problems, but here you have the
A Windows port of GnuTLS 3.0.9. I needed this to build wget
The previous widely available Windows port of GnuTLS was of version
2.11, which is now a major release ago. So I thought it was high
time to have a newer version.
The binary package includes both static and dynamic libraries.
A Windows port of wget 1.13.4.
The GnuWin32 port is of version 1.11.4, which was released a few
years ago. This is the latest released version, as of this writing
A Windows port of file 5.09.
The latest GnuWin32 port is of version 5.03, released in May 2009.
It has a subtle bug that breaks libtool, and also a few Windows
specific gotcha's (e.g., try "file NUL" or "file -"). This port of
the latest upstream release fixes those bugs.
Windows ports of, respectively, GMP (the GNU Multiple Precision
Arithmetic library), Libidn (the GNU IDN library), Nettle (a
cryptographic library), and p11-kit (a package to load and enumerate
PKCS#11 cryptographic modules). I needed them to build GnuTLS and
wget, but they can be useful on their own right, so I provide them
A Windows build of libxml2 2.7.8.
The available Windows ports are compiled with MSVC, which means they
are not 100% compatible with MinGW. The libxml2 sources include a
JScript configuration script, suitable for running with cscript, and
a bunch of Makefile's to go with it. But it looks like this
suffered some bitrot, and it doesn't support running the test suite,
which was important for me to make sure the build is dependable.
So instead of using this Windows-specific stuff, I configured the
package with MSYS and built it using the Posix configury. The
result passed all the tests.
To compile and link programs against libxml2, you will need to
install libiconv, whose headers and import libraries need to be
available to the compiler and linker. You can find the MinGW port
of libiconv on the MinGW site:
(The libxml2 binaries found here were linked against the
A Windows port of GNU Which v2.20
GnuWin32 does offer a port of this latest version of Which, but it
has a few bugs. This port improves on that one:
. Under -a, it shows the executables in exactly the same order as
the shell would look them up.
. It behaves like on Unix when run by a privileged user.
. Supports home directories both if pointed to by the HOME
environment variable and (if HOME is not set) if pointed to by
the USERPROFILE variable.
. Is more consistent in its support for backslashes and forward
. It fixes a couple of minor bugs.
This second upload fixes a bug whereby 'which' would sometimes crash
when invoked with the -a switch.
A Windows port of Lzip, "a lossless data compressor based on the
The only port of Lzip I'm aware of is the one available from the
Lzip download page, which is of version 1.11, quite old. Here you
have the latest version as of this writing.
A Windows port of xz, lzma, and liblzma.
With many GNU projects starting to use .tar.xz archive as their only
format of tarballs, having this on your development box is really a
A Windows port of bzip2 and of libbz2.
GnuWin32 has only a very old version. MinGW does offer version
1.0.6, but it was built in a way that makes the binaries dependent
on the DLL version of libgcc. This means that anyone redistributing
these binaries would have to also provide the humongous 75-MB source
tarball of GCC, to comply with the GPL license. I think this is
ridiculous, so I made my own port, which is free of this
restriction. While at that, I also fixed a couple of bugs in the
existing ports (e.g., try "bunzip2 -c SOMETHING.bz2 > nul", which is
important for measuring decompression speed, if for nothing else).
Note that bzip2.exe in this port is statically linked with libbz2
library, so it doesn't need the DLL to run -- another advantage.
A Windows port of libarchive and of bsdtar and bsdcpio programs.
GnuWin32 has an old version 2.4.12 released in 2008. MinGW offers a
newer version 2.8.3, but it is still old (more than a year ago).
This is the port of the latest release, and it fixes a few upstream
This latest release of bsdtar is really wonderful: it supports most
every format of compressed archives on Earth. gzip, xz, lzma, zip,
rar, 7-zip, even CAB! You name it, it supports that. More
importantly, it does all compression and decompressing in memory,
without invoking external programs, so it's faster (but still uses
the same algorithms and code via the corresponding libraries it
links against). It also supports UTF-16 file names on Windows,
therefore you can now unpack archives created in other Windows
locales, and still have the files unpack under correct names.
In general, the degree of Windows support is very good in this
package, so I think I will abandon GNU Tar, whose current
maintainers are much less friendly to Windows support, and switch to
this package instead.
A Windows port of mairix, a program for indexing and searching email
As far as I know, there are no native Windows ports of mairix
available. I needed it to be able to search my vast email archives
using the Emacs mairix-el package. I only tested this port with the
mbox mail folders, which is all I have, so caveat emptor.
A Windows port of ncurses 5.9. I don't think there's a native
Windows port of this available anywhere. I needed it for Readline
and for Gawk (below), but it should be useful for many other
programs as well. AFAIK, there was never a curses library for
Windows, except for a very old port of PDCurses.
A Windows port of the GNU Readline library. The versions offered by
GnuWin32 are very old. This is the port of the latest release, and
it is built with ncurses, so no Windows-specific hacks were necessary
in the sources.
A Windows port of the OpenSSL package. I needed it for porting XAR
(below), and the build offered by openssl.org seems to be compiled
with MSVC and also it was unclear to me which of the various packages
to install for my needs. So I just built my own.
A Windows port of XAR, the extensible archiver from
http://code.google.com/p/xar/. I'm not aware of any Windows ports of
this available, and I'm not surprised: the code is full of stuff that
is only available on latest Posix systems; porting that was quite a
job. The main reason why you'd be interested in the result is that
it has full support for NTFS security, and can record and restore the
entire NTFS security descriptor of each file, complete with its
owner, primary group, and DACL. (Caveat: use this feature and the
associated -p command-line option with caution: if you don't know
what you are doing, you can easily restore files in a way that will
prevent you from modifying or deleting them.)
This is a Windows build of the GNU MPFR library version 3.1.0 with
the cumulative patches as of 12 Mar 2012 applied. I needed this for
building a development version of Gawk, but I understand many
projects that use extended-precision calculations can use this
(together with GMP, upon which MPFR is built). MinGW, the only
alternative, offers a relatively old port, which is at least partly
dependent on the GCC runtime DLL.
This is a Windows port of Hunspell v1.3.2. Hunspell
(http://hunspell.sourceforge.net/) is a spell-checker with support
for peculiarities of many languages and with Unicode character
codepoints support out of the box. To the best of my knowledge,
there's no other Windows port of Hunspell. In addition, this port
includes fixes for bugs, both Windows-specific and
platform-independent. The result works well for me as the back-end
of the spell-checking features in Emacs. The interactive
curses-based user interface also works, although (due to limitations
of the ported ncurses) only characters in the current ANSI codepage
The binary distribution includes dictionaries for US English and UK
English. You can find the dictionaries for other languages on the
Internet; install them into share/hunspell sub-directory of your
Hunspell installation directory.
This second upload fixes a bug whereby the temporary file with the
text corrected by spell-checking was not renamed to the original
name of the file submitted to the speller. Also, a couple of other
minor bugs reported lately to the Hunspell bug tracker are fixed in
A Windows build of the latest version 4.1.0 of Gawk. This was linked
against Readline, and so has a fully functional command-line editing
interface, including command history, when using the Gawk debugger.
Also, this port was linked against the MPFR library, and so supports
arbitrary-precision floating-point arithmetics, when invoked with the
-M or --bignum command-line options. See the node "Gawk and MPFR" in
the manual for the details. The new dynamic extensions feature is
also supported, see the node "Dynamic Extensions" in the manual.
This is a Windows build of the latest version 5.1 of the GNU Texinfo
package. Note that makeinfo was reimplemented in Perl in this
version, which made it about 18 times slower. So I recommend to keep
makeinfo.exe from version 4.13 around for the time being. If you do
want to use this new makeinfo, you will need to install Perl.
This second upload fixes a bad crash in info.exe, and also a couple
of minor problems in the build scripts, see DIFFS for details.
This is version 2.65 of GNU Autoconf configured for use with the MSYS
environment. The MSYS site does not offer a download of this
version, which is needed for configuring GNU Emacs. Unzip the
archive from the root of the MSYS tree (_not_ the MinGW tree!).
This is version 1.11.6 of Automake configured for use with the MSYS
environment. It is required for configuring and building GNU Emacs
from its bzr repository. Unzip the archive from the root of the MSYS
tree (_not_ the MinGW tree!).