# Documentation de la bibliothèque MLV-1.2.1

- Presentation
- Téléchargement
- Installation
- Compilation
- Exemples
- API
- Liste des fonctions
- bogues
- FAQ
- contacts

Créer des paquets contenant la bibliothèque MLV pour MacOS X

Dans cette partie, nous allons expliquer comment créer des paquets d'installation pour MacOS X à l'aide de l'outil PackageMaker.

Pour pouvoir créer ces paquets, nous allons compiler et installer des outils et des bibliothèques nécessaires à la compilation, l'installation et l'exécution de la bibliothèque MLV.

Avant d'être mis en paquet, ces bibliothèques et ces outils doivent être installés dans différents répertoires :

- Les outils et bibliothèques nécessaires uniquement à la compilation de MLV sont installés dans le répertoire $HOME/fakeroot_to_compile_mlv-1.2.1;
- Les bibliothèques et les outils nécessaires à l'utilisation de MLV sont installés simultanément dans /usr et dans $HOME/mlv-1.2.1_macos-10.9.

Le repertoire fakeroot_to_compile_mlv-1.2.1 est un repertoire temporaire de construction. Le repertoire /usr est le repertoire d'installation de la bibliothèque. Dans notre cas, il est utilisé pour pouvoir configurer et tester en conditions réelles l'infrastructure MLV. Le repertoire $HOME/mlv-1.2.1_macos-10.9 contient exactement les même composantes que ceux qui sont installées dans /usr. Nous utiliserons ce dernier repertoire pour construire le paquet d'installation pour MacOS X.

Il est important de travailler avec les deux repertoires /usr et $HOME/mlv-1.2.1_macos-10.9. En effet, /usr fait partie du système d'exploitation et contient déjà d'autres bibliothèques. On ne peut donc pas distribuer /usr, d'où l'obligation de créer une copie de /usr qui ne contient que l'infrastucture de MLV.

Il est important de noter que nous allons modifier /usr. Pour ce faire, nous devrons utiliser les droits "administrateur". Il faudra donc être extrèmement vigilant car une mauvaise manipulation dans /usr peu détruire le système tout entier.

# Préparation et installation de la chaîne de compilation pour la bibliothèque MLV

Commencez par créer les repetroires d'installation en tapant les commandes suivantes :

## Installation des outils de développement de MacOSX

Commencez par installer l'environnement de programmation d'Apple. Pour cela, au choix,

- Installez Xcode depuis le site de téléchargement de Apple.
- chargez le second dvd d'installation du système d'exploitation de votre ordinateur, puis installez XCode Tool.

Cet environnement contient entre autre gcc, et make.

## Mise en place d'un environnement de développement pour MLV

Nous allons installer la bibliothèque MLV ainsi que ses dépendances dans un répertoire de votre dossier personnel.

Créez les répertoires suivants en tapant les commandes suivantes :

    mkdir $HOME/fakeroot_to_compile_mlv-1.2.1
    mkdir $HOME/fakeroot_to_compile_mlv-1.2.1/src
    mkdir $HOME/mlv-1.2.1_macos-10.9

Il est nécessaire de configurer le système d'exploitation, pour qu'il sache que de nouvelles bibliothèques sont installées dans le répertoire fakeroot. Pour cela, il suffit de définir quelques variables d'environnement dans un fichier qui est exécuté à chaque démarrage du terminal.

Ce fichier est $HOME/.bash_profile

Ajoutez, à la fin du fichier, les commandes suivantes:

    export FAKEROOT="$HOME/fakeroot_to_compile_mlv-1.2.1"
    export SYSROOT="/usr"
    export LOCALSYSROOT="/usr/local/MLV"
    export MACOS_PACKAGE="$HOME/mlv-1.2.1_macos-10.9"
    export PATH="$FAKEROOT/bin:$LOCALSYSROOT/bin:$SYSROOT/bin:$PATH"
    export DYLD_LIBRARY_PATH="$FAKEROOT/lib:$LOCALSYSROOT/lib:$SYSROOT/lib:$DYLD_LIBRARY_PATH"
    export PKG_CONFIG_PATH="$FAKEROOT/lib/pkgconfig:$LOCALSYSROOT/lib/pkgconfig:$SYSROOT/lib/pkgconfig:$PKG_CONFIG_PATH"
    export LD_LIBRARY_PATH="$FAKEROOT/lib:$LOCALSYSROOT/lib:$SYSROOT/lib:$LD_LIBRARY_PATH"
    export ACLOCAL="aclocal -I $FAKEROOT/share/aclocal  -I $LOCALSYSROOT/share/aclocal  -I $SYSROOT/share/aclocal  -I /usr/share/aclocal"
    export PKG_CONFIG="$SYSROOT/bin/pkg-config"
    export CPPFLAGS="-I$FAKEROOT/include -I$LOCALSYSROOT/include -I$SYSROOT/include"
    export LDFLAGS="-L$FAKEROOT/lib -L$LOCALSYSROOT/lib -L$SYSROOT/lib"

Si le fichier n'existe pas, créez le.

Vous devez maintenant redémarrer votre terminal pour prendre en compte les changements.

Vérifiez que les variables d'environnement ont bien été installées en tapant la commande:

    export

qui devrait afficher toutes les variables d'environnement existantes.

Vous pouvez aussi les examiner une à une en tapant la commande:

    echo $FAKEROOT
    echo $PATH
    etc ...

## Installation des dépendances de MLV

Nous allons maintenant installer différents programmes et bibliothèques qui sont nécessaires au fonctionnement de MLV.

### Installation de pkg-config

Commencez par télécharger pkg-config-X.X.tar.gz en allant sur le site :

http://pkgconfig.freedesktop.org/releases/

et en le mettant dans le répertoire $FAKEROOT/src.

Il est important de PRENDRE LA DERNIÈRE VERSION DE PKG-CONFIG. En effet, pkg-config utilise une autre bibliothèque qui n'est jamais incluse dans les anciennes versions.

Désarchivez le fichier en tapant la ligne de commande suivante:

    cd $FAKEROOT/src
    tar -xzf pkg-config-X.X.tar.gz

où X.X est le numéro de la version de la bibliothèque que vous avez téléchargé.

Nous allons maintenant compiler pkg-config :

    cd ./pkg-config-X.X
    ./configure --with-internal-glib --prefix=$SYSROOT
    make

La deuxième ligne de commande configure le code source de pkg-config pour que le code source prenne en compte les caractéristiques de l'architecture de votre ordinateur. L'option –prefix permet de dire au code source que le résultat de la compilation doit être installé dans le répertoire $SYSROOT, car c'est un outil qui sera necessaire à la compilation de MLV, mais aussi à l'utilisation de MLV. La 3ème commande compile le programme.

Installez la bibliothèque. Pour cela, tapez la commande :

    sudo make install

Comme vous modifiez le sytème (à cause du –prefix=$SYSROOT), l'ordinateur vous demande un mot de passe. Tapez le mot de passe administrateur de l'ordinateur (ne vous inquiétez pas si le mot de passe ne s'affiche pas).

Installez ensuite pkg-config dans le répertoire destiné au paquet d'installation de MLV en tapant :

    make install DESTDIR=$MACOS_PACKAGE

Voilà, pkg-config est installé.

### Installation de M4

M4 est un outil d'aide à la compilation.

L'installation de M4 est identique à celle de pkg-config. Commencez par télécharger m4-X.X.X.tar.gz sur le site : http://ftp.gnu.org/gnu/m4/

Puis tapez les commandes suivantes:

    cd $FAKEROOT/src
    tar -xf m4-X.X.X.tar.gz
    cd m4.X.X.X
    ./configure --prefix=$FAKEROOT
    make
    make install

Ici, m4 est nécessaire pour compiler MLV, mais pas pour son utilisation. Les commandes précédentes l'ont installée uniquement dans le repertoire $FAKEROOT.

### Installation de autoconf

Autoconf est un outil d'aide à la compilation.

Commencez par télécharger autoconf-X.X.tar.gz sur le site : http://ftp.gnu.org/gnu/autoconf/

Puis tapez les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf autoconf-X.X.tar.gz
    cd autoconf-X.X
    ./configure --prefix=$FAKEROOT
    make
    make install

### Installation de autoconf-archive

Autoconf-archives est une bibliothèque de script pour autoconf.

Commencez par télécharger autoconf-archive-X.X.X.tar.gz sur le site : http://ftp.gnu.org/gnu/autoconf-archive/

Puis tapez les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf autoconf-archive-X.X.X.tar.gz
    cd autoconf-archiv-X.X.X
    ./configure --prefix=$FAKEROOT
    make
    make install

### Installation de automake

Automake est un outil d'aide à la compilation.

Commencez par télécharger automake-X.X.tar.gz sur le site : http://ftp.gnu.org/gnu/automake/

Puis tapez les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf automake-X.X.tar.gz
    cd automake-X.X
    ./configure --prefix=$FAKEROOT
    make
    make install

### Installation de libtool

Libtool est un outil d'aide à la compilation.

L'installation de libtool est identique à celle de pkg-config. Commencez par télécharger libtool-X-X.tar.gz sur le site : http://ftp.gnu.org/gnu/libtool/.

Puis tapez les commandes suivantes:

    cd $FAKEROOT/src
    tar -xf libtool-X-X.tar.gz
    cd libtool-X-X
    ./configure --prefix=$FAKEROOT
    make
    make install

### Installation de libxml2

Il n'est pas nécessaire d'installer cette bibliothèque. En effet, elle est déjà présente dans l'installation de base de MacOS X.

### Installation de libffi

Commencez par télécharger libffi-X.X.tar.gz en allant sur le site : http://sourceware.org/libffi/

Puis tapez les lignes de commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf libffi-X.X.tar.gz
    cd libffi-X.X
    ./configure --prefix=$LOCALSYSROOT
    cd x86_64-apple-darwinX.X.X
    make
    sudo make install
    make install DESTDIR=$MACOS_PACKAGE

### Installation de gettext

Commencez par télécharger gettext-X.tar.gz en allant sur le site : http://www.gnu.org/software/gettext/

    cd $FAKEROOT/src
    tar -xzf gettext-X.X.X.X.tar.gz

Il faut modifier le code source de gettext, car il contient quelques erreurs. Pour cela, modifiez le fichier ./gettext-tools/gnulib-lib/stpncpy.c, et remplacez les lignes

    #ifndef weak_alias
    # define __stpncpy stpncpy
    #endif

par les lignes

    #ifndef weak_alias
    # undef stpncpy
    # define __stpncpy stpncpy
    #endif

Ensuite, compilez et installez la bibliothèque en tapant les commandes suivantes:

    cd gettext-X.X.X.X
    ./configure --prefix=$LOCALSYSROOT
    make
    sudo make install
    make install DESTDIR=$MACOS_PACKAGE

### Installation de glib2

Téléchargez la bibliothèque sur le site http://ftp.gtk.org/pub/glib/

Désarchivez ensuite la bibliothèque en tapant les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf glib-2.X.X.tar.gz
    cd glib-2.X.X
    ./configure --prefix=$LOCALSYSROOT
    make
    sudo make install
    make install DESTDIR=$MACOS_PACKAGE

### Installation de SDL

Téléchargez le paquet d'installation pour MacOSX de la bibliothèque sur le site http://www.libsdl.org/download-1.2.php

Ce paquet a pour nom : SDL-1.2.X.dmg (Intel10.5+)

Puis, installez le paquet en tapant les commandes suivantes :

    mkdir -p $MACOS_PACKAGE/Library/Frameworks
    hdiutil attach SDL-1.2.X.dmg
    sudo cp -r /Volumes/SDL/SDL.framework /Library/Frameworks/
    cp -r /Volumes/SDL/SDL.framework $MACOS_PACKAGE/Library/Frameworks/
    hdiutil detach /Volumes/SDL

### Installation de SDL_image

Téléchargez le paquet d'installation pour MacOSX de la bibliothèque sur le site http://www.libsdl.org/projects/SDL_image/release-1.2.html

Ce paquet a pour nom : SDL_image-1.2.X.dmg (Intel10.5+)

Puis, installez le paquet en tapant les commandes suivantes :

    hdiutil attach SDL_image-1.2.X.dmg
    sudo cp -r /Volumes/SDL_image/SDL_image.framework /Library/Frameworks/
    cp -r /Volumes/SDL_image/SDL_image.framework $MACOS_PACKAGE/Library/Frameworks/
    hdiutil detach /Volumes/SDL_image

### Installation de SDL_mixer

Téléchargez le paquet d'installation pour MacOSX de la bibliothèque sur le site http://www.libsdl.org/projects/SDL_mixer/release-1.2.html

Ce paquet a pour nom : SDL_mixer-1.2.X.dmg (Intel10.5+)

Puis, installez le paquet en tapant les commandes suivantes :

    hdiutil attach SDL_mixer-1.2.X.dmg
    sudo cp -r /Volumes/SDL_mixer/SDL_mixer.framework /Library/Frameworks/
    cp -r /Volumes/SDL_mixer/SDL_mixer.framework $MACOS_PACKAGE/Library/Frameworks/
    hdiutil detach /Volumes/SDL_mixer

### Installation de SDL_ttf

Téléchargez le paquet d'installation pour MacOSX de la bibliothèque sur le site http://www.libsdl.org/projects/SDL_ttf/release-1.2.html

Ce paquet a pour nom : SDL_ttf-X.X.X.dmg (Intel10.5+)

Puis, installez le paquet en tapant les commandes suivantes :

    hdiutil attach SDL_ttf-X.X.X.dmg
    sudo cp -r /Volumes/SDL_ttf/SDL_ttf.framework /Library/Frameworks/
    cp -r /Volumes/SDL_ttf/SDL_ttf.framework $MACOS_PACKAGE/Library/Frameworks/
    hdiutil detach /Volumes/SDL_ttf

### Installation de SDL_gfx

Téléchargez le code source de la bibliothèque sur le site : http://www.ferzkopp.net/joomla/content/view/19/14/

    cd  $FAKEROOT/src
    tar -xzf SDL_gfx-X.X.tar.gz

ATTENTION ! Il est important de télécharger la verions de SDL_gfx qui a été prévu pour la version 1.2 de SDL (il ne faut surtout pas prendre SDL2_gfx qui est prévue pour la version 2.0 de SDL ) !

Modifiez le configure.in en remplacant les lignes

    dnl Check for SDL
    AM_PATH_SDL($SDL_VERSION,
                :,
            AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])
    )
    CFLAGS="$CFLAGS $SDL_CFLAGS"
    # Remove dependencies from 'sdl-config' not meant for us libraries:
    SDL_LIBS=$(echo "$SDL_LIBS" |sed -e 's/-lmingw32//' -e 's/-lSDLmain//')
    LIBS="$LIBS $SDL_LIBS"

par les lignes

    SDL_CFLAGS="-I/Library/Frameworks/SDL.framework/Headers -framework SDL"
    SDL_LIBS="-framework SDL"
    CFLAGS="$CFLAGS $SDL_CFLAGS"
    LIBS="$LIBS $SDL_LIBS -framework SDL"

Reconfigurez la bibliothèque en exécutant la commande:

    cd SDL_gfx-X.X
    autoreconf --install

Finissez la compilation et l'installation de la bibliothèque en tapant les commandes suivantes:

    ./configure --prefix=$LOCALSYSROOT --without-x
    make
    sudo make install
    make install DESTDIR=$MACOS_PACKAGE

### Installation de Doxygen

Téléchargez le code source de Doxygen, contenu dans le fichier doxygen-X.X.X.src.tar.gz situé sur le site : http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc

Installez le paquet en tapant les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf doxygen-X.X.X.src.tar.gz
    cd doxygen-X.X.X
    ./configure --prefix $FAKEROOT
    make
    make install

## Installation de la bibliothèque MLV

Commencez par télécharger le code source de la bibliothèque MLV. Téléchargez la bibliothèque située à l'adresse : http://download.savannah.gnu.org/releases/mlv/mlv-1.2.1/mlv-1.2.1.tar.gz

Installez la bibliothèque en tapant les commandes suivantes:

    cd $FAKEROOT/src
    tar -xzf mlv-1.2.1.tar.gz
    cd mlv-1.2.1
    ./configure --prefix=$SYSROOT libxml_LIBS=-lxml2 libxml_CFLAGS=-I/usr/include/libxml2
    make
    sudo make install
    make install DESTDIR=$MACOS_PACKAGE

# Création du paquet d'installation de MLV pour MacOX

Installer PackageMaker en allant sur le site: https://developer.apple.com/downloads/index.action

Installer PackageMaker.

Executez PackageMaker.

Dans le champs Organisation, remplissez:

    multimedia.library

Et choisissez la cible :

    Mac OS X v10.5 Leopard

Cliquez sur "Untitled", puis sur Configuration.

Modifiez le titre de sorte qu'il devienne: "mlv-1.2.1_macos-10.9"

Dans "Install Destination", décochez l'option "Volume selected by user" et remplacez le par "System volume".

Pour la description, mettez:

    The MLV library is a simplified multimedia library. This library has been designed for beginner students in C, and it allows to add graphical and audio effects on the student program. The library is useful to:
    - draw figures, display text and dialog boxes,
    - display images,
    - play sounds and musics,
    - catch mouse and keyboard events,
    - get informations from dialog boxes.
    These tools are simplified interfaces of the SDL library. If you are not a C beginner, better use the SDL librairy (SDL, SDL_gfx, SDL_sound, SDL_ttf).

Ensuite, ajouter le dossier $MACOS_PACKAGE/usr (à l'aide de l'icône en forme de plus).

Réalisez ensuite les opérations suivantes:

- Allez dans l'onglet contents et selectionnez l'option : "include root in package"
- Cliquez sur le dossier usr en dessous de path, puis cliquez sur "Apply Recommendations". Normalement, owner a du recursivement etre positionné à root et Group à Wheel
- Cliquez sur "Configuration" et remplacez le champ "Package Identifier" par "multimedia.library.mlv.mlv_infrastructure.pkg"
- Toujours dans "Configuration" , remplacez le champ "Package Version" par "1.2.1"
- Cliquez sur le nom "usr" et renomez-le en "MLV Infrastructure"
- Ajoutez la description suivante:

      This package installs the MLV library.

      This package installs files in /usr and /usr/local.
      He can potentially break the system.

Ajoutez maintenant le dossier $MACOS_PACKAGE/LIBRARY.

Réalisez ensuite les opérations suivantes:

- Allez dans l'onglet contents et selectionnez l'option : "include root in package"
- Cliquez sur le dossier Library en dessous de path, puis cliquez sur "Apply Recommendations". Normalement, owner a du recursivement être positionné à root et Group à Wheel.
- Cliquez sur "Configuration" et remplacez le champ "Package Identifier" par "multimedia.library.mlv.sdl_framework.pkg"
- Toujours dans "Configuration" , remplacez le champ "Package Version" par "1.2.1"
- Cliquez sur le nom "Library" et renomez le en "SDL Framework"
- Ajoutez la descrition suivante:

      This package installs the SDL Framework.
      If you have yet installed the SDL Framework, you are not obliged to install this component.

      This package installs files in /Library/Framework
      He can potentially break the system.

Une fois fait, cliquez sur le bouton Build et enregistrez le paquet dans le dossier de votre choix.

Le paquet est prêt !

# Tester le bon fonctionnement des paquets d'installation

Commencer par vérifier que votre paquet d'installation est correcte en copiant le paquet dans un repertoire de test. Décompressez le paquet à l'aide de la commande :

    tar -xzf mlv-1.2.1_macos-10.9.pkg
    tar -xzf usr.pkg/Payload
    tar -xzf library.pkg/Payload

Normalement, vous devriez avoir deux répertoires : Library et usr. Il doivent au moins contenir les dossiers et fichiers suivants :

    Library
    `-- Frameworks
        |-- SDL.framework
        |-- SDL_image.framework
        |-- SDL_mixer.framework
        `-- SDL_ttf.framework
    usr
    |-- bin
    |   `-- pkg-config
    |-- include
    |   `-- MLV
    |-- lib
    |   |-- libMLV.0.dylib
    |   |-- libMLV.a
    |   |-- libMLV.dylib
    |   |-- libMLV.la
    |   |-- libMLVMain.0.dylib
    |   |-- libMLVMain.a
    |   |-- libMLVMain.dylib
    |   |-- libMLVMain.la
    |   `-- pkgconfig
    |-- local
    |   `-- MLV
    `-- share
        |-- aclocal
        |-- doc
        |-- man
        `-- MLV

Si tel est le cas, c'est que le paquet a correctement été généré.

Commencez par désinstaller l'infrastructure de compilation du paquet :

    cd $FAKEROOT/src/pkg-config-X.X && sudo make uninstall
    cd $FAKEROOT/src/libffi-X.X/x86_64-apple-darwinX.X.X && sudo make uninstall
    cd $FAKEROOT/src/gettext-X.X.X.X && sudo make uninstall
    cd $FAKEROOT/src/glib-2.X.X && sudo make uninstall
    sudo rm -rf /Library/Frameworks/SDL_ttf.framework
    sudo rm -rf /Library/Frameworks/SDL_mixer.framework
    sudo rm -rf /Library/Frameworks/SDL_image.framework
    sudo rm -rf /Library/Frameworks/SDL.framework
    cd $FAKEROOT/src/SDL_gfx-X.X && sudo make uninstall
    cd $FAKEROOT/src/mlv-1.2.1 && sudo make uninstall

Supprimez les lignes qui ont été ajoutées dans le fichier .bash_profile au debut du document.

Voilà, on peut maintenant tester l'installation du paquet.

Pour installer le paquet, il vous suffit de cliquer sur le fichier et de suivre les instructions.

Testez maintenant la bibliothèque en tapant les commandes suivantes:

    cp -r /usr/share/doc/mlv/examples /tmp
    cd /tmp/examples/beginner
    make

Si la compilation se fait sans erreur, c'est que l'installation s'est correctement déroulée.

Vous pouvez maitnenant vérifier que chaque programme s'exécute correctement. Vérifiez aussi tous les autres exemples.

# Désinstaller le paquet pour remettre le système dans son état d'origine

Il n'y a pas d'outil de désinstallation sous mac. Pour désinstaller un paquet, il faut supprimer les fichiers à la main en tapant les commandes:

    sudo rm -rf /Library/Frameworks/SDL.framework
    sudo rm -rf /Library/Frameworks/SDL_image.framework
    sudo rm -rf /Library/Frameworks/SDL_mixer.framework
    sudo rm -rf /Library/Frameworks/SDL_ttf.framework
    sudo rm -rf /usr/include/MLV
    sudo rm -rf /usr/lib/libMLV*
    sudo rm -rf /usr/lib/pkgconfig/MLV.pc
    sudo rm -rf /usr/local/MLV
    sudo rm -rf /usr/share/MLV
    sudo rm -rf /usr/share/doc/mlv
    sudo rm -rf /usr/share/man/man3/MLV_*.h.3
    sudo rm -rf /usr/bin/pkg-config
    sudo rm -rf /usr/bin/x86_64-apple-darwin13.0.0-pkg-config
    sudo rm -rf /usr/share/aclocal/pkg.m4
    sudo rm -rf /usr/share/doc/pkg-config
    sudo rm -rf /usr/share/man/man1/pkg-config.1

Puis, il faut juste dire au système d'oublier l'existence du paquet en question en tapant la commande:

    sudo pkgutil --forget multimedia.library.mlv.mlv_infrastructure.pkg
    sudo pkgutil --forget multimedia.library.mlv.sdl_framework.pkg