• [^] # Re: Mole invasion

    Posté par (site web personnel) . En réponse au journal Créateurs de jeux, dénoncez vous!. Évalué à 3.

    Comment fonctionne ton packaging sous Wine ?

    J'ai une installation de Wine dans laquelle j'ai copié tous les outils et les bibliothèques que j'utilisais auparavant sous Windows. Le script lance simplement les outils de compilation. Alors évidemment il a fallu réussir à tout faire fonctionner sous Windows avant.

    Ça a été difficile de trouver une combinaison des outils et bibliothèques qui fonctionne bien (un MinGW qui tourne bien, Boost compilé avec, la SDL, un CMake récent). Comme ça plantait souvent, je ne pouvais pas le faire sous Wine sans me demander si la cause du plantage était l'outil ou Wine. Et une fois que les outils ont enfin fonctionné ensemble, il fallait encore que j'indique manuellement à CMake où étaient les bibliothèques.

    Ce script se charge de passer les bons paramètres à CMake, puis il lance la compilation, copie les bibliothèques nécessaires dans le dossier des binaires du jeu et termine par la création d'un installateur avec NSIS.

    Voici le script :

    #!/bin/sh
    # MinGW must be in your path. Edit the registry key
    # HKCU/Environment/PATH by typing
    #
    # wine regedit
    #
    WIN_PROGRAM_FILES="C:/Program Files"
    WIN_GNU_INCLUDE_DIR="$WIN_PROGRAM_FILES/GnuWin32/include"
    WIN_GNU_LIB_DIR="$WIN_PROGRAM_FILES/GnuWin32/lib"
    WIN_BOOST_DIR="C:/boost_1_45_0"
    WIN_SDL_DIR="C:/SDL-1.2.14"
    WIN_SDL_INCLUDE_DIR="$WIN_SDL_DIR/include"
    COMMON_LIBRARIES_DIR="$HOME/.wine/drive_c/Programmation/libs4plee"
    # Libraries paths
    WIN_LIBCLAW_DIR="$WIN_PROGRAM_FILES/claw/"
    WIN_LIBCLAW_CMAKE_DIR="$WIN_LIBCLAW_DIR/lib/cmake/libclaw/"
    WIN_JPEG_INCLUDE_DIR="$WIN_GNU_INCLUDE_DIR"
    WIN_JPEG_LIBRARY_PATH="$WIN_GNU_LIB_DIR/libjpeg.dll.a"
    WIN_PNG_INCLUDE_DIR="$WIN_GNU_INCLUDE_DIR"
    WIN_PNG_LIBRARY_PATH="$WIN_GNU_LIB_DIR/libpng.dll.a"
    WIN_BOOST_INCLUDE_DIR="$WIN_BOOST_DIR"
    WIN_SDL_LIBRARY_PATH="$WIN_SDL_DIR/bin/SDL.dll"
    WIN_SDL_MIXER_LIBRARY_PATH="$WIN_SDL_DIR/lib/SDL_mixer.dll"
    # Compilation flags
    INSTALL_PREFIX=/tmp/install/win
    # Compilation
    wine C:/Program\ Files/CMake\ 2.8/bin/cmake.exe -G "MinGW Makefiles" . \
     -DCMAKE_BUILD_TYPE=release \
     -DCLAW_ROOT_DIRECTORY:PATH="$WIN_LIBCLAW_DIR" \
     -Dlibclaw_DIR:PATH="$WIN_LIBCLAW_CMAKE_DIR" \
     -DJPEG_INCLUDE_DIR:PATH="$WIN_JPEG_INCLUDE_DIR" \
     -DJPEG_LIBRARY:FILEPATH="$WIN_JPEG_LIBRARY_PATH" \
     -DPNG_PNG_INCLUDE_DIR:PATH="$WIN_PNG_INCLUDE_DIR" \
     -DPNG_LIBRARY:FILEPATH="$WIN_PNG_LIBRARY_PATH" \
     -DBoost_INCLUDE_DIR:PATH="$WIN_BOOST_INCLUDE_DIR" \
     -DSDL_INCLUDE_DIR:PATH="$WIN_SDL_INCLUDE_DIR" \
     -DSDL_LIBRARY:FILEPATH="$WIN_SDL_LIBRARY_PATH" \
     -DSDLMIXER_LIBRARY:FILEPATH="$WIN_SDL_MIXER_LIBRARY_PATH" \
     -DCMAKE_SHARED_LINKER_FLAGS='-Wl,--enable-auto-import,--enable-stdcall-fixup' \
     -DCMAKE_EXE_LINKER_FLAGS='-Wl,--enable-auto-import,--enable-stdcall-fixup' \
     -DPLEE_THE_BEAR_ENABLED=1 \
     -DBEAR_EDITORS_ENABLED=0 \
     -DCMAKE_INSTALL_PREFIX="$INSTALL_PREFIX"
    wine mingw32-make -i
    wine strip bear-engine/bin/*.dll bear-engine/bin/*.exe
    wine strip plee-the-bear/bin/*.dll
    cp "$COMMON_LIBRARIES_DIR/"* plee-the-bear/bin
    wine mingw32-make install
    cp plee-the-bear/release/plee-the-bear.nsi "$INSTALL_PREFIX"
    makensis "$INSTALL_PREFIX/plee-the-bear.nsi"
    cp "$INSTALL_PREFIX"/*.exe .
    
    

    PS: tu te souviens ? on avait discuté en 2009, aux RMLL, à Nantes …

    Je me souviens :)