Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
luckylynx
Beiträge: 10
Registriert: So 25. Dez 2016, 13:07

Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von luckylynx »

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.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

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.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

luckylynx
Beiträge: 10
Registriert: So 25. Dez 2016, 13:07

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von luckylynx »

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 .

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

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

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; 

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

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von wp_xyz »

Einen lauffähigen fpc zu bauen ist immer noch eine Herausforderung- Auch mit deinem Script, Michl, erhalte ich diesen Fehler:

[...]
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?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

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.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

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; 

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

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

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

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

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von wp_xyz »

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.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

wp_xyz hat geschrieben:Da ich fpc trunk nur sehr selten baue
Ich eigentlich auch, wollte aber ein Problem debuggen, daher bin ich darüber gestolpert.

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; 

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

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von wp_xyz »

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

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von Michl »

Um es komplett zu verstehen/testen müsste ich die Ordnerstruktur nachbauen. Ich hoffe du siehst es mir nach, wenn ich das nicht mache :wink:

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; 

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

Re: Hilfe bei Bug in TFBAdmin Lazarus 1.8 RC4

Beitrag von wp_xyz »

Hey Michl, du bist der King! Läuft mit dem "svn cleanup" am Anfang.

Antworten