Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Hi,
in der Version 1.8 RC4 habe ich einen Bug im Bug-Tracker gemeldet. Es geht um die TFBAdmin Komponente auf der SQLDB Seite. Wenn sie auf ein Formular gesetzt wird, lässt sie sich nicht mehr entfernen und gibt Fehler aus. Compilieren geht aber problemlos.
Man hat den Quellcode einer Unit geändert und mir mitgeteilt. Es handelt sich um eine .pp unit. Leider habe ich keinen Schimmer, wie ich diese Unit in eine .ppu bzw .o Datei compiliere und dann in meiner Lazarusinstallation ein/ersetze.
Stundenlanges lesen hat mich nicht weitergebracht. Hat jemand eine Idee?
Ich kann natürlich warten bis vielleicht in einer neuen Version das geändert ist, daraus lerne ich aber nichts.
Danke schon einmal fürs Lesen.
in der Version 1.8 RC4 habe ich einen Bug im Bug-Tracker gemeldet. Es geht um die TFBAdmin Komponente auf der SQLDB Seite. Wenn sie auf ein Formular gesetzt wird, lässt sie sich nicht mehr entfernen und gibt Fehler aus. Compilieren geht aber problemlos.
Man hat den Quellcode einer Unit geändert und mir mitgeteilt. Es handelt sich um eine .pp unit. Leider habe ich keinen Schimmer, wie ich diese Unit in eine .ppu bzw .o Datei compiliere und dann in meiner Lazarusinstallation ein/ersetze.
Stundenlanges lesen hat mich nicht weitergebracht. Hat jemand eine Idee?
Ich kann natürlich warten bis vielleicht in einer neuen Version das geändert ist, daraus lerne ich aber nichts.
Danke schon einmal fürs Lesen.
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Du musst FPC neu übersetzen. Wenn du darin keine Erfahrung hast, würde ich dieses Experiment nicht mit deiner aktuellen Entwicklungsversion machen.
Erstelle eine zweite Installation. Dabei kannst du gleich FPC Trunk und Lazarus Trunk nutzen (Sourcen per SVN ziehen und per Bootstrapcompiler (letzter stabiler FPC-Compiler) erstellen). Skripte dazu findest du z.B. hier im Forum. Eine weitere Möglichkeit wäre http://wiki.freepascal.org/fpcupdeluxe. Wenn du dich nicht mit Skripten auskennst, sollte das die einfachere Möglichkeit sein.
Wenn du dann weißt, wie man FPC neu übersetzt, reicht nach geändertem RTL-/FLC-Code ein "make" mit entspr. Parametern.
PS.: Bei Interesse kann ich auch mal meine aktuellen Skripte anhängen.
Erstelle eine zweite Installation. Dabei kannst du gleich FPC Trunk und Lazarus Trunk nutzen (Sourcen per SVN ziehen und per Bootstrapcompiler (letzter stabiler FPC-Compiler) erstellen). Skripte dazu findest du z.B. hier im Forum. Eine weitere Möglichkeit wäre http://wiki.freepascal.org/fpcupdeluxe. Wenn du dich nicht mit Skripten auskennst, sollte das die einfachere Möglichkeit sein.
Wenn du dann weißt, wie man FPC neu übersetzt, reicht nach geändertem RTL-/FLC-Code ein "make" mit entspr. Parametern.
PS.: Bei Interesse kann ich auch mal meine aktuellen Skripte anhängen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Hi Michl,
werde deine Vorschläge einnmal durcharbeiten. Zumindest habe ich jetzt einen Anfang. Wenn ich deine Skripte bekommen könnte wäre das perfekt.
Danke nochmal für die Hinweise .
werde deine Vorschläge einnmal durcharbeiten. Zumindest habe ich jetzt einen Anfang. Wenn ich deine Skripte bekommen könnte wäre das perfekt.
Danke nochmal für die Hinweise .
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Die Skripte sind für Windows. Für Linux in der VM nutze ich zur Erstinstallation FPCUpDeluxe. Für Updates rufe ich dann im Terminal SVN Checkout manuell auf.
Erstellen von FPC-Trunk (Derzeit wird für FPC-Trunk der FPC-Compiler 3.0.4 benötigt. Daher nutze ich als BootStrapCompiler FPC vom Lazarus 1.8.0. Den Pfad müsstest du bei dir entsprechend anpassen. Ansonsten kann die Bat-Datei einfach in dem gewünschten Ziel-Verzeichnis ausgeführt werden. Als Voraussetzung muss SVN installiert sein. Als optisches SVN-Tool empfiehlt sich TortoiseSVN):
Als zweites kann im gleichen Verzeichnis Lazarus Trunk installiert werden (Da ich mehrere Lazarus-Versionen aufbauend auf der gleichen FPC-Version zum testen nutze, lege ich diese neben da FPC-Verzeichnis. Also wird diese Bat-Datei im gleichen Verzeichnis, wie die vorherige Bat-Datei gestartet.)
Jetzt noch eine Verknüpfung mit Lazarus auf dem Desktop gelegt und folgendes Ziel eingegeben (je nach Verzeichnis):
Wenn alles gut gegangen ist, sollte Lazarus Trunk jetzt startbar sein (beim ersten Start müssen die Pfade Compiler (z.B. C:\32fpc311\fpc\bin\i386-win32\ppc386.exe), FPC Source (z.B. C:\32fpc311\fpc) und Debugger (z.B. C:\32lazarus180\mingw\i386-win32\bin\gdb.exe) gesetzt werden).
Viel Erfolg!
Erstellen von FPC-Trunk (Derzeit wird für FPC-Trunk der FPC-Compiler 3.0.4 benötigt. Daher nutze ich als BootStrapCompiler FPC vom Lazarus 1.8.0. Den Pfad müsstest du bei dir entsprechend anpassen. Ansonsten kann die Bat-Datei einfach in dem gewünschten Ziel-Verzeichnis ausgeführt werden. Als Voraussetzung muss SVN installiert sein. Als optisches SVN-Tool empfiehlt sich TortoiseSVN):
Code: Alles auswählen
@echo on
set BootStrapCompilerPath=C:\32lazarus180\fpc\3.0.4\bin\i386-win32
set CurrentPath=%~dp0
cd %CurrentPath%
md fpc
md fpc\bin
md fpc\bin\i386-win32
copy %BootStrapCompilerPath%\*.* %CurrentPath%\fpc\bin\i386-win32
svn co https://svn.freepascal.org/svn/fpc/trunk fpc
set FpcPath=%CurrentPath%\fpc
set PATH=%BootStrapCompilerPath%;%FpcPath%\bin\i386-win32;%PATH%
cd %FpcPath%
make distclean
make all install INSTALL_PREFIX=%FpcPath% PP=%BootStrapCompilerPath%\ppc386.exe
cd %FpcPath%\bin\i386-win32
fpcmkcfg -d basepath=%FpcPath% -o .\fpc.cfg
Als zweites kann im gleichen Verzeichnis Lazarus Trunk installiert werden (Da ich mehrere Lazarus-Versionen aufbauend auf der gleichen FPC-Version zum testen nutze, lege ich diese neben da FPC-Verzeichnis. Also wird diese Bat-Datei im gleichen Verzeichnis, wie die vorherige Bat-Datei gestartet.)
Code: Alles auswählen
@echo on
set CurrentPath=%~dp0
set LazTrunk=%CurrentPath%\LazTrunk
cd %CurrentPath%
md %LazTrunk%
md %LazTrunk%\Config
svn co https://svn.freepascal.org/svn/lazarus/trunk %LazTrunk%
set PATH=%CurrentPath%\fpc\bin\i386-win32;%PATH%
cd %LazTrunk%
make clean all OPT="-glw2"
Jetzt noch eine Verknüpfung mit Lazarus auf dem Desktop gelegt und folgendes Ziel eingegeben (je nach Verzeichnis):
Code: Alles auswählen
C:\32fpc311\LazTrunk\startlazarus.exe --pcp=C:\32fpc311\LazTrunk\Config --debug-log=C:\32fpc311\LazTrunk\debug.txt
Wenn alles gut gegangen ist, sollte Lazarus Trunk jetzt startbar sein (beim ersten Start müssen die Pfade Compiler (z.B. C:\32fpc311\fpc\bin\i386-win32\ppc386.exe), FPC Source (z.B. C:\32fpc311\fpc) und Debugger (z.B. C:\32lazarus180\mingw\i386-win32\bin\gdb.exe) gesetzt werden).
Viel Erfolg!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Einen lauffähigen fpc zu bauen ist immer noch eine Herausforderung- Auch mit deinem Script, Michl, erhalte ich diesen Fehler:
Nur wenn ich das trunk-Verzeichnis komplett ausräume (alles löschen außer dem Compiler-Script) und alles neu per svn up herunterlade, wird der Kompilierungsvorgang erfolgreich beendet. Hattest du auch schon mal Probleme mit der Unit CustApp?
[...]
Compiling ptop.pp
PPU Loading C:\development\fpc\trunk\units\i386-win32\fcl-base\custapp.ppu
PPU Source: custapp.pp not available
Recompiling CustApp, checksum changed for C:\development\fpc\trunk\rtl\units\i386-win32\system.ppu
ptop.pp(21,29) Fatal: Can't find unit CustApp used by PtoP
Fatal: Compilation aborted
Nur wenn ich das trunk-Verzeichnis komplett ausräume (alles löschen außer dem Compiler-Script) und alles neu per svn up herunterlade, wird der Kompilierungsvorgang erfolgreich beendet. Hattest du auch schon mal Probleme mit der Unit CustApp?
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Der Error besagt, daß eine alte Unit verwendet wird (sie nicht neu übersetzt wurde). Das Problem habe ich öfters bei Lazarus selbst, wenn ich an dessen Sourcen oder an Packagesourcen rumspiele. Aufräumen und kompilieren hilft mir da. Leider geht das bei FPC nicht so einfach (ich kann hier zwar die Units der RTL/FCL in Lazarus debuggen/verändern/neu übersetzen wenn ich deren Pfade in das eigene Projekt übernehme, den Compiler habe ich bisher immer per make erstellt).
Eigentlich sollte make distclean das Problem verhindern, indem es alle Dateien, die zuvor mit make gemacht wurden, löscht. Leider kann ich es heute nicht testen, da ich gerade in der Schweiz bin und nur mobil Netzzugriff habe. Kann das aber morgen Abend mal probieren.
Eigentlich sollte make distclean das Problem verhindern, indem es alle Dateien, die zuvor mit make gemacht wurden, löscht. Leider kann ich es heute nicht testen, da ich gerade in der Schweiz bin und nur mobil Netzzugriff habe. Kann das aber morgen Abend mal probieren.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Scheinbar war das ein Bug in FPC. Revisionen vor 37722 zeigen den Kompilierfehler. Mit Revision 37723 und neuer tritt dieser hier nicht mehr auf.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
@wp_xyz: Kann es sein, daß du von FPC Trunk, kompiliert mit FPC Bootstrapcompiler 3.0.2, zu FPC Trunk mit Bootstrapcompiler 3.0.4 gewechselt warst?
Ich hatte eben FPC Trunk neu gebaut, was schon zuvor mit dem Bootstrapcompiler 3.0.4 gebaut war. Dies lief problemlos durch.
Dann hatte ich ein FPC Trunk neu gebaut, was zuvor mit dem Bootstrapcompiler 3.0.2 gebaut war. Da kam es zu dem o.g. Problem (gleiche Revision, wie zuvor). Ich hatte daraufhin das Verzeichnis Units gelöscht, in das die Kompilate geschrieben werden, dann lief es problemlos durch.
Ich hatte eben FPC Trunk neu gebaut, was schon zuvor mit dem Bootstrapcompiler 3.0.4 gebaut war. Dies lief problemlos durch.
Dann hatte ich ein FPC Trunk neu gebaut, was zuvor mit dem Bootstrapcompiler 3.0.2 gebaut war. Da kam es zu dem o.g. Problem (gleiche Revision, wie zuvor). Ich hatte daraufhin das Verzeichnis Units gelöscht, in das die Kompilate geschrieben werden, dann lief es problemlos durch.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Michl hat geschrieben:@wp_xyz: Kann es sein, daß du von FPC Trunk, kompiliert mit FPC Bootstrapcompiler 3.0.2, zu FPC Trunk mit Bootstrapcompiler 3.0.4 gewechselt warst?
Ja, in der Tat, das hab ich gemacht. Aber ich habe das Problem schon länger, bevor es 3.0.4 gab. Da ich fpc trunk nur sehr selten baue, weiß ich auch nicht mehr alle Schritte, die ich gemacht habe, es ist auf jeden Fall eine längere Geschichte. Ich müsste mir einmal die Zeit nehmen, das alles neu durchzugehen...
Im Idealfall würde ich mir zwei Scripte wünschen:
/1/ fpc-trunk komplett per svn co neu herunter laden und bauen (Das geht bei mir immer)
/2/ Einen nach Schritt /1/ gebauten, existierenden fpc neu übersetzen, nachdem vorher ein "svn up" aufgerufen oder eigene Code-Änderungen vorgenommen worden sind. -- Das geht bei mir meistens schief (entweder wegen dem CustApp-Problem, manchmal kann auch das Verzeichnis a52 nicht angelegt (?) werden, und manchmal wird ppc386.exe nicht mehr gefunden).
Der Unterschied von /2/ zu /1/ ist zum einen das fehlende svn co, was eine enorme Beschleunigug bedeutet, zum anderen aber, dass alle kompilierten Dateien schon vorhanden sind. Der sicherste Weg für /2/ ist, im fpc-Verzeichnis alles (nicht nur "units") zu löschen, svn up aufzurufen, ggfs. manuelle Änderungen vorzunehmen und dann das Kompilierungsscript aufzurufen.
Eigentlich ist das alles in fpcup / fpcupdeluxe gelöst. Aber was mich dabei aber stört, ist dass dort der Fall 2 unnötig lang dauert.
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Ich eigentlich auch, wollte aber ein Problem debuggen, daher bin ich darüber gestolpert.wp_xyz hat geschrieben:Da ich fpc trunk nur sehr selten baue
Eigentlich braucht man ja nur das Verzeichnis aufzuräumen, bevor neu kompliert wird. Ein "svn cleanup --remove-unversioned --remove-ignored" sollte eigentlich reichen:
Code: Alles auswählen
@echo on
set BootStrapCompilerPath=C:\32lazarus180\fpc\3.0.4\bin\i386-win32
set CurrentPath=%~dp0
cd %CurrentPath%
svn cleanup --remove-unversioned --remove-ignored fpc
md fpc
md fpc\bin
md fpc\bin\i386-win32
copy %BootStrapCompilerPath%\*.* %CurrentPath%\fpc\bin\i386-win32
svn co https://svn.freepascal.org/svn/fpc/trunk fpc
set FpcPath=%CurrentPath%\fpc
set PATH=%BootStrapCompilerPath%;%FpcPath%\bin\i386-win32;%PATH%
cd %FpcPath%
make distclean
make all install INSTALL_PREFIX=%FpcPath% PP=%BootStrapCompilerPath%\ppc386.exe
cd %FpcPath%\bin\i386-win32
fpcmkcfg -d basepath=%FpcPath% -o .\fpc.cfg
Zuletzt geändert von Michl am Di 19. Dez 2017, 23:15, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Jetzt quält mich gerade wieder der nicht gefundene ppc386...
Damit's konkreter wird: Ich habe einen Ordner c:\development mit Unterordnern fpc und fpc_bootstrap, sowie noch lazarus, mingw und config_laz, aber die tun jetzt nichts zur Sache. In diesen stecken bzw. sind geplant die jeweiligen Tools in verschiedenen Versionen. Die gesamte, für das folgende relevante Ordner-Struktur sieht so aus:
In fpc/bootstrap\3.0.4 wurde das fpc-bin Verzeichnis von fpc3.0.4 kopiert, so wie es bei Laz 1.8 mitgeliefert wird.
fpc/trunk ist zunächst leer (oder nicht-existent), aber folgendes Script lädt alles benötigte herunter und baut dort einen lauffähigen fpc:
Nun will ich aus irgendeinem Grund den fpc nochmals bauen (z.B. weil ich etwas in einer Unit geändert habe). Dazu lasse ich das Script erneut laufen. Aber dies schlägt fehl mit der Fehlermeldung
Also: ppc386.exe nicht gefunden, aber vorher gibt es noch die in der Meldung weiter oben bemängelte geschweifte Klammer. Wieso funktioniert das jetzt nicht mehr, wenn es im Schritt vorher durchgelaufen ist?
Entferne ich im Script die svn- und fpmkcfg-Zeilen erhalte ich denselben Fehler.
Damit's konkreter wird: Ich habe einen Ordner c:\development mit Unterordnern fpc und fpc_bootstrap, sowie noch lazarus, mingw und config_laz, aber die tun jetzt nichts zur Sache. In diesen stecken bzw. sind geplant die jeweiligen Tools in verschiedenen Versionen. Die gesamte, für das folgende relevante Ordner-Struktur sieht so aus:
c:\development
- fpc
-- trunk
-- fixes
- fpc_bootstrap
-- 3.0.4
In fpc/bootstrap\3.0.4 wurde das fpc-bin Verzeichnis von fpc3.0.4 kopiert, so wie es bei Laz 1.8 mitgeliefert wird.
fpc/trunk ist zunächst leer (oder nicht-existent), aber folgendes Script lädt alles benötigte herunter und baut dort einen lauffähigen fpc:
Code: Alles auswählen
set BINUTILS_DIR=c:\development\fpc_bootstrap\3.0.4
set BOOTSTRAP_COMPILER=%BINUTILS_DIR%\ppc386.exe
set DEST_DIR=c:\development\fpc\trunk
set SVN_CMD="C:\Program Files\TortoiseSVN\bin\svn.exe"
path %BINUTILS_DIR%
%SVN_CMD% co https://svn.freepascal.org/svn/fpc/trunk %DEST_DIR%
cd %DEST_DIR%
make clean all OPT='-gl' FPC=%BOOTSTRAP_COMPILER%
make install OPT='-gl' PREFIX=%DEST_DIR% FPC=%BOOTSTRAP_COMPILER%
fpcmkcfg -d basepath=%DEST_DIR% -o %DEST_DIR%\bin\i386-win32\fpc.cfg
Nun will ich aus irgendeinem Grund den fpc nochmals bauen (z.B. weil ich etwas in einer Unit geändert habe). Dazu lasse ich das Script erneut laufen. Aber dies schlägt fehl mit der Fehlermeldung
[...]
make -C utils distclean
make[1]: Entering directory `c:/development/fpc/trunk/utils'
{ ./fpmake.exe distclean --localunitdir=.. --globalunitdir=../packages --os=win32 --cpu=i386 -o -Ur -o -Xs -o -O2 -o -n -o '-gl' -o -di386 -o -dRELEASE --compiler=c:/development/fpc_bootstrap/3.0.4/ppc386.exe -bu; if [ $? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; /development/fpc_bootstrap/3.0.4/rm.exe -f ./fpmake.exe; make fpc_cleanall; }; fi; }
Der Befehl "{" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
make[1]: *** [distclean] Error 1
make[1]: Leaving directory `c:/development/fpc/trunk/utils'
make: *** [utils_distclean] Error 2
c:\development\fpc\trunk>make install OPT='-gl' PREFIX=c:\development\fpc\trunk FPC=c:\development\fpc_bootstrap\3.0.4\ppc386.exe
make installbase FPC=c:/development/fpc/trunk/compiler/ppc386.exe ZIPDESTDIR=c:/development/fpc/trunk FPCMAKE=c:/development/fpc/trunk/utils/fpcm/bin/i386-win32/fpcmake.exe
make[1]: Entering directory `c:/development/fpc/trunk'
Makefile:135: *** Compiler c:/development/fpc/trunk/compiler/ppc386.exe not found. Stop.
make[1]: Leaving directory `c:/development/fpc/trunk'
make: *** [installall] Error 2
Also: ppc386.exe nicht gefunden, aber vorher gibt es noch die in der Meldung weiter oben bemängelte geschweifte Klammer. Wieso funktioniert das jetzt nicht mehr, wenn es im Schritt vorher durchgelaufen ist?
Entferne ich im Script die svn- und fpmkcfg-Zeilen erhalte ich denselben Fehler.
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Um es komplett zu verstehen/testen müsste ich die Ordnerstruktur nachbauen. Ich hoffe du siehst es mir nach, wenn ich das nicht mache
Aus der Erinnerung heraus, hatte ich dazumal Probleme mit zwei ppc386.exe. Deshalb kopiere ich mir immer den kompletten Inhalt vom BootStrapCompiler in das Verzeichnis, wo die FPC-Binaries neu gebaut werden (make etc. sind dann auch gleich vor Ort). Keine Ahnung, ob das hilft, könnte aber "Makefile:135: *** Compiler c:/development/fpc/trunk/compiler/ppc386.exe not found. Stop." erklären. Die alten Executablen werden dann sowieso wieder überschrieben.
BTW. sehe gerade, das CleanUp muss ganz am Anfang gemacht werden, sonst wird die make.exe wieder entfernt (habe eben oben das Script entsprechend angepasst).
Aus der Erinnerung heraus, hatte ich dazumal Probleme mit zwei ppc386.exe. Deshalb kopiere ich mir immer den kompletten Inhalt vom BootStrapCompiler in das Verzeichnis, wo die FPC-Binaries neu gebaut werden (make etc. sind dann auch gleich vor Ort). Keine Ahnung, ob das hilft, könnte aber "Makefile:135: *** Compiler c:/development/fpc/trunk/compiler/ppc386.exe not found. Stop." erklären. Die alten Executablen werden dann sowieso wieder überschrieben.
BTW. sehe gerade, das CleanUp muss ganz am Anfang gemacht werden, sonst wird die make.exe wieder entfernt (habe eben oben das Script entsprechend angepasst).
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4
Hey Michl, du bist der King! Läuft mit dem "svn cleanup" am Anfang.