Bon... j'ai fini par te prendre en pitié
.
J'ai donc regardé comment faire fonctionner la libzip sous Windows. Alors pour commencer elle dépend de la zlib. J'ai tenté la compiler à partir des sources, mais tu as aussi des binaires pré-générés pour Windows sur le site officiel (mais c'est moins drôle). Au final, c'est pas vraiment utile pour ma plate-forme: MinGW, via mingw-get inclut déjà la zlib, et il n'y a donc pas besoin de se casser la nénette à la compiler. Un simple:
mingw-get install mingw32-libz
...installe ce qu'il faut (oui, je sais le nom est bizarre, mais c'est bien la zlib).
Ensuite, je suis allé sur le site officiel de libzip et j'ai téléchargé le source de libzip-0.10.
Tu décompresses cela. Ensuite dans le dossier de sources de libzip, tu lances:
./configure && make && make install
Le fait d'avoir installé la zlib via MinGW fait qu'elle est installée au bon endroit pour être automatiquement détectée, rien à faire.
Si tu as installée la zlib par un autre biais, il te faudra indiquer au script configure où elle se trouve avec l'option --with-zlib.
Exemple:
./configure --with-zlib=/opt/zlib-1.2.5 && make && make install
Personnellement, j'installe dans un sous dossier de /opt plutôt que dans /usr/local pour m'y retrouver, j'utilise donc pour cela l'option prefix...
./configure --prefix=/opt/libzip-0.10 && make && make install
libzip a le bon goût d'être fourni avec un fichier .pc qui sert à pkg-config. pkg-config est (entre autres) fourni avec gtk, il suffit juste de s'assurer de le rajouter dans le PATH s'il n'y est pas déjà:
PATH="$PATH:/opt/gtk-2.22/bin"
Une fois cela fait, on peut vérifier si pkg-config est capable de retrouver le fichier libzip.pc qu'on a installé en même temps libzip. La commande suivante:
pkg-config --list-all | grep zip
... devrait retourner:
libzip libzip - library for handling zip archives
Si ce n'est pas le cas (c'est ce qui est mon cas, vu que j'installe dans /opt), c'est que libzip.pc n'est pas dans un dossier où pkg-config cherche ses fichiers *.pc. Il faut alors lui dire explicitement où le trouver:
export PKG_CONFIG_PATH="/opt/libzip-0.10/lib/pkgconfig"
Et roule ma poule. A présent la commande pkg-config plus haut devrait fonctionner, et il devrait pouvoir nous confirmer qu'on utilise libzip 0.10.
1 2
| pkg-config --modversion libzip
0.10 |
A présent, tout est prêt pour la compilation. La détection de libzip se fera de la même manière que pour tout composant utilisant pkg-config (comme gtk, glib, cairo, etc.). Je me suis créé un petit projet CMake pour cela.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
cmake_minimum_required (VERSION 2.4)
project (LIBZIP_TEST)
find_package (PkgConfig REQUIRED)
pkg_check_modules (LIBZIP REQUIRED libzip)
include_directories (${LIBZIP_INCLUDE_DIRS})
link_directories (${LIBZIP_LIBRARY_DIRS})
add_executable (libzip-test main.c)
add_definitions (${LIBZIP_CFLAGS_OTHER} -Wall)
target_link_libraries (libzip-test ${LIBZIP_LIBRARIES})
install (TARGETS libzip-test
RUNTIME DESTINATION bin) |
Il n'y a qu'un fichier main.c:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <zip.h>
int main (void)
{
struct zip *zfile = NULL;
struct zip_source *zsource = NULL;
int error = 0;
/* Creation de test.zip */
zfile = zip_open("test.zip", ZIP_CREATE, &error);
if (zfile == NULL)
return error;
/* Allons chercher test.txt */
zsource = zip_source_file (zfile, "test.txt", 0, 0);
if (zsource == NULL)
return -1;
/* On l'ajoute dans test.zip */
if (zip_add (zfile, "test.txt", zsource) == -1)
return -2;
/* On referme test.zip */
zip_close (zfile);
return 0;
} |
On compile le bazar, qui crée un fichier libzip-test.exe. Dans le même dossier que cet exécutable, on crée un fichier test.txt (avec ce qu'on veut dedans).
Au moment d'exécuter libzip-test.exe, Windows risque de se plaindre de ne pas trouver la DLL de libzip. Il faut alors la rajouter dans le PATH:
PATH="$PATH:/opt/libzip-0.10/bin"
En exécutant libzip-test.exe, celui ci devrait créer une archive test.zip, y ajouter test.txt, et quitter.
Bon, j'espère que tu en as assez pour faire du multi-plateforme ce coup ci !
Partager