Copie du wikimiroir

Ceci est un miroir du wiki de pascal.chat. La modification, l’historique et la connexion se trouvent là-bas.

InstantFPC/fr

Deutsch · English · Français

=Overview=

Cet outil vous permet d'exécuter un programme Pascal comme un script sous Linux, BSD, OS X et Windows. P.ex. :

pascal
#!/usr/bin/env instantfpc
begin
  writeln('Hello fpc user');
end.

Enregistrez le fichier en hello.pas, définissez la permission en exécution (pour Linux et consort) et exécutez-le:

bash
[]$ chmod a+x hello.pas
[]$ ./hello.pas
Hello fpc user

Notes:

Bien sûr vous pouvez passer des paramètres à votre script:

pascal
#!/usr/bin/env instantfpc
var
  i: Integer;
begin
  for i:=0 to ParamCount do writeln(ParamStr(i));
end.

Enregistrez le fichier comme params.pas, définissez la permission en exécution et exécutez-le:

bash
[]$ chmod a+x params.pas
[]$ ./params.pas A B
/home/mattias/.cache/instantfpc/params.pas
A
B

Télécharger

Pas besoin de télécharger: instantfpc fait partie des sources de FPC 2.6+ dans utils/instantfpc et est installé par défaut.

Anciennes versions

Pour fpc 2.5.1 et suivantes: c'est dans les sources de fpc:

bash
svn co http://svn.freepascal.org/svn/fpc/trunk/utils/instantfpc instantfpc

Pour fpc 2.4.4 et 2.4.5:

bash
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/applications/instantfpc instantfpc

Installation

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.

  1. Compilez le projet instantfpc.lpi avec Lazarus ou Lazbuild. Ou compilez-le directement avec fpc instantfpc.pas.
  2. Placez l'exécutable dans un répertoire de votre PATH, par exemple /usr/bin:
bash
sudo cp instantfpc /usr/bin/

Comment ça marche

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.

Paramètres de instantfpc

Passage de paramètres au compilateur

Les paramètres du compilateur peuvent être passés dans la ligne shebang. Remarque: vous ne pouvez pas utiliser la commande 'env'.

pascal
#!/usr/bin/instantfpc -O1 -Ci
begin
end.

Et/Ou vous pouvez placer les options du compilateur dans la variable d'environnement INSTANTFPCOPTIONS:

bash
export INSTANTFPCOPTIONS="-Fu~/lazarus/components/codetools/units/x86_64-linux/"
pascal
#!/usr/bin/instantfpc
uses FileProcs; // unit FileProcs is in codetools
begin
end.

Exemple

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:

pascal
#!/usr/bin/env instantfpc
uses
  SysUtils;
var
  theWord: String;
begin  
  if ParamStr(1) = '' then
  begin
    write('SVP, entrez le mot à "numéronymiser": ');
    readln(theWord);
  end
  else
    theWord := ParamStr(1);
  if length(theWord) > 2 then
    writeln(theWord[1] + IntToStr(length(theWord)-2) + theWord[length(theWord)])
  else
    writeln('N/A');
end.

Usage avec Lazarus

Depuis Lazarus 0.9.31, l'EDI ignore la ligne shebang. Vous obtenez toutes les caractéristiques normal du code.

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.

Compiler dans Lazarus

Comment convertir un projet Lazarus pour le compiler avec instantfpc:

Requiert:

Réglage:

bash
instantfpc --skip-run -B -gl "-Fu$(ProjUnitPath)" $Name($(ProjFile))

Remarques:

Débogage avec Lazarus

Comment convertir un projet Lazarus pour déboguer un programme instantfpc:

Requiert:

Réglages:

Usage dans Apache

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

bash
mkdir /var/apacheinstantfpc
chown www-data.www-data /var/apacheinstantfpc

Passez une variable d'environnement pour les script CGI en ajoutant la ligne suivante dans les configs Apache:

pascal
SetEnv INSTANTFPCCACHE /var/apacheinstantfpc

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.

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.

Exemple Apache montrant env

Configurer un répertoire pour exécuter les scripts cgi. P.ex.:

pascal
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
  AllowOverride None
  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  Order allow,deny
  Allow from all
  SetEnv INSTANTFPCCACHE /var/apacheinstantfpc
  # You can put fpc options into /etdc/fpc.cfg or here:
  #SetEnv INSTANTFPCOPTIONS -Fu/path/to/somevar/ppufiles
pascal
# If this is root directory, you might have to set:
#Require all granted
pascal
</Directory>

Si votre Apache n'a pas encore activé le module cgi:

text
a2enmod cgi

Placez le script suivant dans /usr/lib/cgi-bin/showenv.pas:

pascal
#!/usr/bin/instantfpc
{$mode objfpc}{$H+}
uses  SysUtils;
var  i: Integer;
begin
  writeln('Content-type: text/html');
  writeln;
  writeln('<HTML><BODY>');
  for i:=0 to Paramcount do
    writeln('Param ',i,' ',ParamStr(i),'<br>');
  for i:=1 to GetEnvironmentVariableCount do
    writeln('Env ',GetEnvironmentString(i),'<br>');
  writeln('</BODY></HTML>');
end.

Bugs / A faire / Limitations

Alternatives

L'astuce suivante marche en utilisant le shell bash. Placez le programme dans le fichier fpc_script.sh:

pascal
// 2>/dev/null; fpc fpc_script.pp &> build.log && exec ./fpc_script "$@" || cat build.log; exit
begin
  writeln('');
end.

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.

Version 3, dernière modification par WikiArchive .