Vorgangsweise, um einen Patch zu erstellen

Für Dinge rund um die Unterstützung des offizielen Lazarusprojekts, wie Übersetzungsabsprachen und anderem.
braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

Ich würde gerne einen Patch für ein paar Verbesserungen der TStringlist erstellen. Momentan stehe ich bei einigen organisatorischen Fragen an.
Am Vordringlichsten: Ich habe FPC Trunc heruntergeladen, aber die Verzeichnisstruktur hat überhaupt keine Ähnlicheit mit der Verzeichnisstruktur von FPC in der Lazarus Installation.
Ist irgendwo dokumentiert, wie man da am besten vorgeht?
Und nicht ganz so akut, aber nicht weniger wichtig: Gibt es irgendwo fertige TestUnits, an Hand derer man das Verhalten der Stringlist validieren kann?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von wp_xyz »

FPC trunc nur herunterladen, glaube ich, reicht nicht. Sieh nach, ob auf deinem System SVN installiert ist (bei Windows: hole dir TortoiseSVN) und lade die FPC-Sourcen damit herunten. Baue dir eine lauffähtige FPC-Version, dazu gibt es hier im Forum oder im englischen Forum gute Skripte. Binde den neuen FPC in Lazarus ein (Tools > Options > Compiler executable und FPC Source Directory). Wenn du damit ein Beispielprojekt fehlerfrei übersetzen kannst, kannst du die Änderungen an TStringList vornehmen.

Schreibe dir ein Testprogramm und füge classes.pp inkl seinem Pfad in den Projektoptionen als Bestandteil des Projektes hinzu, die Frage, ober der Pfad erweitert werden soll, musst du unbedingt bejahen. Versuche das Testprogramm zu übersetzen. Wenn eine Unit nicht gefunden wird, kommt auch diese mit ins Projekt. Wenn der Compilierungsvorgang durchläuft, verwendet die IDE die von dir gleich zu verändernde classes.pp bei der Übersetzung deines Projektes. Du solltest nun noch die Option -gw2 in den Projektoptionen unter "Hinzufügungen und Beeinflussungen" als Option hinzufügen - damit kannst du die erreichbaren FPC-Quellen debuggen, insbesondere die zu verändernde classes.pp.

Dieses Vorgehen vermeidet das langwierige Neuübersetzen von FPC während jeder Änderung an Classes.pp. Den Trick hat mir Michl verraten, danke!

Wenn deine TStringList getestet und in Ordnung ist, kannst du den Patch erzeugen: Mit TortoiseSVN Rechtsklick auf dem obersten FPC-Verzeichnis > "Patch erzeugen", und du erhältst die Patch-Datei, die du mit dem BugReport einreichen musst. Unter Linux musst du, vom FPC-Verzeichnis aus, "svn -diff > dateiname.patch" in einem Konsolen-Fenster eingeben - "dateiname.patch" ist dabei der Name der Datei, in der die Unterschiede deiner Änderungen zur aktuellen SVN-Version gespeichert werden.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

Danke!

Puh, ich habe gleich befürchtet, dass das in Arbeit ausarten wird... :D

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von wp_xyz »

braunbär hat geschrieben:Puh, ich habe gleich befürchtet, dass das in Arbeit ausarten wird... :D

Wie man's nimmt... Wenn erst mal alles eingerichtet ist, geht es im Prinzip nicht viel anders als an einem eigenen Programm zu arbeiten (nur dass man sich halt in den FPC/Lazarus-Quellen nicht auskennt).

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

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von af0815 »

Wenn man sich den fpc/Lazarus mittels fpcupdeluxe baut und den svn sowieso hat, ist es einfacher. BTW. fpcupdeluxe verwendet intern auch Patches um die Änderungen des Benutzers mit zu nehmen. Außerdem kann man seine Patches auch testen, wenn man die in den Setup+ Einstellungen angibt.

@braunbär: Windows oder Linux ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

Windows.
Ich habe jetzt einmal Tortoise SVN installiert und den FPC damit heruntergeladen. Das hat so weit funktioniert.
Am nächsten Schritt bin ich gerade dran - aus dem Quellcode einen lauffähigen FPC samt Runtime zu erzeugen.

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

So, für heute gebe ich es einmal auf.

Entsprechen den (mögicherweise veralteten) Informationen, die ich im Internet gefunden habe, habe ich den Pfad auf den alten FPC der globalen Path Variable hinzugefügt.
Dann make all bersucht - erzeugt mir die Fehlermeldung
makefile:29: *** You need the GNU utils package to use this Makefile. Stop

Habe daraufhin die GNU Utils heruntergeaden (die scheint es nur in 32bit zu geben, aber das sollte wohl egal sein?) , installiert und den Pfad zum bin Verzeichnis ebenfalls dem globalen Pfad hinzugefügt. Hilft nichts, die Fehlermeldung kommt immer noch, auch nachdem ich das Verzeichnis an den Anfang des Pfads gesetzt habe (damit er nicht zuerst etwas anderes findet):

Code: Alles auswählen

 
Microsoft Windows [Version 10.0.16299.726]
(c) 2017 Microsoft Corporation. Alle Rechte vorbehalten.
 
c:\FPC\Trunc>path
PATH=c:\Program Files (x86)\GnuWin32\bin\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\AMD\ATI.ACE\Core-Static;C:\Program Files\Git\cmd;C:\Program Files\TortoiseSVN\bin;c:\lazarus\fpc\3.0.4\bin\x86_64-win64\;C:\Users\franz\AppData\Local\Microsoft\WindowsApps
 
c:\FPC\Trunc>make all
makefile:29: *** You need the GNU utils package to use this Makefile.  Stop.
 
c:\FPC\Trunc>

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von fliegermichl »

Solcherart Probleme hatte ich auch schon. Das System hatte dann die make.exe von meiner alten Delphi Installation gefunden und verwendet.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von wp_xyz »

Das Problem ist, dass alle möglichen Programme meinen, sich im System-Pfad verewigen zu müssen, weil sie nicht in der Lage sind, ihre eigenen Dateien zu finden. Daher lass den globalen Systempfad unangetastet, sondern stecke das alles in dein lokales Script.

Mit den gnu utils habe ich noch nicht gearbeitet. Nimm stattdessen das bin-Verzeichnis einer bereits existierenden fpc-Version, um damit den neuen fpc zu compilieren. Es ist wichtig, dass das die letzte Release-Version ist, z.Zt. also fpc 3.0.4.

Die folgende Batch-Datei habe ich eben getestet. Passe die "set"-Anweisungen im Dateianfang auf deine Situation an:
  • BINUTILS_DIR ist das Verzeichnis der bereits existierenden fpc-Version, deren Compiler du verwendest um die neue Version zu bauen
  • DEST_DIR ist das Verzeichnis, in das du per svn die FPC-Quellen ausgecheckt hast (die Sources lade ich übrigens von https://svn.freepascal.org/svn/fpc/trunk - nur für den Fall, dass es da auch unterschiedliche Angaben im Netz gibt)
  • SVN_CMD wird in der aktuellen Version des Scripts nicht verwendet, es ist der Pfad zur svn.exe, die mit TortoiseSVN auf dein System gekommen ist. Du kannst später, wenn du das fpc-Trunk-Verzeichnis einmal geupdatet hast, die "cleanup"-Zeile wieder aktivieren, um Probleme beim Neuübersetzen zu vermeiden.

Code: Alles auswählen

set BINUTILS_DIR=D:\lazarus184_fpc304\fpc\3.0.4\bin\i386-win32
set BOOTSTRAP_COMPILER=%BINUTILS_DIR%\ppc386.exe
set DEST_DIR=d:\fpc\trunk
set SVN_CMD="C:\Program Files\TortoiseSVN\bin\svn.exe"
 
path %BINUTILS_DIR%
 
:: clean up svn
::%SVN_CMD% cleanup --remove-unversioned --remove-ignored %DEST_DIR%
 
::------------------------------------------------------------------------------
:: Build FPC
::------------------------------------------------------------------------------
cd %DEST_DIR%
md bin\i386-win32
copy %BINUTILS_DIR%%\*.* bin\i386-win32
make clean all OPT='-gl' FPC=%BOOTSTRAP_COMPILER%
make install OPT='-gl' PREFIX=%DEST_DIR% FPC=%BOOTSTRAP_COMPILER%
 
::------------------------------------------------------------------------------
:: Make fpc.cfg,
::------------------------------------------------------------------------------
cd %DEST_DIR%
fpcmkcfg -d basepath=%DEST_DIR% -o %DEST_DIR%\bin\i386-win32\fpc.cfg

Nicht ungeduldig werden: Das Neuübersetzen des fpc dauert seine Zeit. Das Script sollte ohne Fehlermeldung zum Ende kommen.

Wenn du später einmal den fpc-Trunk aktualisieren willst (z.B. um zu prüfen, ob deine Änderungen an TStringList wirklich richtig eingebaut sind), mache einen Rechtsklick auf dem fpc-trunk-Verzeichnis (es sollte von TortoiseSVN ein Overlay-Icon erhalten haben, das von grün auf rot umschlägt, wenn du eigene Änderungen gemacht hast), und wähle "SVN Update". Falls du auf eine spezielle Revision updaten willst (z.B. um einen Fehler im FPC einzugrenzen), wähle im Untermenü den Punkt "Update to revision" und gib die Revision-Nummer an. Wenn das Update geladen ist, führe das obige Script einfach erneut aus (entferne vorher aber die Kommentar-Doppelpunkte vor %SVN_CMD% cleanup ...)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von theo »

braunbär hat geschrieben:Ich würde gerne einen Patch für ein paar Verbesserungen der TStringlist erstellen.


Das allererste was ich machen würde, wäre auf der Mailing List abklären, ob die Verbesserungen überhaupt eine Chance haben übernommen zu werden.
TStringList ist doch recht ausentwickelt und man kann natürlich nicht jeden Wunsch dort einbauen. Es gibt ja auch eine Pflicht zur Hygiene.

Hast du das denn abgeklärt?
Das würde mich interessieren.

https://www.freepascal.org/maillist.var

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

theo hat geschrieben:Das allererste was ich machen würde, wäre auf der Mailing List abklären, ob die Verbesserungen überhaupt eine Chance haben übernommen zu werden.
TStringList ist doch recht ausentwickelt und man kann natürlich nicht jeden Wunsch dort einbauen. Es gibt ja auch eine Pflicht zur Hygiene.

Hast du das denn abgeklärt?
Das würde mich interessieren.

Ja, habe ich. Und hinsichtlich custom Sortierung ist die TStringlist sehr weit von "ausentwickelt" entfernt.

@wp_xyz
Danke für das Skript. Jetzt geht es hoffentlich bald weiter. Es ist zwar offensichtlich der Fall, aber mir völlig rätselhaft, warum das make mit irgend welchen falschen Dateien arbeitet, nachdem ich das (glaube ich zumindest) richtige Verzeichnis an den Anfang des Suchpfads gesetzt habe. Aber ich werde das jetzt nicht weiter verfolgen und statt dessen mit deinem Skript weitermachen.

edit: FPC erfolgreich erzeugt. :D

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

oje, zu früh gefreut.
Mit dem aktuellen FPC Trunc kompiliert Lazarus nicht (Offenbar Erweiterungen unter anderem beim Threading, die inkompatibel mit dem alten Lazarus Code sind.
D.h. ich muss vermutlich auch Lazarus Trunc installieren, denn ich vermute, die mit FPC 3.0.4 kompilierten Lazarus Packages werden sich nicht mit dem FPC Trunc vertragen?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von wp_xyz »

braunbär hat geschrieben:oje, zu früh gefreut.
Mit dem aktuellen FPC Trunc kompiliert Lazarus nicht (Offenbar Erweiterungen unter anderem beim Threading, die inkompatibel mit dem alten Lazarus Code sind.
D.h. ich muss vermutlich auch Lazarus Trunc installieren, denn ich vermute, die mit FPC 3.0.4 kompilierten Lazarus Packages werden sich nicht mit dem FPC Trunc vertragen?

Das sollte nicht sein. Hast du die den neuen FPC und die FPC-Quellen in "Tools" > "Options" richtig angegeben? Evtl auch "Tools" > "Rescan FPC Source directory" aufrufen. Wenn die Kompilierung abbricht, hilft in der Regel, die IDE sauber neu zu kompilieren ("Tools" > "Configure Build Lazarus" > in Box "Clean up" die Option "Clean all" markieren, auch "Switch after building to automatically" markieren > Build).

[EDIT] Ach ja, nach dem Eintrag des neuen Compiler in "Tools" > "Options" kommt immer eine Fehlermeldung, dass irgendwas nicht stimmt (hab den Wortlaut schon wieder vergessen). Bitte ignorieren und trotzdem weitermachen.

[Nochmal EDIT] Ich hab's jetzt selbst ausprobiert und kann's bestätigen. Bevor wir uns mit Workarounds an diesem Problem vorbeimogeln, würde ich empfehlen, auch Laz trunk zu installieren. Ist einfacher als fpc:
  • mit TortoiseSVN herunterladen (https://svn.freepascal.org/svn/lazarus/trunk)
  • aus einer existierenden Installation (möglichst v1.8.4) Datei die lazarus.exe und lazarus.cfg ins Rootverzeichnis der neuen svn-Version kopieren.
  • lazarus.cfg öffnen und als primäres Konfig-Verzeichnis den Ordner eintragen, in dem das User-Profil für Lazarus abgespeichert werden soll (Falls du keine Lazarus.cfg hast, einfach als Text-Datei erzeugen mit folgendem Inhalt (sinngemäß):
    --primary-config-path=D:\ProgrammDaten\lazarus-config\lazarus-trunk_fpc3
    Dadurch bleibt deine bisherige Lazarus-Installation unberührt.
  • Auch das Verzeichnis mingw aus einer existierenden Laz-Installation ins neue Verzeichnis kopieren (enthält den Debugger).
  • Lazarus.exe starten. Das erscheinende Formular ausfüllen. Dabei die schon oben erwähnte Fehlermeldung ignorieren, und Lazarus sollte starten.
  • Nicht unbedingt nötig: Gleich wieder beenden, damit das neue Profil geschrieben wird und wieder neu starten. Nun kommt noch eine Frage, ob die Version upgegradet werden soll -> Ja.
  • Fertig

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von m.fuchs »

Darf ich an dieser Stelle noch einmal darauf hinweisen, dass der Hauptentwicklungszweig TRUNK genannt wird. TRUNC hingegen ist eine Funktion.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Vorgangsweise, um einen Patch zu erstellen

Beitrag von braunbär »

Hi!

Ein Stück weiter bin ich gekommen, aber jetzt hänge ich leider wieder. Auch die LCL von Lazarus Trunk lässt sich mit dem FPC Trunk nicht kompilieren. Hier ein Auszug aus der Meldungsliste mit dem Fehler:

Code: Alles auswählen

 
Kompiliere Package LCL 1.8.4: Exit code 1, Fehler: 1, Warnungen: 2, Hinweise: 100
win32int.pp(21,26) Warning: User defined: Fix implicit pointer conversions
win32listsl.inc(37,13) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(123,7) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(156,16) Hint: Local variable "w" of a managed type does not seem to be initialized
win32listsl.inc(157,59) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(224,79) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(228,64) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(330,53) Hint: Local variable "EditText" of a managed type does not seem to be initialized
win32listsl.inc(457,13) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(482,58) Hint: Conversion between ordinals and pointers is not portable
win32listsl.inc(572,17) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(39,6) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(36,49) Hint: Parameter "Data" not used
win32callback.inc(545,58) Warning: Local variable "BytesCount" does not seem to be initialized
win32callback.inc(660,68) Hint: Local variable "parTop" does not seem to be initialized
win32callback.inc(660,60) Hint: Local variable "parLeft" does not seem to be initialized
win32callback.inc(1098,20) Hint: Local variable "Files" of a managed type does not seem to be initialized
win32callback.inc(1102,27) Hint: Local variable "WideBuffer" of a managed type does not seem to be initialized
win32callback.inc(1199,11) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1390,14) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1417,23) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1429,14) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(362,52) Hint: Parameter "aIsDblClick" not used
win32callback.inc(1679,17) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1706,36) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1720,8) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1731,23) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1740,16) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1798,8) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1801,29) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1806,11) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1807,11) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(1874,57) Hint: Local variable "NewTop" does not seem to be initialized
win32callback.inc(1874,49) Hint: Local variable "NewLeft" does not seem to be initialized
win32callback.inc(1923,46) Hint: Local variable "NewHeight" does not seem to be initialized
win32callback.inc(1923,35) Hint: Local variable "NewWidth" does not seem to be initialized
win32callback.inc(1994,27) Hint: Local variable "LMouseEvent" does not seem to be initialized
win32callback.inc(2150,31) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(2356,22) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(2365,22) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(2368,11) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(2670,21) Hint: Conversion between ordinals and pointers is not portable
win32callback.inc(2761,44) Hint: Local variable "LRect" does not seem to be initialized
win32callback.inc(2830,29) Hint: Parameter "window_hwnd" not used
win32callback.inc(2830,49) Hint: Parameter "msg" not used
win32callback.inc(2830,81) Hint: Parameter "dwTime" not used
win32object.inc(63,5) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32object.inc(119,5) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32int.pp(193,28) Hint: Parameter "AComponent" not used
win32int.pp(160,27) Hint: Parameter "Msg" not used
win32object.inc(399,35) Hint: Conversion between ordinals and pointers is not portable
win32object.inc(399,33) Hint: Local variable "AMessage" does not seem to be initialized
win32object.inc(419,7) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32int.pp(185,45) Hint: Parameter "ASystemTopAlso" not used
win32object.inc(690,11) Hint: Conversion between ordinals and pointers is not portable
win32object.inc(690,22) Hint: Conversion between ordinals and pointers is not portable
win32int.pp(192,24) Hint: Parameter "CanvasHandle" not used
win32winapi.inc(57,100) Hint: Local variable "EY" does not seem to be initialized
win32winapi.inc(57,96) Hint: Local variable "EX" does not seem to be initialized
win32winapi.inc(57,92) Hint: Local variable "SY" does not seem to be initialized
win32winapi.inc(57,88) Hint: Local variable "SX" does not seem to be initialized
win32winapi.inc(80,69) Hint: Local variable "EY" does not seem to be initialized
win32winapi.inc(80,65) Hint: Local variable "EX" does not seem to be initialized
win32winapi.inc(80,61) Hint: Local variable "SY" does not seem to be initialized
win32winapi.inc(80,57) Hint: Local variable "SX" does not seem to be initialized
win32winapi.inc(184,24) Hint: Local variable "ScrollInfo" does not seem to be initialized
win32winapi.inc(228,80) Hint: Conversion between ordinals and pointers is not portable
win32winapi.inc(415,28) Hint: Conversion between ordinals and pointers is not portable
win32winapi.inc(441,43) Hint: Local variable "BufferWideString" of a managed type does not seem to be initialized
win32winapih.inc(33,27) Hint: Parameter "ClipboardType" not used
win32winapih.inc(35,30) Hint: Parameter "ClipboardType" not used
win32winapi.inc(609,35) Hint: Local variable "BufferString" of a managed type does not seem to be initialized
win32winapi.inc(682,9) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32winapi.inc(695,9) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32winapi.inc(547,7) Note: Call to subroutine "function GetDebugLogger:TLazLogger;" marked as inline is not inlined
win32winapih.inc(60,23) Hint: Parameter "Handle" not used
win32winapi.inc(1270,29) Hint: Local variable "ALogFont" does not seem to be initialized
win32winapi.inc(1309,53) Hint: Conversion between ordinals and pointers is not portable
win32winapi.inc(1309,51) Error: Incompatible type for arg no. 3: Got "<procedure variable type of function(var ENUMLOGFONTEXA;var NEWTEXTMETRICEXA;LongInt;Int64):LongInt;StdCall>", expected "<procedure variable type of function(var ENUMLOGFONTEXW;var NEWTEXTMETRICEXW;LongInt;Int64):LongInt;StdCall>"
 

Die LCL will da dem FPC ein A für ein W vormachen, aber der lässt sich nicht überlisten. :D


So, den Prozedurnamen hab ich probeweise ausgebessert, auf FontEnumExProcW - damit ist der Fehler zuindest weg - ich hoffe, dass das stimmt, ist aber jetzt wahrscheinlich auch nicht so wichtig.
Jetzt dürfte aber noch irgend etwas in meinen Einstellungen falsch sein, weil beim kompilieren der c:\FPC\Trunc\rtl\win64\system.pp sagt er, dass der systemh.inc nicht findet. Das Incude File liegt in c:\FPC\Trunc\rtl\inc\systemh.inc
Zuletzt geändert von braunbär am Fr 14. Dez 2018, 14:11, insgesamt 2-mal geändert.

Antworten