Sign in Join
Wiki copytemporary

InstantFPC/fr: what changed

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

OldNewLine
1-\
2-\
31=Overview=
42
53Cet outil vous permet d'exécuter un programme Pascal comme un script sous Linux, BSD, OS X et Windows. P.ex. :
64
75``` pascal
86#!/usr/bin/env instantfpc
97begin
108 writeln('Hello fpc user');
119end.
1210```
1311
1412Enregistrez le fichier en hello.pas, définissez la permission en exécution (pour Linux et consort) et exécutez-le:
1513
1614``` bash
1715[]$ chmod a+x hello.pas
1816[]$ ./hello.pas
1917Hello fpc user
2018```
2119
2220**Notes:**
2321
2422- La première ligne est appelée *shebang* et est débarrassée du source avant de le passer au compilateur.
2523- 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.
2624
2725Bien sûr vous pouvez passer des paramètres à votre script:
2826
2927``` pascal
3028#!/usr/bin/env instantfpc
3129var
3230 i: Integer;
3331begin
3432 for i:=0 to ParamCount do writeln(ParamStr(i));
3533end.
3634```
3735
3836Enregistrez le fichier comme params.pas, définissez la permission en exécution et exécutez-le:
3937
4038``` bash
4139[]$ chmod a+x params.pas
4240[]$ ./params.pas A B
4341/home/mattias/.cache/instantfpc/params.pas
4442A
4543B
4644```
4745
4846# Télécharger
4947
5048Pas besoin de télécharger: instantfpc fait partie des sources de FPC 2.6+ dans *utils/instantfpc* et est installé par défaut.
5149
5250## Anciennes versions
5351
5452Pour fpc 2.5.1 et suivantes: c'est dans les sources de fpc:
5553
5654``` bash
5755svn co http://svn.freepascal.org/svn/fpc/trunk/utils/instantfpc instantfpc
5856```
5957
6058Pour fpc 2.4.4 et 2.4.5:
6159
6260``` bash
6361svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/applications/instantfpc instantfpc
6462```
6563
6664# Installation
6765
6866Note: 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.
6967
70681. Compilez le projet instantfpc.lpi avec Lazarus ou Lazbuild. Ou compilez-le directement avec *fpc instantfpc.pas*.
71692. Placez l'exécutable dans un répertoire de votre PATH, par exemple /usr/bin:
7270
7371``` bash
7472sudo cp instantfpc /usr/bin/
7573```
7674
7775# Comment ça marche
7876
7977Il 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.
8078
8179# Paramètres de instantfpc
8280
8381- **-h**: Affiche l'aide et se termine
8482- **-v**: Affiche la version courante et se termine.\>
8583- **--get-cache**: Affiche le répertoire cache courant et se termine.
8684- **--set-cache=\<directory\>**: Définit le cache courant.
8785- **-B**: force la compilation même si le programme en cache est valide.
8886- **--compiler=\<path to compiler\>** utilise ce compilateur. Par défaut, fpc est recherché dans le PATH.
8987- **--skip-run**: N'exécute pas le programme. Utile pour tester si le script compile. Meilleur si combiné avec -B.
9088- Variable d'environnement **INSTANTFPCCACHE**: Définit le répertoire du cache. L'option --get-cache peut surcharger ceci.
9189- Variable d'environnement **INSTANTFPCOPTIONS**: Les options à passer au compilateur, passées avant les paramètres de la ligne de commande.
9290
9391# Passage de paramètres au compilateur
9492
9593Les paramètres du compilateur peuvent être passés dans la ligne shebang. Remarque: vous ne pouvez pas utiliser la commande 'env'.
9694
9795``` pascal
9896#!/usr/bin/instantfpc -O1 -Ci
9997begin
10098end.
10199```
102100
103101Et/Ou vous pouvez placer les options du compilateur dans la variable d'environnement **INSTANTFPCOPTIONS**:
104102
105103``` bash
106104export INSTANTFPCOPTIONS="-Fu~/lazarus/components/codetools/units/x86_64-linux/"
107105```
108106
109107``` pascal
110108#!/usr/bin/instantfpc
111109uses FileProcs; // unit FileProcs is in codetools
112110begin
113111end.
114112```
115113
116114# Exemple
117115
118116L'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:
119117
120118``` pascal
121119#!/usr/bin/env instantfpc
122120uses
123121 SysUtils;
124122var
125123 theWord: String;
126124begin
127125 if ParamStr(1) = '' then
128126 begin
129127 write('SVP, entrez le mot à "numéronymiser": ');
130128 readln(theWord);
131129 end
132130 else
133131 theWord := ParamStr(1);
134132 if length(theWord) > 2 then
135133 writeln(theWord[1] + IntToStr(length(theWord)-2) + theWord[length(theWord)])
136134 else
137135 writeln('N/A');
138136end.
139137```
140138
141139# Usage avec Lazarus
142140
143141Depuis Lazarus 0.9.31, l'EDI ignore la ligne shebang. Vous obtenez toutes les caractéristiques normal du code.
144142
145143Installez 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.
146144
147145## Compiler dans Lazarus
148146
149147Comment convertir un projet Lazarus pour le compiler avec **instantfpc**:
150148
151149Requiert:
152150
153151- Le source principal du projet Lazarus est le programme instantfpc.
154152
155153Réglage:
156154
157155- Aller vers Projet / Options du projet / Compiler commands / Compilation
158156- Désactivez tout les cases à cocher **Appel sur** pour **Compiler**
159157- Définissez dans **Exécuter avant** la **Commande** en:
160158
161159``` bash
162160instantfpc --skip-run -B -gl "-Fu$(ProjUnitPath)" $Name($(ProjFile))
163161```
164162
165163- Activez les cases à cocher des scan *make* et *fpc*
166164
167165Remarques:
168166
169167- L'option *-gl* demande à FPC de compiler avec les informations de débogage
170168- L'option *--skip-run -B* compile sans exécuter après.
171169- Voir [[IDE Macros in paths and filenames|IDE Macros]]
172170
173171## Débogage avec Lazarus
174172
175173Comment convertir un projet Lazarus pour déboguer un programme instantfpc:
176174
177175Requiert:
178176
179177- Ci dessus **Compiler dans Lazarus**
180178
181179Réglages:
182180
183181- Aller vers Exécuter / Paramètres d'exécution
184182- Définissez **Local / Application hôte** vers \$(InstantFPCCache)/\$NameOnly(\$(ProjFile))
185183- Definissez **Répertoire de travail** vers \$(ProjPath)
186184
187185# Usage dans Apache
188186
189187Ceci 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).
190188
191189``` bash
192190mkdir /var/apacheinstantfpc
193191chown www-data.www-data /var/apacheinstantfpc
194192```
195193
196194Passez une variable d'environnement pour les script CGI en ajoutant la ligne suivante dans les configs Apache:
197195
198196`SetEnv INSTANTFPCCACHE /var/apacheinstantfpc`
199197
200198**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.
201199
202200**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.
203201
204202## Exemple Apache montrant env
205203
206204Configurer un répertoire pour exécuter les scripts cgi. P.ex.:
207205
208206 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
209207 <Directory "/usr/lib/cgi-bin">
210208 AllowOverride None
211209 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
212210 Order allow,deny
213211 Allow from all
214212 SetEnv INSTANTFPCCACHE /var/apacheinstantfpc
215213 # You can put fpc options into /etdc/fpc.cfg or here:
216214 #SetEnv INSTANTFPCOPTIONS -Fu/path/to/somevar/ppufiles
217215
218216 # If this is root directory, you might have to set:
219217 #Require all granted
220218 </Directory>
221219
222220Si votre Apache n'a pas encore activé le module **cgi**:
223221
224222`a2enmod cgi`
225223
226224Placez le script suivant dans /usr/lib/cgi-bin/showenv.pas:
227225
228226``` pascal
229227#!/usr/bin/instantfpc
230228{$mode objfpc}{$H+}
231229uses SysUtils;
232230var i: Integer;
233231begin
234232 writeln('Content-type: text/html');
235233 writeln;
236234 writeln('<HTML><BODY>');
237235 for i:=0 to Paramcount do
238236 writeln('Param ',i,' ',ParamStr(i),'<br>');
239237 for i:=1 to GetEnvironmentVariableCount do
240238 writeln('Env ',GetEnvironmentString(i),'<br>');
241239 writeln('</BODY></HTML>');
242240end.
243241```
244242
245243# Bugs / A faire / Limitations
246244
247245- 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).
248246- Sous Windows, seul le premier paramètre est passé au script.
249247- 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.
250248- 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.
251249
252250# Alternatives
253251
254252L'astuce suivante marche en utilisant le shell *bash*. Placez le programme dans le fichier *fpc_script.sh*:
255253
256254``` pascal
257255// 2>/dev/null; fpc fpc_script.pp &> build.log && exec ./fpc_script "$@" || cat build.log; exit
258256begin
259257 writeln('');
260258end.
261259```
262260
263261---
264262*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