Sign in Join
Wiki copytemporary

InstantFPC/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: InstantFPC/fr

OldNewLine
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).*

Back to history