Lazarus-IDE Komponente -> Project Parameter abfragen

Rund um die LCL und andere Komponenten
Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Wie ich da schon erwähnt habe, bin ich an einer AVR-Komponente für die IDE entwickeln.
Ich bin schon recht weit gekommen, so das Parameter welche bei "Project --> Projecteinstellungen..." auslesen / schreiben kann.

Dies funktioniert alles über TLazProject, welche in der Unit ProjectIntf steckt.

Code: Alles auswählen

function TProjectAVRApp.InitProject(AProject: TLazProject): TModalResult;
....
  AProject.LazCompilerOptions.TargetCPU := 'avr';
  AProject.LazCompilerOptions.TargetOS := 'embedded';
  AProject.LazCompilerOptions.TargetProcessor := 'avr5'
Dies sieht zum zB. bei Zielplattform so aus.

Und das "Project --> Projecteinstellungen... --> Compiler-Kommandos --> Benutzerdfinierte Einstellungen ":

Code: Alles auswählen

AProject.LazCompilerOptions.CustomOptions := '-WpATMEGA328P' + #13#10 1 '-al';


Nur kann ich nirgends etwas finden, wo die Parameter von hier sind: "Project --> Projecteinstellungen... --> Compiler-Kommandos --> Nacher ausführen"

Hat jemand eine Idee ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 315
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: OS: Windows 10 | Lazarus: 2.0.8 + Fixes + Trunk 32bit
CPU-Target: 32Bit
Wohnort: Dresden

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von sstvmaster »

In der project.pp, bei mir unter "C:\fpcupdeluxe\lazarus\ide" ab Zeile 6260 - 6275 steht folgendes:

Code: Alles auswählen

constructor TProjectCompilerOptions.Create(const AOwner: TObject);
begin
  FCompileReasons := [crCompile, crBuild, crRun];
  inherited Create(AOwner, TProjectCompilationToolOptions);
  with TProjectCompilationToolOptions(ExecuteBefore) do begin // <-- hier
    DefaultCompileReasons:=crAll;
    CompileReasons:=DefaultCompileReasons;
  end;
  with TProjectCompilationToolOptions(ExecuteAfter) do begin  // <-- hier
    DefaultCompileReasons:=crAll;
    CompileReasons:=DefaultCompileReasons;
  end;
  if AOwner <> nil
  then FProject := AOwner as TProject;
  ParsedOpts.OnLocalSubstitute:=@SubstituteProjectMacros;
end;


Vielleicht hilft das weiter?
LG Maik

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Hat mir leider nicht weiter geholfen.
Ich kann leider nichts von After oder Before finden.

Was ich gefunden habe ist "Project --> Projecteinstellungen... --> Compiler-Kommandos --> Compiler"

Aber leider befindet sich "Nachher ausführen" oder "Vorher ausführen" nicht in der Nähe.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Ein bisschen weiter bin ich gekommen, den Befehl für "vorher ausführen" habe ich unterdessen gefunden.

Code: Alles auswählen

  AProject.LazCompilerOptions.SetAlternativeCompile('avrdude .........', False); 


Dieser befindet sich auch in der Unit CompOptsIntf, wie die restlichen TLazCompilerOptions Parameter.
Dieser ist ganz unten bei der Classe TLazCompilerOptions.

Code: Alles auswählen

    // execute
    property CompilerPath: String read GetCompilerPath write SetCompilerPath;
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); virtual; abstract; // disable normal compile and call this instead
  end;   

Aber ein Befehl für "Nachher ausführen" fehlt da leider.

Auch fehlt das Gegenstück GetAlternativeCompile. :roll:

Google wird auch immer schlechter, ganze 5 Einträge findet er zu SetAlternativeCompile. :roll:


Wen ich in der *.lpi Datei gucke ist vorher und nachher schon übereinander.

Code: Alles auswählen

  <CompilerOptions>
    <Version Value="11"/>
    <SearchPaths>
      <IncludeFiles Value="$(ProjOutDir)"/>
      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    </SearchPaths>
    <CodeGeneration>
      <TargetProcessor Value="avr5"/>
      <TargetCPU Value="avr"/>
      <TargetOS Value="embedded"/>
    </CodeGeneration>
    <Other>
      <CustomOptions Value="-WpATMEGA328P
-al"/>
      <ExecuteBefore>
        <Command Value="bbbbbbbbbbbbbbbbbbbbbbb"/>
      </ExecuteBefore>
      <ExecuteAfter>
        <Command Value="ccccccccccccccccccccc"/>
      </ExecuteAfter>
    </Other>
    <CompileReasons Compile="False" Build="False" Run="False"/>
  </CompilerOptions>


PS: Ich habe noch im englischen Forum nachgefragt, vielleicht weis es dort jemand, immerhin sind dort auch die Entwickler der IDE.
http://forum.lazarus.freepascal.org/ind ... #msg296512 :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Das ganze scheint echt schwierig zu sein, anscheinend ist das "Nachher" nicht implementiert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von mse »

Warum machst du nicht einfach ein Projekt-Template welches die benötigten Angaben enthält? Du kannst dich ja am MSEide Projekt-Template für STM32 orientieren, speziell 'Projekt'-'Options'-'Makros'.

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Ich habe die Lazarus-IDE erweitert, dabei habe ich folgende Änderungen gemacht:

Code: Alles auswählen

// === Lazarus 1.9.0 r58920M ===
 
// components/ideintf/compoptsintf.pas: Zeile 454
// alt
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); virtual; abstract; // disable normal compile and call this instead
// neu
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean; After: Boolean = False); virtual; abstract; // disable normal compile and call this instead
 
 
// ide/compileroptions.pp: Zeile 499 + 3695
 
// alt
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); override;
.....
procedure TBaseCompilerOptions.SetAlternativeCompile(const Command: string;
  ScanFPCMsgs: boolean);
begin
  CompilerPath:='';
  ExecuteBefore.Command:=Command;
  if ScanFPCMsgs then
    ExecuteBefore.Parsers.Text:=SubToolFPC+LineEnding+SubToolMake
  else
    ExecuteBefore.Parsers.Clear;
end;
 
// neu
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean; After:Boolean); override;
.....
procedure TBaseCompilerOptions.SetAlternativeCompile(const Command: string;
  ScanFPCMsgs: boolean; After: Boolean);
begin
  CompilerPath:='';
 
  if After then begin
    ExecuteAfter.Command:=Command;
    if ScanFPCMsgs then
      ExecuteAfter.Parsers.Text := SubToolFPC + LineEnding + SubToolMake
    else
      ExecuteAfter.Parsers.Clear;
  end else begin
    ExecuteBefore.Command:=Command;
    if ScanFPCMsgs then
      ExecuteBefore.Parsers.Text := SubToolFPC + LineEnding + SubToolMake
    else
      ExecuteBefore.Parsers.Clear;
  end;
end;
 
// ide/project.pp: Zeile 551 + 6255
 
// alt
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); override;
.....
procedure TProjectCompilerOptions.SetAlternativeCompile(const Command: string;
  ScanFPCMsgs: boolean);
begin
  inherited SetAlternativeCompile(Command, ScanFPCMsgs);
  CompileReasons:=[];
end;
 
// neu
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean; After:Boolean); override;
.....
procedure TProjectCompilerOptions.SetAlternativeCompile(const Command: string;
  ScanFPCMsgs: boolean; After: Boolean);
begin
  inherited SetAlternativeCompile(Command, ScanFPCMsgs, After);
  CompileReasons:=[];
end;


Mit folgenden Zeilen, wird mir schön Nachher und Vorher eingetragen.

Code: Alles auswählen

  AProject.LazCompilerOptions.CompilerPath := 'Compiler Pfad';
  AProject.LazCompilerOptions.SetAlternativeCompile('Vorher...', True);
  AProject.LazCompilerOptions.SetAlternativeCompile('Nachher... mit avrdude', True, True);


Wen das Lazarus-Team dies einbauen könnte hätte ich schon gewonnen. Mit folgender Änderung wäre das ganze Abwärtskompatibilität.

Was mir noch aufgefallen ist, SetAlternativeCompile wurde erst mit Lazarus 1.9 eingebaut. In Lazarus 1.8.4 gibt es diese Funktion noch gar nicht.

Die neuste Package habe ich auf GIT hochgeladen: https://github.com/sechshelme/AVR-Lazar ... VR_Package
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1412
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Warf »

Erstell doch einen Patch und reiche ihn via bugtracler oder dem englischen Forum ein, da sind die Chancen wahrscheinlich am besten, da der Patch direkt in den Trunk geladen werden kann

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Und wie erstellt man so einen Batch ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1412
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Warf »


Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

Brauche ich da keine Zugriffsrechte für die SVN ?

Aber momentan ist es sowieso recht schwierig, die Trunk von FPC und Lazarus funktionieren beide momentan nicht.
Mal gucken, ob sie nächste Woche wieder funktionieren.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4096
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von af0815 »

Trunk fpc würde ich aktuell nicht nehem. IMHO besser ist der fixes32. Da ist alles vom Trunk drinnen was sich im letzten Jahr geändert hat und im neuen fpc stable drinnen sein wird. Oder hat sich für AVR etc. In den letzten 2 Wochen was geändert?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »

IMHO besser ist der fixes32.
Habe ich auch schon probiert, aber auch dort bleibt fpcupdeluxe hängen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 4711
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von Mathias »



Jetzt kann ich es bei Gelegenheit mit dem Patch probieren. Ein aktuelles Lazarus Trunk konnte ich jetzt installieren, FPC ist momentan egal, das ich die Stable nehmen musste, auf die Package hat dies keinen Einfluss, diese kann ich auch ohne AVR-Cross entwickeln.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

kupferstecher
Beiträge: 261
Registriert: Do 17. Nov 2016, 11:52

Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Beitrag von kupferstecher »

[quote="Mathias"]Ich habe die Lazarus-IDE erweitert, dabei habe ich folgende Änderungen gemacht:

Code: Alles auswählen

// === Lazarus 1.9.0 r58920M === 
// components/ideintf/compoptsintf.pas: Zeile 454
// alt
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean); virtual; abstract; // disable normal compile and call this instead
// neu
    procedure SetAlternativeCompile(const Command: string; ScanFPCMsgs: boolean; After: Boolean = False); virtual; abstract; // disable normal compile and call this instead
 

Ich würde vorschlagen, neue Prozeduren anzulegen, der Name ist auch ziemlich irreführend. Außerdem solltest du die "CompileReasons", das sind die drei Häckchen, übergeben.

Der Kommentar "// disable normal compile and call this instead" spricht auch für was anderes.

Vorschlag:
procedure SetExecuteBeforeCommand(const ACommand: string; ACompileReasons: TCompileReasons);
procedure SetExecuteAfterCommand(const ACommand: string; ACompileReasons: TCompileReasons);
 
Allerdings, richtige Setter wären das dann auch nicht, da ja zwei Variablen übergeben werden. K.A. wie man es richtig macht...

Antworten