====== Introduction ======

  *[[http://forum.kubuntu-fr.org/viewtopic.php?pid=1220598#p1220598|Librement inspiré de ceci]] \\

__Les archives sous formes **.tar.** peuvent être de deux types :__

1- Un tout-compris, on décompresse et c'est près à partir. On peut voir ça avec des applications Java ou PHP (dotclear par exemple). Dans ce cas le fichier est simplement le répertoire tout emballé. Il suffit de le décompresser, éventuellement le paramétrer et le placer dans un endroit où l'utilisateur peut lire (et parfois écrire).

2- Ce sont les sources du programme.

C'est l'ancien système, celui avant le temps des paquets. Il a pour avantage de pouvoir compiler sur de nombreuses plateformes alors qu'un paquet est limité à quelques plateformes (par exemple: Ubuntu et Debian). Les sources ne sont pas utilisables tel quel : un programmeur peut les analyser mais un ordinateur ne sait pas les exécuter. Il faut transformer les sources en un exécutable, c'est la compilation.

Il y plusieurs moyens pour compiler un programme, et ça dépend du programme. Pour les programmes en Java, **Ant** est souvent utilisé. Pour les programmes en C et C++, il faut **Make**. **Ant** et **Make** ne sont pas des compilateurs, ce sont des //programmes// qui aident à la compilation.

Par exemple, sous debian/ubuntu, pour les programmes en C/C++, il vous faut le paquet **build-essential**. Il comprend, entre autre, Make et GCC. GCC étant le compilateur. 


====== Comment faire ? (Cas général (Sources avec configure et makefile)) ======

  * Télécharger l'archive
<code>
$ wget -c http://lieu_ou_se_trouve_le_logiciel/packageXY.tar.gz
</code>
  * Décompressez l'archive (man tar pour plus d'informations)
<code>
$ tar xvf packageXY.tar.gz
</code>
  * Placez-vous dans l'archive
<code>
$ cd packageXY/
</code>
  * Configuration du package (choix par exemple du répertoire d'installation, ./configure --help vous dévoilera généralement les options utiles et nécessaires).\\
  * **./configure** lance un script qui prépare le terrain, il initialise différents fichiers de configuration en fonction de l'ordinateur utilisé. C'est à ce moment que les grosses options du programme sont choisies. Par exemple : 32 bits ou 64 bits ? Installation dans le répertoire standard ? Si le programme a des dépendances qui ne sont pas gérées. Un message affichera la librairie manquante et le processus échouera.
<code>
$ ./configure --prefix=/usr
</code>
  * Une fois que la configuration s'est réalisée avec succès, on lance **make**. Make va faire apparaître plein de messages à l'écran : ce sont les lignes de commandes lancées automatiquement pour la compilation de toutes les parties du programme et la réponse du compilateur. Une compilation d'une grosse application peut prendre des heures. L'option **-j** permet d'indiquer le nombre de processus à lancer, ce qui peut accélérer les choses pour les possesseurs d'un multiprocesseur/multicoeur.
  * Une fois cette phase terminée, l'application est compilée, prête à être utilisée. Elle est //personnalisée// : elle a été compilée en tenant compte de vos spécificités. L'installation n'est pas encore terminée car tous les fichiers créés sont encore dans le répertoire local. Si vous faites **make clean**, tous les fichiers compilés seront effacés et vous pouvez repartir de zéro. 
<code>
$ make
</code>
 * Pour installer réellement l'application, un **make install** fait l'affaire. Il faut le faire en **root** car, par défaut, il place les fichiers dans les répertoires prévus par les développeurs. Or, ceux-ci ne sont généralement accessibles en écriture qu'à root.
<code>
# make install
</code>

**Note:**
Une fois installé on peut effacer le fichier téléchargé ... sauf que certains programmes gardent des traces nécessaires à une désinstallation propre dans ce fichier (enfin, une fois que le programme est installé uniquement). Donc supprimer les sources, c'est se priver d'un (possible) outil aidant à la désinstallation. Sans lui, il faudra supprimer l'application à la main, le plus proprement possible... ce qui finit toujours par déstabiliser le système.


Alternativement vous pouvez utiliser le programme [[http://www.asic-linux.com.mx/~izto/checkinstall/index.php|Checkinstall]] qui construira un paquet pour votre distribution à partir des sources, facilitant ainsi la réinstallation ou l'installation sur d'autres machines. Checkinstall permettra aussi la prise en compte du logiciel installé par votre gestionnaire de paquet, et donc sa désinstallation avec celui-ci.

Checkinstall est disponible sur les dépôts de nombreuses distributions, dont OpenSuse, Debian, Ubuntu, Slackware... Une fois installé, remplacez la commande "make install" par :

<code># checkinstall</code>

commande à effectuer en root dans le répertoire des sources.  

====== Inclusion dans le menu (freedesktop) ======
Veuillez noter que de plus en plus de logiciels respectent ces standard, vous n'aurez peut être rien à faire ;-)


===== le fichier .desktop =====

La plupart des gestionnaires de bureau (comme Xfce) respectent les standard freedesktop, il est donc très facile de créer un fichier (packageXY.desktop) qui mettra à jour votre menu.

Vous avez besoin d'être root pour cela.\\
  * création du fichier qui devra se trouver dans **/usr/share/applications**
<code>
vim /usr/share/applications/packageXY.desktop
</code>

  * Contenu du fichier .desktop
<php>
[Desktop Entry]
Encoding=UTF-8
Name=nom_du_packageXY
Name[fr]=nom_du_packageXY (francisé au besoin) (optionnel)
Comment=le commentaire en anglais (optionnel)
Comment[fr]=le commentaire en français (optionnel)
Exec=packageXY (le binaire/script pour lancer le package)
Icon=icon_packageXY (sans l'extension (.png), voir plus bas)
Terminal=false
Type=Application
Categories=Application;System; (voir plus bas)
StartupNotify=true
</php>

  * Astuces : Si vous placez ce fichier sur votre bureau vous obtiendrez un lanceur avec icône ;-)

==== l'icône ====
Si vous souhaitez associez une icône à l'entrée du menu, il est nécessaire que votre icône soit au format .png (format 48x48) ou au format .svg .\\
Généralement, vous trouverez une icône dans l'archive des sources elle-même, jetez un oeil dans usr/share/pixmaps par exemple.\\
Cette icône devra être placée dans :\\
  * /usr/share/icons/hicolor/48x48/apps/ (si png)
  * /usr/share/icons/hicolor/scalable/apps/ (si svg)

==== La catégorie ====

Ceci vous aidera à choisir la catégorie adéquate du menu pour votre logiciel :\\
[[http://standards.freedesktop.org/menu-spec/latest/apa.html]]


