Notes for Building Fauxdacious on Windows

Jim Turner
Nov 18, 2019
from "Building Audacious (v. 3.8) on Windows", by: John Lindgren
May 16, 2015

Several patch files should accompany this document.

Set up system paths

Under My Computer -> Properties -> Advanced -> Environment Variables, set:

PATH=C:\MinGW\bin;C:\MinGW\msys\1.0\bin;C:\Python27;C:\CMake\bin;C:\GTK\bin;C:\libs\bin;C:\aud\bin
PKG_CONFIG_PATH=/C/GTK/lib/pkgconfig:/C/libs/lib/pkgconfig:/C/aud/lib/pkgconfig
C_INCLUDE_PATH=/C/GTK/include:/C/libs/include
CPLUS_INCLUDE_PATH=/C/GTK/include:/C/libs/include
LIBRARY_PATH=/C/GTK/lib:/C/libs/lib

Install MinGW

Download and run:
http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download

In the MinGW Installation Manager window, install the following packages:

Edit the file C:\MinGW\msys\1.0\etc\fstab to contain only the following line, in lowercase:

c:/mingw /mingw

As of version 4.0.3-1, the MinGW runtime library is missing some mathematical functions that are necessary to build Fauxdacious. Downgrade the library by running the following in a command prompt window:

mingw-get upgrade mingw32-mingwrt-dev=3.20-2
mingw-get upgrade mingw32-w32api=3.17-2

Open the file C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h and locate the following line:

/* #undef _GLIBCXX_HAVE_FENV_H */

Change it to read:

#define _GLIBCXX_HAVE_FENV_H 1

Install Python

Download and run:
http://python.org/ftp/python/2.7.6/python-2.7.6.msi

Follow the prompts to install with default options to C:\Python27.

Install CMake

Download to your Desktop folder and run:
https://cmake.org/files/v3.6/cmake-3.6.1-win32-x86.msi

Follow the prompts to install, changing the installation path to C:\CMake.  Might as well tell it NOT to add itself to your "PATH", since it doesn't seem to AND you need it in the order shown above!

Install libpng

Download and unzip to C:\libpng:
http://sourceforge.net/projects/libpng/files/libpng16/1.6.17/libpng-1.6.17.tar.xz/download

In the MinGW shell:

cd /C/libpng
./configure --prefix=/C/GTK
make
make install

Install libjpeg-turbo

Download and unzip to C:\libjpeg:
https://sourceforge.net/projects/libjpeg-turbo/files/1.5.0/libjpeg-turbo-1.5.0.tar.gz/download

In the MinGW shell:

cd /C/libjpeg
./configure --prefix=/C/GTK --without-simd --without-turbojpeg
make
make install

Install libffi

Download and unzip to C:\libffi:
ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz

In the MinGW shell:

cd /C/libffi
./configure --prefix=/C/GTK --with-gcc-arch=i686
make
make install

Install GLib

Download and unzip to C:\glib:
http://ftp.gnome.org/pub/GNOME/sources/glib/2.44/glib-2.44.1.tar.xz

Apply the patch ggettext.c.diff to C:\glib\glib\ggettext.c.
Apply the patch gcontenttype-win32.c.diff to C:\glib\gio\gcontenttype-win32.c.diff.
Apply the patch gwin32appinfo.c.diff to C:\glib\gio\gwin32appinfo.c.diff.
Apply the patch gwin32networking.h.diff to C:\glib\gio\gwin32networking.h.

In the MinGW shell:

cd /C/glib
CFLAGS="-O2 -march=i686" LIBFFI_CFLAGS="-I/C/GTK/lib/libffi-3.2.1/include" LIBFFI_LIBS="-lffi" ZLIB_CFLAGS="" ZLIB_LIBS="-lz" ./configure --prefix=/C/GTK
make
make install

Install pkg-config

Download and unzip to C:\pkgconfig:
https://pkg-config.freedesktop.org/releases/pkg-config-0.29.1.tar.gz

In the MinGW shell:

cd /C/pkgconfig
GLIB_CFLAGS="-I/C/GTK/include/glib-2.0 -I/C/GTK/lib/glib-2.0/include" GLIB_LIBS="-lglib-2.0" ./configure --prefix=/C/GTK
make
make install

Copy C:\GTK\share\aclocal\pkg.m4 to C:\MinGW\share\aclocal.

Install pixman

Download and unzip to C:\pixman:
https://www.cairographics.org/releases/pixman-0.34.0.tar.gz

In the MinGW shell:

cd /C/pixman
./configure --prefix=/C/GTK --disable-sse2 --disable-ssse3
make
make install

Install Cairo

Download and unzip to C:\cairo:
https://www.cairographics.org/releases/cairo-1.14.6.tar.xz

In the MinGW shell:

cd /C/cairo
./configure --prefix=/C/GTK --disable-interpreter
make
make install

Install Pango

Download and unzip to C:\pango:
http://ftp.gnome.org/pub/GNOME/sources/pango/1.40/pango-1.40.1.tar.xz

In the MinGW shell:

cd /C/pango
./configure --prefix=/C/GTK
make
make install

Install gdk-pixbuf

Download and unzip to C:\gdk-pixbuf:
http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/2.34/gdk-pixbuf-2.34.0.tar.xz

In the MinGW shell:

cd /C/gdk-pixbuf
./configure --prefix=/C/GTK --without-gdiplus --without-libtiff --with-included-loaders=jpeg,png
make
make install

Install ATK

Download and unzip to C:\atk:
http://ftp.gnome.org/pub/gnome/sources/atk/2.20/atk-2.20.0.tar.xz

In the MinGW shell:

cd /C/atk
./configure --prefix=/C/GTK
make
make install

Install GTK+

Download and unzip to C:\gtksrc:
http://ftp.gnome.org/pub/GNOME/sources/gtk+/2.24/gtk+-2.24.30.tar.xz

NOTE: It WILL be necessary to run the MinGW shell with administrative privileges for GTK+ to build successfully!  make took 30-50 minutes!  Ignore "has been moved" warnings.

Open up another MinGW shell - (with Admin privileges)!:

cd /C/gtksrc
CFLAGS="-O2 -D_WIN32_WINNT=0x0501" ./configure --prefix=/C/GTK
make
make install

Copy gtkrc (accompanying this document) to C:\GTK\etc\gtk-2.0\gtkrc.

Install intltool

Download and unzip to C:\intltool:
http://ftp.gnome.org/pub/GNOME/sources/intltool/0.40/intltool-0.40.6.tar.bz2

In the MinGW shell:

cd /C/intltool
./configure --prefix=/C/GTK
make
make install

Install GNOME Icon Theme

Download and unzip to C:\gnome-icon-theme:
http://ftp.gnome.org/pub/GNOME/sources/gnome-icon-theme/3.12/gnome-icon-theme-3.12.0.tar.xz

In the MinGW shell (with Admin privileges):

cd /C/gnome-icon-theme
./configure --prefix=/C/GTK --disable-icon-mapping
make
make install

It may be necessary to run the MinGW shell with administrative privileges for GNOME Icon Theme to install successfully.

Install yasm assembler

Download yasm.1.3.0-win32.exe (or latest) and rename to c:\libs\bin\yasm.exe:
http://yasm.tortall.net/Download.html

Install SDL (v2)

Download and unzip to C:\libsdl:
https://www.libsdl.org/download-2.0.php and download the file: SDL2-devel-2.0.5-mingw.tar.gz, untar it into c:\libsdl2.

In the MinGW shell:

cd /C/libsdl2
./configure --prefix=/C/libs
make
make install

Fauxdacious Note:  The compiled SDL dll does NOT work for all videos (most produce black screen), but does provide the needed header files, so I ended up also downloading the Win32 binary from here: https://www.libsdl.org/download-1.2.php and copying the provided SDL.dll file to c:\libs\bin\ (which does work for all videos)!

Install GNU regex

Download and unzip to C:\libs:
http://sourceforge.net/projects/mingw/files/Other/UserContributed/regex/mingw-regex-2.5.1/mingw-libgnurx-2.5.1-bin.tar.gz/download
http://sourceforge.net/projects/mingw/files/Other/UserContributed/regex/mingw-regex-2.5.1/mingw-libgnurx-2.5.1-dev.tar.gz/download

Install libxml

Download and unzip to C:\libxml:
ftp://xmlsoft.org/libxml2/libxml2-2.9.4.tar.gz

In the MinGW shell:

cd /C/libxml
./configure --prefix=/C/libs --with-python=no
make
make install

Install mpg123

Download and unzip to C:\mpg123:
http://mpg123.de/download/mpg123-1.23.6.tar.bz2

In the MinGW shell:

cd /C/mpg123
./configure --prefix=/C/libs
make
make install

Install libfaad

Download and unzip to C:\libfaad:
https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/faad2-2.8.8.tar.gz/download

Apply the patch libfaad-makefile.am.diff to C:\libfaad\libfaad\Makefile.am.
Apply the patch libfaad-main.c.diff to C:\libfaad\frontend\main.c.

In the MinGW shell:

cd /C/libfaad
cp /C/MinGW/share/libtool/config/ltmain.sh .
autoreconf
./configure --prefix=/C/libs
make
make install

Install libsndfile

Download and unzip to C:\libsndfile:
http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz

In the MinGW shell:

cd /C/libsndfile
./configure --prefix=/C/libs
make
make install

Install libbs2b

Download and unzip to C:\libbs2b:
http://sourceforge.net/projects/bs2b/files/libbs2b/3.1.0/libbs2b-3.1.0.tar.bz2/download

Apply the patch libbs2b-makefile.am.diff to C:\libs2b\src\Makefile.am.

In the MinGW shell:

cd /C/libbs2b
cp /C/MinGW/share/libtool/config/ltmain.sh build-aux
autoreconf
./configure --prefix=/C/libs
make
make install

Install libcdio

Download and unzip to C:\libcdio:
http://ftp.gnu.org/gnu/libcdio/libcdio-0.83.tar.gz

Apply the patch libcdio-util.c.diff to C:\libcdio\src\util.c.

In the MinGW shell:

cd /C/libcdio
./configure --prefix=/C/libs --disable-rock
make
make install

Install libcddb

Download and unzip to C:\libcddb:
http://sourceforge.net/projects/libcddb/files/libcddb/1.3.2/libcddb-1.3.2.tar.bz2/download

In the MinGW shell:

cd /C/libcddb
./configure --prefix=/C/libs
make
make install

Install libcue

Download and unzip to C:\libcue:
https://github.com/lipnitsk/libcue/archive/v2.1.0.tar.gz

Apply the patch libcue-makefile.am.diff to C:\libcue\src\libcue\Makefile.am.

In the MinGW shell:

cd /C/libcue
cmake -DCMAKE_INSTALL_PREFIX=/C/libs -G"MSYS Makefiles"
make
make install

Fauxdacious Note:  This is under new management so the URL changed from the Audacious notes (the new URL is shown above)

Install LAME

Download and unzip to C:\lame:
http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download

In the MinGW shell:

cd /C/lame
sed -i -e '/xmmintrin\.h/d' configure   #LAME won't compile w/o this change (see: http://blfs-dev.linuxfromscratch.narkive.com/9JWdWm7K/i686-lame-fails-to-build-for-me)!
./configure --prefix=/C/libs
make
make install

Install libflac

Download and unzip to C:\libflac:
http://downloads.xiph.org/releases/flac/flac-1.3.1.tar.xz

In the MinGW shell:

cd /C/libflac
./configure --prefix=/C/libs --disable-asm-optimizations --disable-sse --disable-ogg
make
make install

Fauxdacious Note:  I built without the --disable-asm-optimizations option.

Install libogg

Download and unzip to C:\libogg:
http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.xz

In the MinGW shell:

cd /C/libogg
./configure --prefix=/C/libs
make
make install

Install libvorbis

Download and unzip to C:\libvorbis:
http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.xz

In the MinGW shell:

cd /C/libvorbis
./configure --prefix=/C/libs
make
make install

Optional: Install libopenssl

(Only needed to play https streams, ie. youtube / vimeo videos)

1) Download and unzip to C:\libopenssl:
http://gnuwin32.sourceforge.net/packages/openssl.htm (BOTH the "Binaries" AND the "Developer Files" zipfiles)

2) After unzipping both, copy (recursively) everything in the bin/, lib/, and include/ directories to their respective locations under C:\libs\.

3) You'll need to EDIT the three new files in C:\libs\lib\pkgconfig\ (libssl.pc, openssl.pc, and libcrypto.pc) and change the "prefix=" line to "prefix=/C/libs".

4) You'll need to copy C:\libs\bin\libssl32.dll to C:\libs\bin\ssleay32.dll; copy C:\libs\lib\libssl32.dll.a C:\libs\lib\libssl.dll.a; and copy C:\libs\lib\libeay32.dll.a to C:\libs\lib\libcrypto.dll.a (This is due to the fact that libneon expects these to be under the new names, for reasons unbeknownst to me.)

5) Include the flag "--with-ssl=openssl" when you configure libneon (next)

Install libneon

Download and unzip to C:\libneon:
http://www.webdav.org/neon/neon-0.30.2.tar.gz

In the MinGW shell:

cd /C/libneon
./configure --prefix=/C/libs --enable-shared [--with-ssl=openssl]
make
make install

Install libsamplerate

Download and unzip to C:\libsamplerate:
http://www.mega-nerd.com/SRC/libsamplerate-0.1.8.tar.gz

In the MinGW shell:

cd /C/libsamplerate
./configure --prefix=/C/libs
make
make install

Install libwavpack

Download and unzip to C:\libwavpack:
http://www.wavpack.com/wavpack-4.80.0.tar.bz2

Apply the recursive patch wavpack-4.80.diff.

NOTE: I had to edit the diff file splitting it up into 3 separate files, one for each "diff" and remove the "diff" lines out of each and apply each individually with patch command from the directory that "wavpack-###" subdirectory was in?!

In the MinGW shell:

cd /C/libwavpack
./configure --prefix=/C/libs
make
make install

Install FFmpeg

Download and unzip latest version to C:\ffmpeg:
http://ffmpeg.org/releases/ (note the "httP url)

In the MinGW shell:

cd /C/ffmpeg
./configure --prefix=/C/libs --enable-shared --enable-ffplay --enable-gpl --enable-postproc --enable-nonfree [--enable-gray] --cpu=i686
make
make install

Fauxdacious Note:  (This flag list worked for me).  NOTE: You'll have to change the /C/libs/bin/av*, swresample, and postproc dlls' version#s (in the file names) in the Fauxdacious_install.iss config file, if updating!
DEPRECIATED!:  When trying to get all videos to play (which ended up with SDL being the culprit), I ended up also fetching the "Shared" and "Dev" versions from here:  https://ffmpeg.zeranoe.com/builds/ and copying the .a and .dll (and ffplay.exe) files over the ones I compiled into c:\libs\, however, if you get videos playing with ffplay, you can SKIP all this!

Install Libbinio

Download and unzip to C:\libbinio:
https://sourceforge.net/projects/libbinio/files/latest/download

In the MinGW shell:

cd /C/libbinio
Edit /C/libbinio/src/binwrap.cpp and ADD "#include <stdio.h>" (see: https://github.com/repoforge/rpms/blob/master/specs/libbinio/libbinio-1.4-includes.patch)!
cp /C/MinGW/share/libtool/config/ltmain.sh .
autoreconf
./configure --prefix=/C/libs
make
make install

Install libmms

Download and unzip to C:\libmms:
http://sourceforge.net/projects/libmms/files/libmms/0.6.4/libmms-0.6.4.tar.gz/download

Apply the patch libmms-strndup.diff (it changes multiple files).

In the MinGW shell:

cd /C/libmms
cp /C/MinGW/share/libtool/config/ltmain.sh .
autoreconf
./configure --prefix=/C/libs
make
make install

Install libmodplug

Download and unzip to C:\libmodplug:
http://sourceforge.net/projects/modplug-xmms/files/libmodplug/0.8.8.5/libmodplug-0.8.8.5.tar.gz/download

In the MinGW shell:

cd /C/libmodplug
./configure --prefix=/C/libs
make
make install

Install libsidplayfp

Download and unzip to C:\libsidplayfp:
https://sourceforge.net/projects/sidplay-residfp/files/libsidplayfp/1.8/libsidplayfp-1.8.6.tar.gz/download

In the MinGW shell:

cd /C/libsidplayfp
./configure --prefix=/C/libs
make
make install

Install FluidSynth

Download and unzip to C:\fluidsynth:
http://sourceforge.net/projects/fluidsynth/files/fluidsynth-1.1.6/fluidsynth-1.1.6.tar.bz2/download

Apply the patch fluidsynth.diff (it changes multiple files).

In the MinGW shell:

cd /C/fluidsynth
./autogen.sh
./configure --prefix=/C/libs
make
make install

(needed for DVD player plugin): Install libdvdread

Download and unzip to C:\libdvdread-5.0.3:
http://download.videolan.org/videolan/libdvdread/5.0.3/libdvdread-5.0.3.tar.bz2

In the MinGW shell:

cd /C/libdvdread-5.0.3
./configure --prefix=/C/libs --disable-static
make LDFLAGS=-no-undefined
make install

(needed for DVD player plugin): Install libdvdnav

Download and unzip to C:\libdvdnav-5.0.3:
http://download.videolan.org/videolan/libdvdnav/5.0.3/libdvdnav-5.0.3.tar.bz2

In the MinGW shell:

cd /C/libdvdnav-5.0.3
./configure --prefix=/C/libs --disable-static
make LDFLAGS=-no-undefined
make install

Install Fauxdacious

Download and unzip to C:\fauxdacious:
http://phoenixcomm.net/~jturner/

In the MinGW shell:

cd /C/fauxdacious
Fauxdacious Note:  You should make sure that the "-win32.*" versions of the image files are used in /C/fauxdacious/src/images/about-logo.*!

./autogen.sh
./configure --prefix=/C/aud --with-buildstamp=Fauxdacious
make
make install

Install Fauxdacious Plugins

Download and unzip to C:\fauxdacious-plugins:
http://phoenixcomm.net/~jturner/

In the MinGW shell:

cd /C/fauxdacious-plugins
./autogen.sh
./configure --prefix=/C/aud [--with-libsdl=2]
make
make install
cd /C/fauxdacious-plugins/src/waveout #(to add the new Windows native audio output plugin)
make
make install

NOTE:  I had to go into Windows Explorer and make the directoriy c:\aud owned by me and give myself "full control" to prevent Windows from making the dll files READONLY and preventing me from recompiling and subsequent "make install"s fail w/"permission denied"!

(Optional) Create executable Fauxdacious Windows Binary Install Wizard

To build the installable binary (for use on other MS-Windows systems), download and untar the file http://phoenixcomm.net/~jturner/faud.tar.bz2 in your root directory (C:\). It will create a directory called C:\faud\.

Download the Inno Setup Wizard(tm), and install it.

In the gui / editor window, open the file C:\fauxdacious-3.8\contrib\win32\installer\Fauxdacious.iss, then select [Build].[Cimpile] to create the executable binary "Fauxdacious_install.zip". By defauit it creates and puts it in a folder called "Output" in "My Documents". It combines what's in C:\fauxdacious-[vsn#]\, C:\fauxdacious-plugins-[vsn#], and C:\faud\ to build the fully-independent stand-alone binary executable. When run on another M$-Windows machine, it installs Fauxdacious, fauxdtool, and all the necessary libraries needed to run Fauxdacious (and nothing else - no crapware!). To configure Fauxdacious on systems where it is installed, the default configuration file (editable with Notepad, Wordpad, etc.) is installed as C:\Users\[user-id]\AppData\Local\fauxdacious\config. (at least on Windows-7).