Bon finalement, en rentrant de soirée j'ai été voir comment créer un paquet nuget pour du c++ et bah... c'est pas bien dur. Donc je l'ai fait.
Voici le code de création du paquet :
nuget {
nuspec {
id = sfml;
version : 2.1.0.0;
title: SFML;
authors: {Laurent Gomila};
owners: {Laurent Gomila};
licenseUrl: "http://www.sfml-dev.org/license.php";
projectUrl: "http://www.sfml-dev.org";
iconUrl: "http://www.sfml-dev.org/images/logo.png";
requireLicenseAcceptance:false;
summary: "SFML provides a simple interface to the various components of your PC, to ease the development of games and multimedia applications. It is composed of five modules: system, window, graphics, audio and network." ;
description: @"SFML provides a simple interface to the various components
of your PC, to ease the development of games and multimedia applications.
It is composed of five modules: system, window, graphics, audio and network.
With SFML, your application can compile and run out of the box on the most
common operating systems: Windows, Linux, Mac OS X and soon Android & iOS.
SFML has official bindings for the C and .Net languages. And thanks to its
active community, it is also available in many other languages such as Java,
Ruby, Python, Go, and more.
";
releaseNotes: "Release of SFML 2.1 libraries.";
copyright: Copyright 2013;
tags: { sfml, native, CoApp };
}
files {
#defines {
SRC = sources\;
}
include: { "${SRC}include\**" };
docs: { "${SRC}doc\**" };
[x86,v90,debug] {
bin: "${SRC}bin\x86\v90\debug\bin\*";
lib: "${SRC}bin\x86\v90\debug\lib\*";
}
[x86,v90,release] {
bin: "${SRC}bin\x86\v90\release\bin\*";
lib: "${SRC}bin\x86\v90\release\lib\*";
}
[x64,v90,debug] {
bin: "${SRC}bin\x64\v90\debug\bin\*";
lib: "${SRC}bin\x64\v90\debug\lib\*";
}
[x64,v90,release] {
bin: "${SRC}bin\x64\v90\release\bin\*";
lib: "${SRC}bin\x64\v90\release\lib\*";
}
[x86,v100,debug] {
bin: "${SRC}bin\x86\v100\debug\bin\*";
lib: "${SRC}bin\x86\v100\debug\lib\*";
}
[x86,v100,release] {
bin: "${SRC}bin\x86\v100\release\bin\*";
lib: "${SRC}bin\x86\v100\release\lib\*";
}
[x64,v100,debug] {
bin: "${SRC}bin\x64\v100\debug\bin\*";
lib: "${SRC}bin\x64\v100\debug\lib\*";
}
[x64,v100,release] {
bin: "${SRC}bin\x64\v100\release\bin\*";
lib: "${SRC}bin\x64\v100\release\lib\*";
}
[x86,v110,debug,desktop] {
bin: "${SRC}bin\x86\v110\debug\bin\*";
lib: "${SRC}bin\x86\v110\debug\lib\*";
}
[x86,v110,release,desktop] {
bin: "${SRC}bin\x86\v110\release\bin\*";
lib: "${SRC}bin\x86\v110\release\lib\*";
}
[x64,v110,debug,desktop] {
bin: "${SRC}bin\x64\v110\debug\bin\*";
lib: "${SRC}bin\x64\v110\debug\lib\*";
}
[x64,v110,release,desktop] {
bin: "${SRC}bin\x64\v110\release\bin\*";
lib: "${SRC}bin\x64\v110\release\lib\*";
}
}
targets {
Defines += HAS_SFML;
}
}
Suffit de regarder le code ci-dessus pour déduire l'arbo que j'ai utilisé. (Tous les fichiers ont été obtenus en downloadant toutes les versions Visual Studio que tu proposes au téléchargement
ici, il manque les symboles car tu ne les fournits pas).
Ce qui me donne deux paquets que j'héberge ici (home serveur, donc pas beaucoup de bande passante) :
sfml.2.1.0.0.nupkgsfml.redist.2.1.0.0.nupkgIl faut impérativement prendre les deux !
Donc si ça te conviens on peut publier ça sur nuget.org. Dès que ce sera le cas je stopperai l'hébergement et les liens ci-dessus seront morts.
J'ai testé sur Visual Studio 2012 avec un projet console en debug/release en ciblant x86 et x64. Ca a l'air de bien fonctionner (vraiment génial d'ajouter ses dépendances comme ça en tout cas).
Quelques petites remarques :
- Ca serait cool de changer l'url du logo pour une version qui ne contient que "l'image", pas le texte "SFML". Parce que dans le gestionnaire de paquet ça rend pas terrible et SFML est déjà affiché vu que c'est le nom du paquet.
- Il faut impérativement >=NuGet-2.5. Sinon on ne peut installer le paquet que pour la solution et non le projet. Donc c'est quasi useless (il faut se taper toute la conf du projet à la main alors que c'est justement le but de NuGet d'éviter ça)
- Je n'ai pas réussit (pas vraiment cherché non plus) a permettre une configuration automatique du mode "statique". Mais je les inclus dans le paquet tout de même donc on peut changer ça à la main.
- Je n'ai pas géré les dépendances de SFML (libsndfile-1.dll et openal32.dll). Je les distribue avec le paquet tout comme toi. Idéalement il faudrait créer une dépendance vers des paquets nuget qui fourniraient ces dll. Je n'ai pas pris le temps de vérifier si ces paquets nuget existent.
- J'ai été obligé d'ajouter un fichier "SFML.hpp" dans le répertoire parent de celui contenant "Graphics.hpp" et autre. En effet, la commande qui génère le paquet ne conserve pas l'arborescence si je ne fais pas ça, du coup on doit faire #include <Graphics.hpp> au lieu de <SFML/Graphics.hpp>. Le fichier que j'ai ajouté se contente de faire un include SFML/*.hpp.
Si ça dérange je chercherai un moyen de le dégager tout en gardant la structure.
Voilà, je crois que c'est tout.