# Specifications du format PAKVA v0.1

Le fichier **PAKVA** est un fichier qui définit les spécifications d'un logiciel. Il est utilisé par **evezh** pour
chercher les dernières versions disponibles pour un logiciel et par **govel** pour construire les paquets.
La syntaxe des fichiers **PAKVA** est prévue pour etre lisible en python et en bash.

Ce document décrit les différentes clés, fonctions et macros disponibles.

## Structure générale
Les lignes commençant par # sont des commentaires

la syntaxe est de type clé=valeur (avec ou sans guillemets)
les tableaux sont en style bash clé=(val1 val2 val3)
les fonction sont en style bash fonction(){}

### Clés disponibles

**PAKVA** dispose de nombreuses clé disponibles :

| Clé | Type | Obligatoire | Description |
| :---| :--- | :---------- | :---------- |
| `name` | string | oui | Nom du paquet principal |
| `basename` | string | non | Nom utilisé pour les archives/source/builddir (défaut = $name) |
| `description` | string | non | Description du paquet |
| `packager` | string | non | Packager du paquet |
| `version` | string | oui | Version du logiciel |
| `revision` | int | non | Révision locale |
| `url` | string | non | Page d'accueil du logiciel |
| `source` | array | oui | Sources du paquets |
| `license` | string | non | Licence du logiciel |
| `depends` | array | oui | Dépendances d'utilisation |
| `make_depends` | array | non | Dépendances de construction |
| `check_depends` | array | non | Dépendances de test |


### Fonctions disponibles

| Fonction | Obligatoire | Instructions |
| :------- | :---------- | :---------- |
| `build()` | oui | Compilation |
| `check()` | non | Tests |
| `pak()` | oui | Packaging |
| `pre_install()` | non |  Avant installation |
| `post_install()` | non | Après installation |
| `pre_upgrade()` | non | Avant mise à jour |
| `post_upgrade()` | non | Après mise à jour |
| `pre_remove()` | non | Avant suppression |
| `post_remove()` | non | Après suppression |

### Multi Packaging

On peut packager plus d'un paquet à partir d'un seul fichier **PAKVA**, et c'est assez simple.

la syntaxe devient :

`pak:<name>()`
`pre_install:<name>()`
`post_install:<name>()`
`pre_upgrade:<name>()`
`post_upgrade:<name>()`
`pre_remove:<name>()`
`post_remove:<name>()`

### Macros disponibles

| Macro | Description |
| :---- | :---------- |
| `$PAK` | Dossier global d'installation |
| `$SRC` | Dossier d'extraction des sources |
| `$TMP` | Dossier temporaire pour chaque `pak:<name>` |
| `name, $version, $revision, $basename` | Metadonnées du paquet principal |
| `pakname` | nom du paquet courant dans un `pak:<name>` |






