Pd is easily built with free tools on Microsoft Windows, and recently with the creation of the mingw-get tool, its much easier to get started. While you could probably use the most current versions of all of the packages below, the links provided are versions that are known to work.
== Tortoise SVN ==
TortoiseSVN provides a native Windows SVN. Its best to use native Windows tools for this process, but Cygwin tools can also work.
*Download [http://tortoisesvn.net/downloads.html TortoiseSVN], either 32-bit or 64-bit works for this process
*customize setup to include '''command line client tools'''
== Git for Windows ==
There is a build of Git for Windows that is based on MinGW MSYS, but is in its own installer. For this process a native git is preferred, but its possible to use Cygwin git too.
*Download [http://code.google.com/p/msysgit/downloads/detail?name=Git-1.8.0-preview20121022.exe&can=2&q=full+installer+official+git Git-1.8.0-preview20121022.exe] and install it.
*choose '''Run Git from the Windows Command Prompt''' from the ''Adjusting your PATH environment'' step in the installer
== Cygwin ==
[http://cygwin.com Cygwin] is relatively easy to install and provides a much better working environment for things like subversion. !MinGW lacks full support for some of the GNU utils like rsync, git, svn, etc., so install Cygwin's version.
Download [http://cygwin.com/setup-x86.exe setup-x86.exe] or [http://cygwin.com/setup-x86_64.exe setup-x86_64.exe] and run it to install Cygwin. Install it in the default location.
Once you get to the ''Select Packages'' screen, click the button on the upper right corner labeled ''View'' and change it to ''Full''. Now find '''git''', '''make''', '''openssh''', '''patch''', '''rsync''', '''sed''', '''svn''', '''zip''', and '''unzip''' and make sure they are set to install. This is represented by a version number to be installed instead of ''Skip''.
If you want the automated build scripts to work, you will need to [http://superuser.com/questions/27668/how-can-i-add-cygwin-bin-to-the-search-path-in-windows-xp/27671#27671 add Cygwin to your system PATH].
== ASIO SDK ==
First, download the [http://www.steinberg.net/nc/en/company/developer/sdk_download_portal.html ASIO SDK]. You have to agree to Steinberg's license, then submit an email address, then they'll send you the download URL in an email. Uncompress '''asiosdk2.2.zip''' into '''path/to/pd/asio''' so that the files are in '''path/to/pd/asio/ASIOSDK2'''.
You can also leave the '''asiosdk2.2.zip''' file directly in the home folder of MSYS, i.e. '''~/asiosdk2.2.zip''' in the MSYS/MinGW shell or '''C:\MinGW\msys\1.0\home\%USER%\asiosdk2.2.zip'''. The Pd-extended build system will look for it there and automatically unzip it in the right place. For Pd-vanilla, you'll have to unzip in manually in the right place.
== !MinGW ==
Download the [http://www.mingw.org/ !MinGW] package installer and run it:
1. [http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20120426/mingw-get-inst-20120426.exe/download mingw-get-inst-20120426.exe]
1. Accept the GPLv3 and click ''Next''
1. Choose the '''Use pre-packaged repository catalogues''' and click ''Next''
1. Install into the default location: '''C:\MinGW''' and click ''Next''
1. Check all Components ('''MinGW Compiler Suite''', '''MSYS Basic System''', and '''MinGW Developer Toolkit'''). and click ''Next''
1. wait for the installer to download and install everything, now you have a working MinGW install and MSYS shell.
== Configuring MSYS ==
For the next steps, you will be using the MSYS shell that was installed from the MSYS installer. You can launch it from the Desktop shortcut or '''Start --> Programs --> !MinGW --> !MinGW Shell'''. Once you are in the MSYS shell, you need to make '''/usr/local''' by running:
Now edit '''C:\MinGW\msys\1.0\etc\fstab''' using a good text editor (`vim` is now included in MinGW, Wordpad will work but '''not''' Notepad), or from within the MinGW/MSYS shell, `vim /etc/fstab`. In that file, make sure you have these two lines (case is important!):
Then quit all MSYS shells, and restart an MSYS shell, and check with the
'''mount''' command that both of the above directories are mounted. To
do that, run '''mount'''. You should see these lines within the rest:
c:\MinGW on /mingw type user (binmode)
c:\MinGW on /usr/local type user (binmode)
You can add MinGW and MSYS to the PATH so that Windows tools like `cmd.exe` can find them. For how to setup the environment variables for MSYS, check out Figure 10 and after in Max Berger's [http://max.berger.name/howto/cdt/ar01s03.jsp Setting up the compiler].
== !MinGW extras ==
We need some packages that are not part of the default install, but are included in MinGW. In the MinGW/MSYS shell, run:
mingw-get install automake1.10 automake1.9 bzip2 expat gcc-ada gcc-fortran \
gcc-g++ gcc-objc gendef gettext gmp libasprintf libbz2 libexpat libiconv \
libpthreadgc libtool libz lua mingw-utils pexports pkginfo msys-bash \
msys-bison msys-cygutils msys-dos2unix msys-findutils msys-gawk msys-gmp \
msys-gzip msys-less msys-libgmp msys-libregex msys-make msys-rsync \
msys-texinfo msys-wget msys-unzip msys-zip
For some reason, mingw also installs some very old versions of automake. They just get in the way and cause trouble, so remove them:
mingw-get remove automake1.4 automake1.5 automake1.6 automake1.7 automake1.8
== You can now build Pd-vanilla! ==
Your setup is now ready to build Pd-vanilla or the core of Pd-extended. The rest of these instructions cover setting up all of the libraries for a complete Pd-extended build environment.
== Binaries from MinGW and GTK+ ==
The GTK+ project provides a number of [http://www.gtk.org/download/win32.php binaries for Windows]. We use a few of them here. Download and install them into '''C:\!MinGW''' using the !MinGW/MSYS shell. The easiest way to do this is with with !MinGW/MSYS shell, by running these commands:
tar --directory /mingw -xzf mingw-libgnurx-2.5.1-bin.tar.gz
tar --directory /mingw -xzf mingw-libgnurx-2.5.1-dev.tar.gz
wget --no-check-certificate https://www.tortall.net/projects/yasm/releases/yasm-1.2.0-win32.exe
mv yasm-1.2.0-win32.exe /mingw/bin/yasm.exe
unzip pkg-config_0.25-1_win32.zip -d /mingw
unzip pkg-config-dev_0.25-1_win32.zip -d /mingw
unzip glib_2.28.1-1_win32.zip -d /mingw
unzip glib-dev_2.28.1-1_win32.zip -d /mingw
unzip gettext-runtime_0.18.1.1-2_win32.zip -d /mingw
The last step will prompt you to replace /mingw/share/locale/locale.alias, say '''Yes'''.
== copying libgmp-10.dll for cc1.exe ==
Sometimes, you might get [http://www.ogre3d.org/forums/viewtopic.php?f=2&t=65683 an error about cc1.exe missing libgmp-10.dll]. You can test this by running `./configure` in '''libtheora'''. A kludge to fix it is to copy the DLLs into place right next to cc1.exe. At the time of writing this document, it worked like this:
cp libgmp-10.dll libmpc-2.dll libmpfr-1.dll libintl-8.dll /mingw/libexec/gcc/mingw32/4.7.2/
cp libintl-8.dll libiconv-2.dll /mingw/mingw32/bin
== Inno Unpack ==
For the Pd-extended ''zip'' distro, the Inno Setup package needs to be unpacked then zipped up. For that, we use `innounp` so we don't need admin rights to unpack it. Download [https://sourceforge.net/projects/innounp/files/innounp/innounp%200.37/innounp037.rar/download innounp037.rar] and unrar it into ''C:\MinGW\bin''
=== QuickTime SDK ===
Gem uses [http://developer.apple.com/quicktime/ !QuickTime] on Windows for reading and writing video files. You need an Apple ID in order to log in and download the `quicktimesdk.zip`. First login by clicking [http://connect.apple.com this link], then once logged in, click this link to download the file: [http://adcdownload.apple.com/QuickTime/quicktime_7.3_sdk_for_windows/quicktimesdk.zip !QuickTime 7.3 SDK for Windows]. Once you have it, unzip it, then double-click the `!QuickTimeSDK.exe` and install using all of the defaults.
= Install Inno Setup package building =
== Inno Setup/!ISTool ==
[http://www.jrsoftware.org/isinfo.php Inno Setup] is free installer generator for Windows. [http://www.istool.org/ !ISTool] is a nicer IDE for Inno scripts. This is used to assemble the Pd-extended installer.
[http://files.jrsoftware.org/ispack/ispack-5.5.2-unicode.exe ispack-5.5.2-unicode.exe] downloads and installs everything for you.
= Building library dependencies for Windows from SVN '/sources' =
There are many libraries needed for building Pd libraries that are not yet available via `mingw-get` or binaries. The best way to get these currently is to build them from source. For Pd-extended, you can get the sources from SVN and run this script to build it all:
svn co https://pure-data.svn.sourceforge.net/svnroot/pure-data/sources
This will run for a while, and if it completes successfully, it will have installed all of the libraries needed for Pd-extended. It should be safe to run '''./build-libs-on-mingw.sh''' again if something failed.
= Building Pd =
Now you're ready to start building Pd. First, you'll need to start with [GettingPdSource], then you can move onto [BuildingPd] or [BuildingPdExtended].
= Updating this Process =
There are definitely some improvements that can be made to this up build process. !MinGW is widely used, but its not widely standardized. So many people have many different ways of building common libs for !MinGW. This process is an effort to unify them, the biggest recent development along these lines is `mingw-get`. As of this writing, this process can successfully build ffmpeg with many codecs. The last huge gap is gmerlin-avdecoder, which is used by ![readanysf~] and Gem. There are a number of additional codecs that are not yet part of this process, for example openjpeg builds but doesn't seem to work, then there is libgsm and quite a few other codec libraries that ffmpeg and gmerlin-avdecoder can use. You can contribute by getting these building and working on MinGW and posting your results on [http://lists.puredata.info/listinfo/pd-dev pd-dev].
== Libraries ==
Here are some documents that look to have some very useful info, but has not yet been incorporated into this process:
*[http://www.pygame.org/wiki/MinGWBuildingDependenciesByHand?parent=MingW zlib, libpng, libjpeg, libtiff, and more]