Sign in Join
Wiki copytemporary

InstantFPC/fr: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11=Overview=
22
33Cet outil vous permet d'exécuter un programme Pascal comme un script sous Linux, BSD, OS X et Windows. P.ex. :
44
55``` pascal
66#!/usr/bin/env instantfpc
77begin
88 writeln('Hello fpc user');
99end.
1010```
1111
1212Enregistrez le fichier en hello.pas, définissez la permission en exécution (pour Linux et consort) et exécutez-le:
1313
1414``` bash
1515[]$ chmod a+x hello.pas
1616[]$ ./hello.pas
1717Hello fpc user
1818```
1919
2020**Notes:**
2121
2222- La première ligne est appelée *shebang* et est débarrassée du source avant de le passer au compilateur.
2323- 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.
2424
2525Bien sûr vous pouvez passer des paramètres à votre script:
2626
2727``` pascal
2828#!/usr/bin/env instantfpc
2929var
3030 i: Integer;
3131begin
3232 for i:=0 to ParamCount do writeln(ParamStr(i));
3333end.
3434```
3535
3636Enregistrez le fichier comme params.pas, définissez la permission en exécution et exécutez-le:
3737
3838``` bash
3939[]$ chmod a+x params.pas
4040[]$ ./params.pas A B
4141/home/mattias/.cache/instantfpc/params.pas
4242A
4343B
4444```
4545
4646# Télécharger
4747
4848Pas besoin de télécharger: instantfpc fait partie des sources de FPC 2.6+ dans *utils/instantfpc* et est installé par défaut.
4949
5050## Anciennes versions
5151
5252Pour fpc 2.5.1 et suivantes: c'est dans les sources de fpc:
5353
5454``` bash
5555svn co http://svn.freepascal.org/svn/fpc/trunk/utils/instantfpc instantfpc
5656```
5757
5858Pour fpc 2.4.4 et 2.4.5:
5959
6060``` bash
6161svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/applications/instantfpc instantfpc
6262```
6363
6464# Installation
6565
6666Note: 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.
6767
68681. Compilez le projet instantfpc.lpi avec Lazarus ou Lazbuild. Ou compilez-le directement avec *fpc instantfpc.pas*.
69692. Placez l'exécutable dans un répertoire de votre PATH, par exemple /usr/bin:
7070
7171``` bash
7272sudo cp instantfpc /usr/bin/
7373```
7474
7575# Comment ça marche
7676
7777Il 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.
7878
7979# Paramètres de instantfpc
8080
8181- **-h**: Affiche l'aide et se termine
8282- **-v**: Affiche la version courante et se termine.\>
8383- **--get-cache**: Affiche le répertoire cache courant et se termine.
8484- **--set-cache=\<directory\>**: Définit le cache courant.
8585- **-B**: force la compilation même si le programme en cache est valide.
8686- **--compiler=\<path to compiler\>** utilise ce compilateur. Par défaut, fpc est recherché dans le PATH.
8787- **--skip-run**: N'exécute pas le programme. Utile pour tester si le script compile. Meilleur si combiné avec -B.
8888- Variable d'environnement **INSTANTFPCCACHE**: Définit le répertoire du cache. L'option --get-cache peut surcharger ceci.
8989- Variable d'environnement **INSTANTFPCOPTIONS**: Les options à passer au compilateur, passées avant les paramètres de la ligne de commande.
9090
9191# Passage de paramètres au compilateur
9292
9393Les paramètres du compilateur peuvent être passés dans la ligne shebang. Remarque: vous ne pouvez pas utiliser la commande 'env'.
9494
9595``` pascal
9696#!/usr/bin/instantfpc -O1 -Ci
9797begin
9898end.
9999```
100100
101101Et/Ou vous pouvez placer les options du compilateur dans la variable d'environnement **INSTANTFPCOPTIONS**:
102102
103103``` bash
104104export INSTANTFPCOPTIONS="-Fu~/lazarus/components/codetools/units/x86_64-linux/"
105105```
106106
107107``` pascal
108108#!/usr/bin/instantfpc
109109uses FileProcs; // unit FileProcs is in codetools
110110begin
111111end.
112112```
113113
114114# Exemple
115115
116116L'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:
117117
118118``` pascal
119119#!/usr/bin/env instantfpc
120120uses
121121 SysUtils;
122122var
123123 theWord: String;
124124begin
125125 if ParamStr(1) = '' then
126126 begin
127127 write('SVP, entrez le mot à "numéronymiser": ');
128128 readln(theWord);
129129 end
130130 else
131131 theWord := ParamStr(1);
132132 if length(theWord) > 2 then
133133 writeln(theWord[1] + IntToStr(length(theWord)-2) + theWord[length(theWord)])
134134 else
135135 writeln('N/A');
136136end.
137137```
138138
139139# Usage avec Lazarus
140140
141141Depuis Lazarus 0.9.31, l'EDI ignore la ligne shebang. Vous obtenez toutes les caractéristiques normal du code.
142142
143143Installez 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.
144144
145145## Compiler dans Lazarus
146146
147147Comment convertir un projet Lazarus pour le compiler avec **instantfpc**:
148148
149149Requiert:
150150
151151- Le source principal du projet Lazarus est le programme instantfpc.
152152
153153Réglage:
154154
155155- Aller vers Projet / Options du projet / Compiler commands / Compilation
156156- Désactivez tout les cases à cocher **Appel sur** pour **Compiler**
157157- Définissez dans **Exécuter avant** la **Commande** en:
158158
159159``` bash
160160instantfpc --skip-run -B -gl "-Fu$(ProjUnitPath)" $Name($(ProjFile))
161161```
162162
163163- Activez les cases à cocher des scan *make* et *fpc*
164164
165165Remarques:
166166
167167- L'option *-gl* demande à FPC de compiler avec les informations de débogage
168168- L'option *--skip-run -B* compile sans exécuter après.
169169- Voir [[IDE Macros in paths and filenames|IDE Macros]]
170170
171171## Débogage avec Lazarus
172172
173173Comment convertir un projet Lazarus pour déboguer un programme instantfpc:
174174
175175Requiert:
176176
177177- Ci dessus **Compiler dans Lazarus**
178178
179179Réglages:
180180
181181- Aller vers Exécuter / Paramètres d'exécution
182182- Définissez **Local / Application hôte** vers \$(InstantFPCCache)/\$NameOnly(\$(ProjFile))
183183- Definissez **Répertoire de travail** vers \$(ProjPath)
184184
185185# Usage dans Apache
186186
187187Ceci 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).
188188
189189``` bash
190190mkdir /var/apacheinstantfpc
191191chown www-data.www-data /var/apacheinstantfpc
192192```
193193
194194Passez une variable d'environnement pour les script CGI en ajoutant la ligne suivante dans les configs Apache:
195195
196-`SetEnv INSTANTFPCCACHE /var/apacheinstantfpc`
196+``` pascal
197+SetEnv INSTANTFPCCACHE /var/apacheinstantfpc
198+```
197199
198200**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.
199201
200202**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.
201203
202204## Exemple Apache montrant env
203205
204206Configurer un répertoire pour exécuter les scripts cgi. P.ex.:
205207
206208 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
207209 <Directory "/usr/lib/cgi-bin">
208210 AllowOverride None
209211 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
210212 Order allow,deny
211213 Allow from all
212214 SetEnv INSTANTFPCCACHE /var/apacheinstantfpc
213215 # You can put fpc options into /etdc/fpc.cfg or here:
214216 #SetEnv INSTANTFPCOPTIONS -Fu/path/to/somevar/ppufiles
215217
216218 # If this is root directory, you might have to set:
217219 #Require all granted
218220 </Directory>
219221
220222Si votre Apache n'a pas encore activé le module **cgi**:
221223
222-`a2enmod cgi`
224+```text
225+a2enmod cgi
226+```
223227
224228Placez le script suivant dans /usr/lib/cgi-bin/showenv.pas:
225229
226230``` pascal
227231#!/usr/bin/instantfpc
228232{$mode objfpc}{$H+}
229233uses SysUtils;
230234var i: Integer;
231235begin
232236 writeln('Content-type: text/html');
233237 writeln;
234238 writeln('<HTML><BODY>');
235239 for i:=0 to Paramcount do
236240 writeln('Param ',i,' ',ParamStr(i),'<br>');
237241 for i:=1 to GetEnvironmentVariableCount do
238242 writeln('Env ',GetEnvironmentString(i),'<br>');
239243 writeln('</BODY></HTML>');
240244end.
241245```
242246
243247# Bugs / A faire / Limitations
244248
245249- 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).
246250- Sous Windows, seul le premier paramètre est passé au script.
247251- 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.
248252- 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.
249253
250254# Alternatives
251255
252256L'astuce suivante marche en utilisant le shell *bash*. Placez le programme dans le fichier *fpc_script.sh*:
253257
254258``` pascal
255259// 2>/dev/null; fpc fpc_script.pp &> build.log && exec ./fpc_script "$@" || cat build.log; exit
256260begin
257261 writeln('');
258262end.
259263```
260264
261265---
262266*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