Lazarus-IDE Komponente -> Project Parameter abfragen

Rund um die LCL und andere Komponenten

Lazarus-IDE Komponente -> Project Parameter abfragen

Beitragvon Mathias » 4. Sep 2018, 20:47 Lazarus-IDE Komponente -> Project Parameter abfragen

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
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon sstvmaster » 5. Sep 2018, 07:06 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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?
OS: Windows 7 32/64bit
Lazarus 1.8.4, 32bit
Lazarus 2.1.0 Trunk 3.3.1, 32bit
sstvmaster
 
Beiträge: 93
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.4 + 2.1.0 Trunk 3.3.1 / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon Mathias » 5. Sep 2018, 17:12 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 5. Sep 2018, 21:28 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 6. Sep 2018, 19:09 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 9. Sep 2018, 06:42 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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'.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Mathias » 9. Sep 2018, 17:07 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 9. Sep 2018, 20:13 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 9. Sep 2018, 20:34 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Und wie erstellt man so einen Batch ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 9. Sep 2018, 20:43 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 9. Sep 2018, 21:32 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 10. Sep 2018, 08:34 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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).
af0815
 
Beiträge: 3501
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Mathias » 10. Sep 2018, 17:11 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

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: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 10. Sep 2018, 17:27 Re: Lazarus-IDE Komponente -> Project Parameter abfragen



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
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon kupferstecher » 10. Sep 2018, 17:39 Re: Lazarus-IDE Komponente -> Project Parameter abfragen

[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...
kupferstecher
 
Beiträge: 166
Registriert: 17. Nov 2016, 11:52

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried