This section describes how to compile the necessary additional packages and install them in ${LOCALDESTDIR}. This variable is set to /local32 or /local64, depending on your build environment.
Content
The pkg-config tool is necessary to build a number of local packages. To resolve of a circular dependency between pkg-config and glib I've provided a staticly linked version we install in ${LOCALDESTDIR}. Later on we'll replace it with our own build.
Unpack the archive and install pkg-config into ${LOCALDESTDIR}.
cd ${LOCALSOURCEDIR} && \ wget -c http://ingar.satgnu.net/devenv/mingw32/files/msys-pkg-config-0.26-static.zip && \ cd ${LOCALBUILDDIR} && \ unzip ${LOCALSOURCEDIR}/msys-pkg-config-0.26-static.zip && \ install pkg-config.exe ${LOCALDESTDIR}/bin
There is a bug that affects the next part of this guide, as a workaround we install a pkg-config.sh wrapper script:
cat > ${LOCALDESTDIR}/bin/pkg-config.sh << "EOF" #!/bin/sh if pkg-config "$@" > /dev/null 2>&1 ; then res=true else res=false fi pkg-config "$@" | tr -d \\r && $res EOF
Make the script executable and point the PKG_CONFIG environment variable to the script:
chmod ugo+x ${LOCALDESTDIR}/bin/pkg-config.sh && \ echo "PKG_CONFIG=${LOCALDESTDIR}/bin/pkg-config.sh" >> ${LOCALDESTDIR}/etc/profile.local && \ echo "export PKG_CONFIG" >> ${LOCALDESTDIR}/etc/profile.local
Load the altered profile.local:
source ${LOCALDESTDIR}/etc/profile.local
References:
zlib is a compression library.
Build and install the zlib dll by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.zlib.net/zlib-1.2.11.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/zlib-1.2.11.tar.gz && \ cd zlib-1.2.11 && \ sed 's/-O3/-O3 -mms-bitfields -mthreads/' win32/Makefile.gcc >Makefile.gcc && \ make IMPLIB='libz.dll.a' -fMakefile.gcc && \ install zlib1.dll ${LOCALDESTDIR}/bin && \ install libz.dll.a ${LOCALDESTDIR}/lib && \ install libz.a ${LOCALDESTDIR}/lib && \ install zlib.h ${LOCALDESTDIR}/include && \ install zconf.h ${LOCALDESTDIR}/include
Create the pkgconfig files for zlib:
echo "prefix=${LOCALDESTDIR}" > ${LOCALDESTDIR}/lib/pkgconfig/zlib.pc && \ cat >> ${LOCALDESTDIR}/lib/pkgconfig/zlib.pc << "EOF" exec_prefix=${prefix} libdir=${exec_prefix}/lib sharedlibdir=${libdir} includedir=${prefix}/include Name: zlib Description: zlib compression library Version: 1.2.11 Requires: Libs: -L${libdir} -L${sharedlibdir} -lz Cflags: -I${includedir} EOF
Build and install the minizip library:
cd contrib/minizip && \ autoreconf -i && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
The Netwide Assembler.
Build and install nasm by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/nasm-2.13.01.tar.gz && \ cd nasm-2.13.01 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
The Simple Direct Media Layer is a cross-platform application framework.
Download a necessary patch:
Build and install SDL2 by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.libsdl.org/release/SDL2-2.0.5.tar.gz && \ wget -c http://ingar.satgnu.net/devenv/mingw32/files/patches/SDL2-2.0.5-fix-duplicate_definition.patch && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/SDL2-2.0.5.tar.gz && \ cd SDL2-2.0.5 && \ patch -Np1 -i ${LOCALSOURCEDIR}/SDL2-2.0.5-fix-duplicate_definition.patch && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
Command explanation:
Build the SDL2 test programs by executing the following commands:
cd test && \ ./autogen.sh && \ ./configure && \ make testplatform.exe testgl2.exe testthread.exe
Command explanation:
Run the SDL2 test programs:
./testplatform
./testgl2
The following test takes some time to complete, it won't show any output until it's done.
./testthread
References:
libng is PNG image file format library.
Build and install libpng by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c --no-check-certificate "https://downloads.sourceforge.net/libpng/libpng-1.6.29.tar.gz" && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/libpng-1.6.29.tar.gz && \ cd libpng-1.6.29 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
libjpeg is a JPEG image file format library.
Build and install libjpeg by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.ijg.org/files/jpegsrc.v9b.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/jpegsrc.v9b.tar.gz && \ cd jpeg-9b && \ ./configure --prefix=${LOCALDESTDIR} --enable-shared --enable-static && \ make && \ make install
libtiff provides support for the Tag Image File Format (TIFF), a widely used format for storing image data.
Build and install libtiff by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c ftp://download.osgeo.org/libtiff/tiff-4.0.8.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/tiff-4.0.8.tar.gz && \ cd tiff-4.0.8 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
WebP is a modern image format that provides superior lossless and lossy compression for images on the web.
Build and install libwebp by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget --no-check-certificate -c https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.6.0.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/libwebp-0.6.0.tar.gz && \ cd libwebp-0.6.0 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
SDL2_image is an image support library for SDL2
Build and install SDL_image by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/SDL2_image-2.0.1.tar.gz --exclude=Xcode && \ cd SDL2_image-2.0.1 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
SDL2_ttf is a TrueType font support library for SDL2.
Build and install SDL_image by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget --no-check-certificate -c https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/SDL2_ttf-2.0.14.tar.gz --exclude=Xcode && \ cd SDL2_ttf-2.0.14 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
OpenAL Soft is an implementation of the OpenAL 3D audio API.
Build and install OpenAL Soft by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://kcat.strangesoft.net/openal-releases/openal-soft-1.17.2.tar.bz2 && \ cd ${LOCALBUILDDIR} && \ tar xjf ${LOCALSOURCEDIR}/openal-soft-1.17.2.tar.bz2 && \ cd openal-soft-1.17.2 && \ cd build && \ cmake -DCMAKE_INSTALL_PREFIX:PATH=${LOCALDESTDIR} -G "MSYS Makefiles" .. && \ make && \ make install
Test the OpenAL Soft installation:
openal-info
smpeg is an mpeg file format library
Build and install smpeg by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://ingar.satgnu.net/devenv/mingw32/files/patches/smpeg-2.0.0-gcc6.patch && \ cd ${LOCALBUILDDIR} && \ svn export svn://svn.icculus.org/smpeg/tags/release_2_0_0 smpeg-2.0.0 && \ cd smpeg-2.0.0 && \ patch -Np1 -i ${LOCALSOURCEDIR}/smpeg-2.0.0-gcc6.patch && \ ./autogen.sh && \ ./configure --prefix=${LOCALDESTDIR} --enable-mmx && \ make && \ make install
References:
libogg is an ogg bitstream format library
Build and install libogg by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/libogg-1.3.2.tar.gz && \ cd libogg-1.3.2 && \ LDFLAGS='-mwindows' ./configure --prefix=${LOCALDESTDIR} --docdir=${LOCALDESTDIR}/share/doc/libogg-1.3.2 && \ make && \ make install
libvorbis is a vorbis audio format library
Build and install libvorbis by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/libvorbis-1.3.5.tar.gz && \ cd libvorbis-1.3.5 && \ LDFLAGS='-mwindows' ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
FLAC is a Free Lossless Audio Codec.
Download and extract the FLAC source code by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://downloads.xiph.org/releases/flac/flac-1.3.2.tar.xz && \ cd ${LOCALBUILDDIR} && \ tar xJf ${LOCALSOURCEDIR}/flac-1.3.2.tar.xz && \ cd flac-1.3.2
Build and install the package (32-bit):
./configure --disable-xmms-plugin --prefix=${LOCALDESTDIR} && \ make && \ make install
Build and install the package (64-bit):
./configure --disable-xmms-plugin --build=x86_64-w64-mingw32 --prefix=${LOCALDESTDIR} && \ make && \ make install
SDL2_mixer is an audio support library for SDL2.
Build and install SDL_mixer by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/SDL2_mixer-2.0.1.tar.gz --exclude=Xcode && \ cd SDL2_mixer-2.0.1 && \ ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
OpenSSL is a library that implements the Secure Sockets Layer(SSL) and Transport Layer Security (TLS) protocols.
Download and extract the OpenSLL source code by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget -c ftp://ftp.openssl.org/source/openssl-1.0.2l.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/openssl-1.0.2l.tar.gz && \ cd openssl-1.0.2l
Build the package (32-bit):
./Configure --prefix=${LOCALDESTDIR} --openssldir=${LOCALDESTDIR}/etc/ssl --libdir=lib shared zlib-dynamic mingw && \ make
Build the package (64-bit):
./Configure --prefix=${LOCALDESTDIR} --openssldir=${LOCALDESTDIR}/etc/ssl --libdir=lib shared zlib-dynamic mingw64 && \ make
Run the test suite to verify the build:
make test
Install the package:
make MANDIR=${LOCALDESTDIR}/share/man MANSUFFIX=ssl install
curl is a command line tool for transferring data with URL syntax
Build and install curl by executing the following commands:
cd ${LOCALBUILDDIR} && \ tar xjf ${LOCALSOURCEDIR}/curl-7.54.0.tar.bz2 && \ cd curl-7.54.0 && \ CFLAGS="-mms-bitfields -mthreads" ./configure --prefix=${LOCALDESTDIR} && \ make && \ make install
Public Domain Curses is an implementation of the curses library
Build and install pdcurses by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget --no-check-certificate -c https://downloads.sourceforge.net/project/pdcurses/pdcurses/3.4/PDCurses-3.4.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/PDCurses-3.4.tar.gz && \ cd PDCurses-3.4 && \ cd win32 && \ cat mingwin32.mak | sed 's|\\exp\-|\/exp\-|g' > mingwin32.new && \ mv mingwin32.new mingwin32.mak && \ cat mingwin32.mak | sed 's|type|cat|g' > mingwin32.new && \ mv mingwin32.new mingwin32.mak && \ cat mingwin32.mak | sed 's|copy|cp|g' > mingwin32.new && \ mv mingwin32.new mingwin32.mak && \ cat mingwin32.mak | sed 's|del|rm|g' > mingwin32.new && \ mv mingwin32.new mingwin32.mak && \ make -f mingwin32.mak libs && \ install pdcurses.a ${LOCALDESTDIR}/lib/libpdcurses.a && \ make -f mingwin32.mak clean && \ make -f mingwin32.mak DLL=Y libs && \ install pdcurses.dll ${LOCALDESTDIR}/bin && \ cd .. && \ install curses.h ${LOCALDESTDIR}/include
Note: the sed lines replace the DOS commands in the install script with their UNIX equivalents.
freeglut is a free implementation of the OpenGL Utility Toolkit.
Build and install freeglut by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget --no-check-certificate -c https://downloads.sourceforge.net/project/freeglut/freeglut/3.0.0/freeglut-3.0.0.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/freeglut-3.0.0.tar.gz && \ cd freeglut-3.0.0 && \ mkdir build && \ cd build && \ cmake -DCMAKE_INSTALL_PREFIX:PATH=${LOCALDESTDIR} -G "MSYS Makefiles" .. && \ make && \ make install
Bullet is a collision detection and physics library
Build and install bullet by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget --no-check-certificate -O bullet-2.86.1.tar.gz -c https://github.com/bulletphysics/bullet3/archive/2.86.1.tar.gz && \ cd ${LOCALBUILDDIR} && \ tar xzf ${LOCALSOURCEDIR}/bullet-2.86.1.tar.gz && \ cd bullet3-2.86.1 && \ mkdir build && \ cd build && \ cmake -DCMAKE_INSTALL_PREFIX:PATH=${LOCALDESTDIR} -DINSTALL_LIBS:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON \ -DBUILD_UNIT_TESTS:BOOL=OFF -DBUILD_BULLET2_DEMOS:BOOL=OFF -DBUILD_OPENGL3_DEMOS:BOOL=OFF \ -DBUILD_EXTRAS:BOOL=OFF -G "MSYS Makefiles" .. && \ make && \ make install
References:
PhysicsFS is a library to provide abstract access to various archives.
Build and install PhysicsFS by executing the following commands:
cd ${LOCALSOURCEDIR} && \ wget http://icculus.org/physfs/downloads/physfs-2.0.3.tar.bz2 && \ wget -c http://ingar.satgnu.net/devenv/mingw32/files/patches/physfs-2.0.3-size_t.patch && \ cd ${LOCALBUILDDIR} && \ tar xjf ${LOCALSOURCEDIR}/physfs-2.0.3.tar.bz2 && \ cd physfs-2.0.3 && \ patch -Np0 -i ${LOCALSOURCEDIR}/physfs-2.0.3-size_t.patch && \ mkdir build && \ cd build && \ cmake -DCURSES_LIBRARY=${LOCALDESTDIR}/bin/pdcurses.dll \ -DZLIB_LIBRARY=${LOCALDESTDIR}/lib/libz.dll.a -DZLIB_INCLUDE_DIR=${LOCALDESTDIR}/include \ -DCMAKE_INSTALL_PREFIX=${LOCALDESTDIR} -G "MSYS Makefiles" .. && \ make && \ make install
Command explanation: