InstantFPC/fr: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: InstantFPC/fr
| Old | New | Line | |
|---|---|---|---|
| 1 | + | \ | |
| 2 | + | \ | |
| 3 | + | =Overview= | |
| 4 | + | ||
| 5 | + | Cet outil vous permet d'exécuter un programme Pascal comme un script sous Linux, BSD, OS X et Windows. P.ex. : | |
| 6 | + | ||
| 7 | + | ``` pascal | |
| 8 | + | #!/usr/bin/env instantfpc | |
| 9 | + | begin | |
| 10 | + | writeln('Hello fpc user'); | |
| 11 | + | end. | |
| 12 | + | ``` | |
| 13 | + | ||
| 14 | + | Enregistrez le fichier en hello.pas, définissez la permission en exécution (pour Linux et consort) et exécutez-le: | |
| 15 | + | ||
| 16 | + | ``` bash | |
| 17 | + | []$ chmod a+x hello.pas | |
| 18 | + | []$ ./hello.pas | |
| 19 | + | Hello fpc user | |
| 20 | + | ``` | |
| 21 | + | ||
| 22 | + | **Notes:** | |
| 23 | + | ||
| 24 | + | - La première ligne est appelée *shebang* et est débarrassée du source avant de le passer au compilateur. | |
| 25 | + | - La ligne 'program hello;' est optionnelle dans FPC. Comme **instantfpc** passe l'option **-o** au compilateur, la ligne est ignorée, donc vous pouvez l'omettre. | |
| 26 | + | ||
| 27 | + | Bien sûr vous pouvez passer des paramètres à votre script: | |
| 28 | + | ||
| 29 | + | ``` pascal | |
| 30 | + | #!/usr/bin/env instantfpc | |
| 31 | + | var | |
| 32 | + | i: Integer; | |
| 33 | + | begin | |
| 34 | + | for i:=0 to ParamCount do writeln(ParamStr(i)); | |
| 35 | + | end. | |
| 36 | + | ``` | |
| 37 | + | ||
| 38 | + | Enregistrez le fichier comme params.pas, définissez la permission en exécution et exécutez-le: | |
| 39 | + | ||
| 40 | + | ``` bash | |
| 41 | + | []$ chmod a+x params.pas | |
| 42 | + | []$ ./params.pas A B | |
| 43 | + | /home/mattias/.cache/instantfpc/params.pas | |
| 44 | + | A | |
| 45 | + | B | |
| 46 | + | ``` | |
| 47 | + | ||
| 48 | + | # Télécharger | |
| 49 | + | ||
| 50 | + | Pas besoin de télécharger: instantfpc fait partie des sources de FPC 2.6+ dans *utils/instantfpc* et est installé par défaut. | |
| 51 | + | ||
| 52 | + | ## Anciennes versions | |
| 53 | + | ||
| 54 | + | Pour fpc 2.5.1 et suivantes: c'est dans les sources de fpc: | |
| 55 | + | ||
| 56 | + | ``` bash | |
| 57 | + | svn co http://svn.freepascal.org/svn/fpc/trunk/utils/instantfpc instantfpc | |
| 58 | + | ``` | |
| 59 | + | ||
| 60 | + | Pour fpc 2.4.4 et 2.4.5: | |
| 61 | + | ||
| 62 | + | ``` bash | |
| 63 | + | svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/applications/instantfpc instantfpc | |
| 64 | + | ``` | |
| 65 | + | ||
| 66 | + | # Installation | |
| 67 | + | ||
| 68 | + | Note: C'est déjà installé avec fpc 2.5.1 et suivantes. Les utilisateurs sous Windows doivent placer instantfpc.exe dans un dossier de leur PATH. | |
| 69 | + | ||
| 70 | + | 1. Compilez le projet instantfpc.lpi avec Lazarus ou Lazbuild. Ou compilez-le directement avec *fpc instantfpc.pas*. | |
| 71 | + | 2. Placez l'exécutable dans un répertoire de votre PATH, par exemple /usr/bin: | |
| 72 | + | ||
| 73 | + | ``` bash | |
| 74 | + | sudo cp instantfpc /usr/bin/ | |
| 75 | + | ``` | |
| 76 | + | ||
| 77 | + | # Comment ça marche | |
| 78 | + | ||
| 79 | + | Il utilise un répertoire cache pour compiler. Par défaut c'est \$HOME/.cache/instantfpc. Si la variable \$HOME n'est pas définie, cela déclenche une erreur. Vous pouvez surcharger le dossier en définissant la variable d'environnement INSTANTFPCCACHE. Il compare le source avec celui enregistré dans le cache et s'il diffère, le source est compilé en tenant compte des paramètres passés dans la ligne shebang (la première ligne dans le script après \#!). Après la compilation réussie, il exécute le programme. Si la compilation échoue, il écrit la sortie de fpc sur la sortie standard. | |
| 80 | + | ||
| 81 | + | # Paramètres de instantfpc | |
| 82 | + | ||
| 83 | + | - **-h**: Affiche l'aide et se termine | |
| 84 | + | - **-v**: Affiche la version courante et se termine.\> | |
| 85 | + | - **--get-cache**: Affiche le répertoire cache courant et se termine. | |
| 86 | + | - **--set-cache=\<directory\>**: Définit le cache courant. | |
| 87 | + | - **-B**: force la compilation même si le programme en cache est valide. | |
| 88 | + | - **--compiler=\<path to compiler\>** utilise ce compilateur. Par défaut, fpc est recherché dans le PATH. | |
| 89 | + | - **--skip-run**: N'exécute pas le programme. Utile pour tester si le script compile. Meilleur si combiné avec -B. | |
| 90 | + | - Variable d'environnement **INSTANTFPCCACHE**: Définit le répertoire du cache. L'option --get-cache peut surcharger ceci. | |
| 91 | + | - Variable d'environnement **INSTANTFPCOPTIONS**: Les options à passer au compilateur, passées avant les paramètres de la ligne de commande. | |
| 92 | + | ||
| 93 | + | # Passage de paramètres au compilateur | |
| 94 | + | ||
| 95 | + | Les paramètres du compilateur peuvent être passés dans la ligne shebang. Remarque: vous ne pouvez pas utiliser la commande 'env'. | |
| 96 | + | ||
| 97 | + | ``` pascal | |
| 98 | + | #!/usr/bin/instantfpc -O1 -Ci | |
| 99 | + | begin | |
| 100 | + | end. | |
| 101 | + | ``` | |
| 102 | + | ||
| 103 | + | Et/Ou vous pouvez placer les options du compilateur dans la variable d'environnement **INSTANTFPCOPTIONS**: | |
| 104 | + | ||
| 105 | + | ``` bash | |
| 106 | + | export INSTANTFPCOPTIONS="-Fu~/lazarus/components/codetools/units/x86_64-linux/" | |
| 107 | + | ``` | |
| 108 | + | ||
| 109 | + | ``` pascal | |
| 110 | + | #!/usr/bin/instantfpc | |
| 111 | + | uses FileProcs; // unit FileProcs is in codetools | |
| 112 | + | begin | |
| 113 | + | end. | |
| 114 | + | ``` | |
| 115 | + | ||
| 116 | + | # Exemple | |
| 117 | + | ||
| 118 | + | L'exemple de script suivant délivre le "numéronyme" d'une chaîne (p.ex. i18n pour internationalization) qui peut être fourni soit par un paramètre ou, si manquant, saisi par l'utilisateur: | |
| 119 | + | ||
| 120 | + | ``` pascal | |
| 121 | + | #!/usr/bin/env instantfpc | |
| 122 | + | uses | |
| 123 | + | SysUtils; | |
| 124 | + | var | |
| 125 | + | theWord: String; | |
| 126 | + | begin | |
| 127 | + | if ParamStr(1) = '' then | |
| 128 | + | begin | |
| 129 | + | write('SVP, entrez le mot à "numéronymiser": '); | |
| 130 | + | readln(theWord); | |
| 131 | + | end | |
| 132 | + | else | |
| 133 | + | theWord := ParamStr(1); | |
| 134 | + | if length(theWord) > 2 then | |
| 135 | + | writeln(theWord[1] + IntToStr(length(theWord)-2) + theWord[length(theWord)]) | |
| 136 | + | else | |
| 137 | + | writeln('N/A'); | |
| 138 | + | end. | |
| 139 | + | ``` | |
| 140 | + | ||
| 141 | + | # Usage avec Lazarus | |
| 142 | + | ||
| 143 | + | Depuis Lazarus 0.9.31, l'EDI ignore la ligne shebang. Vous obtenez toutes les caractéristiques normal du code. | |
| 144 | + | ||
| 145 | + | Installez le paquet EDI **instantfpclaz**, qui est fourni avec Lazarus. Ceci ajoutera un nouveau modèle de projet pour créer des programmes instantfpc, par exemple, sous Fichier / Nouveau / Projet / InstantFPC program. | |
| 146 | + | ||
| 147 | + | ## Compiler dans Lazarus | |
| 148 | + | ||
| 149 | + | Comment convertir un projet Lazarus pour le compiler avec **instantfpc**: | |
| 150 | + | ||
| 151 | + | Requiert: | |
| 152 | + | ||
| 153 | + | - Le source principal du projet Lazarus est le programme instantfpc. | |
| 154 | + | ||
| 155 | + | Réglage: | |
| 156 | + | ||
| 157 | + | - Aller vers Projet / Options du projet / Compiler commands / Compilation | |
| 158 | + | - Désactivez tout les cases à cocher **Appel sur** pour **Compiler** | |
| 159 | + | - Définissez dans **Exécuter avant** la **Commande** en: | |
| 160 | + | ||
| 161 | + | ``` bash | |
| 162 | + | instantfpc --skip-run -B -gl "-Fu$(ProjUnitPath)" $Name($(ProjFile)) | |
| 163 | + | ``` | |
| 164 | + | ||
| 165 | + | - Activez les cases à cocher des scan *make* et *fpc* | |
| 166 | + | ||
| 167 | + | Remarques: | |
| 168 | + | ||
| 169 | + | - L'option *-gl* demande à FPC de compiler avec les informations de débogage | |
| 170 | + | - L'option *--skip-run -B* compile sans exécuter après. | |
| 171 | + | - Voir [[IDE Macros in paths and filenames|IDE Macros]] | |
| 172 | + | ||
| 173 | + | ## Débogage avec Lazarus | |
| 174 | + | ||
| 175 | + | Comment convertir un projet Lazarus pour déboguer un programme instantfpc: | |
| 176 | + | ||
| 177 | + | Requiert: | |
| 178 | + | ||
| 179 | + | - Ci dessus **Compiler dans Lazarus** | |
| 180 | + | ||
| 181 | + | Réglages: | |
| 182 | + | ||
| 183 | + | - Aller vers Exécuter / Paramètres d'exécution | |
| 184 | + | - Définissez **Local / Application hôte** vers \$(InstantFPCCache)/\$NameOnly(\$(ProjFile)) | |
| 185 | + | - Definissez **Répertoire de travail** vers \$(ProjPath) | |
| 186 | + | ||
| 187 | + | # Usage dans Apache | |
| 188 | + | ||
| 189 | + | Ceci montre comment utiliser instantfpc dans un serveur Web Apache. Instantfpc nécessite un répertorie cache qui doit être accessible en écriture par un compte Apache. Disons qu'Apache tourne avec le compte utilisateur www-data et le groupe www-data (Redhat, Fedora: apache.apache, voir la config. pour l'utilisateur et le groupe). | |
| 190 | + | ||
| 191 | + | ``` bash | |
| 192 | + | mkdir /var/apacheinstantfpc | |
| 193 | + | chown www-data.www-data /var/apacheinstantfpc | |
| 194 | + | ``` | |
| 195 | + | ||
| 196 | + | Passez une variable d'environnement pour les script CGI en ajoutant la ligne suivante dans les configs Apache: | |
| 197 | + | ||
| 198 | + | `SetEnv INSTANTFPCCACHE /var/apacheinstantfpc` | |
| 199 | + | ||
| 200 | + | **Conseil de sécurité:** Bien que l'utilisateur apache doit avoir un accès complet au répertoire de cache, assurez-vous que le répertoire n'est pas disponible à partir de l'extérieur (par exemple, ne pas mettre sous /var/www). Il peut contenir des anciens scripts. Et comme tout autre type de script: Vérifiez toutes les entrées pour les attaques. | |
| 201 | + | ||
| 202 | + | **Remarque sur l'optimisation:** Le cache de instantfpc utilise un fichier par nom de script. **Ne pas utiliser le même nom de script deux fois**, sinon il sera compilé de nombreuses fois. Vous pouvez créer plusieurs répertoires de cache. Chaque section \<Directory\> et \<VirtualHost\> peut définir leurs propres variables d'environnement, et donc vous pouvez configurer un répertoire de cache pour chacun. | |
| 203 | + | ||
| 204 | + | ## Exemple Apache montrant env | |
| 205 | + | ||
| 206 | + | Configurer un répertoire pour exécuter les scripts cgi. P.ex.: | |
| 207 | + | ||
| 208 | + | ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ | |
| 209 | + | <Directory "/usr/lib/cgi-bin"> | |
| 210 | + | AllowOverride None | |
| 211 | + | Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch | |
| 212 | + | Order allow,deny | |
| 213 | + | Allow from all | |
| 214 | + | SetEnv INSTANTFPCCACHE /var/apacheinstantfpc | |
| 215 | + | # You can put fpc options into /etdc/fpc.cfg or here: | |
| 216 | + | #SetEnv INSTANTFPCOPTIONS -Fu/path/to/somevar/ppufiles | |
| 217 | + | ||
| 218 | + | # If this is root directory, you might have to set: | |
| 219 | + | #Require all granted | |
| 220 | + | </Directory> | |
| 221 | + | ||
| 222 | + | Si votre Apache n'a pas encore activé le module **cgi**: | |
| 223 | + | ||
| 224 | + | `a2enmod cgi` | |
| 225 | + | ||
| 226 | + | Placez le script suivant dans /usr/lib/cgi-bin/showenv.pas: | |
| 227 | + | ||
| 228 | + | ``` pascal | |
| 229 | + | #!/usr/bin/instantfpc | |
| 230 | + | {$mode objfpc}{$H+} | |
| 231 | + | uses SysUtils; | |
| 232 | + | var i: Integer; | |
| 233 | + | begin | |
| 234 | + | writeln('Content-type: text/html'); | |
| 235 | + | writeln; | |
| 236 | + | writeln('<HTML><BODY>'); | |
| 237 | + | for i:=0 to Paramcount do | |
| 238 | + | writeln('Param ',i,' ',ParamStr(i),'<br>'); | |
| 239 | + | for i:=1 to GetEnvironmentVariableCount do | |
| 240 | + | writeln('Env ',GetEnvironmentString(i),'<br>'); | |
| 241 | + | writeln('</BODY></HTML>'); | |
| 242 | + | end. | |
| 243 | + | ``` | |
| 244 | + | ||
| 245 | + | # Bugs / A faire / Limitations | |
| 246 | + | ||
| 247 | + | - Les changements dans le compilateur ou les unités en sont pas vérifiés. Si vous installez un nouveau compilateur, vous devez nettoyer le cache (i.e. supprimer le répertoire ~/.cache/instantfpc). | |
| 248 | + | - Sous Windows, seul le premier paramètre est passé au script. | |
| 249 | + | - Avec les versions de instantfpc antérieures à 1.3, vous ne pouvez pas compiler en parallèle. Le compilateur crée des fichiers cachés comme 'link.res' pendant la compilation. Depuis la version 1.3, instantfpc utilise des répertoires temporaires pour la compilation. | |
| 250 | + | - Le cache utilise le nom de fichier sans le chemin d'accès. Donc vous ne pouvez pas exécuter deux scripts en parallèle avec le même nom et le script sera compilé à chaque fois. | |
| 251 | + | ||
| 252 | + | # Alternatives | |
| 253 | + | ||
| 254 | + | L'astuce suivante marche en utilisant le shell *bash*. Placez le programme dans le fichier *fpc_script.sh*: | |
| 255 | + | ||
| 256 | + | ``` pascal | |
| 257 | + | // 2>/dev/null; fpc fpc_script.pp &> build.log && exec ./fpc_script "$@" || cat build.log; exit | |
| 258 | + | begin | |
| 259 | + | writeln(''); | |
| 260 | + | end. | |
| 261 | + | ``` | |
| 262 | + | ||
| 263 | + | --- | |
| 264 | + | *From the Free Pascal wiki, page "InstantFPC/fr", as it stood on 2020-02-17 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
