/*!\page Installation Download und Installation

\section inst1 Download
Die aktuelle Version und Dokumentation der Library ist hier zu finden:

    http://www.pfp.de/ppl

Die Sourcen sind dort im Format ".tar.bz2" zu finden. Unter Unix kann dieses Archiv mit tar
oder gtar ausgepackt werden (<code>tar -xjf ppl*.tar.bz2</code>), unter Windows eignet sich
zum Beispiel <a href="http://http://www.7-zip.org/">7-Zip</a>.


\section inst1a Git
Der Quellcode der Library wird bei <a href="https://github.com/pfedick/pplib">GitHub</a>
gehostet und kann wie nachfolgend beschrieben aus dem Repository ausgecheckt werden.

\code
git clone https://github.com/pfedick/pplib.git ppl7
\endcode


\section inst2 Installation unter UNIX 

Die Library wird mit einem configure-script ausgeliefert, in dem alle optionalen
Features ausgewählt werden können. Um eine Basisversion zu erhalten reicht oftmals ein
einfaches configure ohne Parameter aus:

\code
./configure
make
make install
\endcode

Für das "make install" sind ggfs. Root-Rechte erforderlich.

Das Configure untersucht das System und setzt entsprechende Defines für den
Compiler. Optionale Features werden zum Teil automatisch eingebunden, wenn
sie gefunden werden.

Wird eine Library nicht gefunden oder nicht automatisch eingebunden, kann über
Parameter beim Aufruf des configure-Scripts nachgeholfen werden. Beispiel:

\code
./configure --with-mysql=/usr/local/mysql
\endcode

Soll eine bestimmte Library explizit nicht eingebunden werden, kann man dies mit
"--without-xxx" festlegen, wobei xxx für den Namen der Library steht:

\code
./configure --without-mysql
\endcode

Alle weiteren Details sind im configure zu finden, wenn man es mit "./configure --help"
aufruft.

\subsection inst2compiler Compiler auswählen
Sofern nichts angegeben wird, wird der Defaultcompiler verwendet, in der Regel gcc bzw. g++. Sind mehrere Compiler
vorhanden, kann durch setzen der Umgebungsvariablen CC und CXX vor Aufruf von "configure" bestimmt werden,
welcher Compiler verwendet werden soll.

\subsubsection inst2compiler_gcc47 Beispiel 1: gcc Version 5
Unter FreeBSD kann man verschiedene Versionen über die Ports-Collection installieren. Die installierten
Binaries bekommen dann die Version im Dateinamen angehangen, z.B. "5". Das gcc-Binary heisst somit "gcc5",
bzw. "g++5":

\code
export CC=gcc5
export CXX=g++5
./configure ...
\endcode


\subsubsection inst2compiler_clang Beispiel 2: clang Version 6
\code
export CC=clang60
export CXX=clang++60
./configure ...
\endcode


\subsection inst2ubuntu1804 Installation unter Ubuntu 18.04 LTS
Wenn man alle Features der Library nutzen will, muß man folgende Pakete installieren:

\code
sudo apt install -y gcc g++ nasm googletest \
   zlib1g-dev libbz2-dev libssl-dev libpcre3-dev \
   libmcrypt-dev libgtest-dev libcurl4-openssl-dev libldns-dev \
   libbind-dev libmysqlclient-dev libpq-dev libsqlite3-dev \
   libpng-dev libjpeg-dev libtiff-dev libsdl2-dev libfreetype6-dev \
   libmad0-dev libmp3lame-dev libmpg123-dev \
   libogg-dev libshout3-dev libmicrohttpd-dev libidn11-dev
\endcode

Ist alles installiert, kann man das configure mit folgenden Parametern aufrufen:
\code
export CFLAGS="-no-pie "
./configure --prefix=$HOME \
    --with-lame --with-pcre=/usr --with-x --with-openssl=/usr \
    --with-mysql  --with-libiconv-prefix --with-nasm \
    --with-gcrypt=auto --with-ogg=/usr \
    --with-postgresql --with-sqlite3 \
    --with-libmicrohttpd=/usr/local \
    --with-jpeg --with-libpng=$PREFIX --with-libtiff \
    --with-libtiff=/usr --with-mpg123 \
    --with-libidn --with-libldns=/usr
\endcode


\subsection inst2debian Installation unter Debian / Ubuntu (Veraltet)
Wenn man alle Features der Library nutzen will, muß man folgende Pakete installieren:
\code
# Kern-Funktionalität
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libpcre3-dev nasm
# Kryptografie
sudo apt-get instal libssl-dev libmcrypt-dev
# Internet
sudo apt-get install libcurl4-openssl-dev libldns-dev
# Datenbanken
sudo apt-get install libmysqlclient-dev libpq-dev freetds-dev
# Grafik
sudo apt-get install libpng12-dev libjpeg62-dev libsdl1.2-dev libfreetype6-dev libmad0-dev
# Sound
sudo apt-get install libmp3lame-dev libmad0-dev libmpg123-dev libogg-dev libshout3-dev
\endcode

Ist alles installiert, kann man das configure mit folgenden Parametern aufrufen:
\code
export CFLAGS="-no-pie "
echo "configuring for generic Linux"
./configure --prefix=$PREFIX \
    --with-lame --with-pcre --with-x --with-openssl \
    --with-mysql  --with-libiconv-prefix --with-nasm \
    --with-ogg \
    --with-postgresql \
    --with-libmicrohttpd \
    --with-jpeg --with-libpng --with-libtiff \
    --with-libtiff --with-mpg123 \
    --with-libidn \
    --enable-gtest=/usr/local/googletest-release-1.7.0
\endcode

\subsection inst2freebsd Installation unter FreeBSD
\code
export PREFIX=/usr/local
export CFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS=-I/usr/local/include
export CC=clang$CLANG_VERSION
export CXX=clang++$CLANG_VERSION

./configure --prefix=$PREFIX \
   --with-lame=/usr/local --with-mpg123=/usr/local \
   --with-pcre=/usr/local --with-x --with-openssl=/usr --with-mysql \
   --with-libiconv-prefix=/usr/local --with-nasm  \
   --with-jpeg --with-libpng --with-libtiff=/usr/local \
   --with-postgresql \
   --with-libidn=/usr/local \
   --with-ogg=/usr/local \
   --with-libmicrohttpd=/usr/local \
   --enable-gtest=/usr/local
\endcode

\section inst3 Installation unter Windows

\subsection inst3mingw Installation mit MinGW32/64
Für fast alle unterstützten Module gibt es fertige Pakete, die mit "pacman" installiert werden können.
Einzig für mcrypt gibt es keine Pakete.  

\subsubsection inst3mingw_pacman Pakete installieren
Um alle Features nutzen zu können, müssen folgende Pakete installiert werden:
\code
pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-bzip2 mingw-w64-x86_64-curl mingw-w64-x86_64-freetype \
    mingw-w64-x86_64-gtest mingw-w64-x86_64-iconv mingw-w64-x86_64-lame mingw-w64-x86_64-ldns \
    mingw-w64-x86_64-libiconv mingw-w64-x86_64-libidn mingw-w64-x86_64-libjpeg-turbo \
    mingw-w64-x86_64-libmad mingw-w64-x86_64-libpng mingw-w64-x86_64-libogg mingw-w64-x86_64-libtiff \
    mingw-w64-x86_64-mpg123 mingw-w64-x86_64-nasm mingw-w64-x86_64-openssl mingw-w64-x86_64-pcre \
    mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-zlib
\endcode

\subsubsection inst3mingw_mcrypt MCrypt installieren
Im folgenden wird angenommen, dass wir die 64-Bit-Version von MCrypt erstellen und unter /usr/local installieren wollen:
\code
export VERSION=2.5.8
export PREFIX=/usr/local
export MINGW=/mingw64
export PATH=$MINGW/bin:$PATH

rm -rf libmcrypt-$VERSION.tar.gz
wget -O libmcrypt-$VERSION.tar.gz "http://sourceforge.net/projects/mcrypt/files/Libmcrypt/$VERSION/libmcrypt-$VERSION.tar.gz/download"
rm -rf libmcrypt-$VERSION
tar -xzf libmcrypt-$VERSION.tar.gz

cd libmcrypt-$VERSION
grep -v "\-no\-undefined" configure > configure2
rm config.sub
automake -a

./configure2 --prefix=$PREFIX --enable-static --disable-shared
make
make install

\endcode


\subsubsection inst3mingw_ppl7

\code
export MINGW=/mingw64
export PATH=$MINGW/bin:$PATH
export CPPFLAGS="-I/usr/local/include"
export LDLAGS="-L/usr/local/lib"
export CFLAGS="-I/usr/local/include"

./configure --prefix=/usr/local \
    --with-pcre=$MINGW --with-bzip2=$MINGW --with-zlib=$MINGW \
    --with-nasm=$MINGW/bin --with-libiconv-prefix=$MINGW \
    --with-lame=$MINGW --with-mpg123=$MINGW --disable-freetypetest --with-ft-prefix=$MINGW \
    --with-libtiff=$MINGW --with-jpeg=$MINGW \
    --with-libjpegturbo=$MINGW --with-libpng=$MINGW \
    --with-libmcrypt-prefix=/usr/local \
    --with-openssl=$MINGW  --with-libcurl=$MINGW \
    --with-libldns=$MINGW --with-libidn=$MINGW \
    --with-sdl-prefix=$MINGW \
    --without-postgresql --without-mysql \
    --enable-gtest=/usr/local/gtest-1.7.0 \
\endcode

\subsection inst3vstudio Installation mit Visual Studio

Visual Studio wird zur Zeit nicht unterstützt.


*/