Lazarus 2.0.6 Installationsproblem

Für Installationen unter Windows
Michl
Beiträge: 2340
Registriert: Di 19. Jun 2012, 12:54

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von Michl »

MmVisual hat geschrieben:Im nächsten Schritt würde ich gerne mal das linken von Lazarus selbst manuell über Kommandozeile und dem make ausführen. In welchem Verzeichnis muss ich dazu sein und welchen Text muss ich dazu in der Kommanozeile eingeben, damit das make das Linken ausführt?
Habe eben mal eine create.bat erstellt (läuft bei mir durch). Diese müsstest du einfach in C:\lazarus ausführen:

Code: Alles auswählen

set FpcPath=C:\lazarus\fpc\3.0.4
cd %FpcPath%\bin\x86_64-win64
fpcmkcfg -d basepath=%FpcPath% -o .\fpc.cfg
 
set PATH=%FpcPath%\bin\x86_64-win64;%PATH%
cd C:\lazarus
make clean all OPT="-glw2"
 
Dateianhänge
create.bat
(199 Bytes) 52-mal heruntergeladen

Code: Alles auswählen

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

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von wp_xyz »

MmVisual hat geschrieben:Fatal: Unable to open file C:UsersmmAppDataLocallazarusidemake.cfg -dx86_64

Das make-Tool habe ich ja noch nie verstanden. Aber könnte es sein, dass hier ein Backslash signalisiert, das folgende Zeichen direkt zu übernehmen. Damit müssten die "echten" Backslashes doppelt geschrieben werden. (Würde natürlich nicht erklären, dass das bei den meister Usern nicht nötig ist...)

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von MmVisual »

Vielen Dank Michl, für das "Create.bat".

Das habe ich nun ausgeführt:

Code: Alles auswählen

C:\lazarus>create > create.txt
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
makefile:2729: warning: overriding commands for target `.'
makefile:2727: warning: ignoring old commands for target `.'
C:\lazarus>


Hier das Ergebnis in der "Create.txt":
create.zip
(69.15 KiB) 47-mal heruntergeladen


Mit der "Create.bat" wird zwar das Lazarus neu erstellt, jedoch anders und funktioniert nicht mehr richtig:
Bild25.png
Bild25.png (5.58 KiB) 1923 mal betrachtet

Auch erscheint hier nicht die Fehlermeldung beim letzten Linken. Also Lazarus baut sich selbst noch irgendwie anders.

In der Create.bat wird die "idemake.cfg" nicht verwendet, darin liegt jedoch das Problem dass "make" diese nicht öffnen kann.
Auch habe ich in der Create.txt keine Zeile mit:
OPT="@C:\Users\mm\AppData\Local\lazarus\idemake.cfg"
gefunden.

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von Michl »

Ja da hast du Recht, so wird die kleine IDE nur sauber neu gebaut, ohne User Einstellungen.

Ich habe mal deine und meine Create.txt verglichen, sie sind vom Inhalt identisch, lediglich dein System PATH hat mehr Einträge. Das passt soweit. Also liegt es nicht am MAKE.

Rein theoretisch müsste man mit "make clean lazbuild useride" Lazarus mit der vorherigen Einstellung neu bauen können (zumindest steht es so in der Makefile.fpc). Dies bricht aber bei mir mit "No rule rule to make target 'clean ide'." ab. Kein Ahnung.

Code: Alles auswählen

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

Benutzeravatar
six1
Beiträge: 219
Registriert: Do 1. Jul 2010, 19:01

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von six1 »

...das bleibt mir auch ein ewiges Rätsel, wie fpcupdeluxe die gesamte Installation incl. mehrerer Crosscompiler fehlerfrei aufbaut...
wenn ich auf der Shell eine Zeile starte, gehts meist schief :-)
Gruß, Michael

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von wp_xyz »

Mit dieser Batch-Datei baue ich mir gelegentlich Laz-Trunk. Nochmals aktuell getestet - funktioniert.

Code: Alles auswählen

set myroot=c:\lazarus-trunk_fpc304
set myFPC=%myroot%\fpc\3.0.4
set PATH=%myFPC%\bin\i386-win32
make clean bigide OPT="-glw2 -Xg"

Um die Backslashes in der Konfigurationsdatei zu testen, habe ich die beiden Optionen -glw2 (Dwarf2-Debug-Informtionen) und -Xg (externe Debuggersymbole) in eine Datei "params.cfg" geschrieben (jede in eine Zeile) und in einem Unterordner "test-make" der Laz-Installation gespeichert. Die Batch-Datei wird damit zu

Code: Alles auswählen

set myroot=c:\lazarus-trunk_fpc304
set myFPC=%myroot%\fpc\3.0.4
set PATH=%myFPC%\bin\i386-win32
make clean bigide OPT=@"c:\lazarus-trunk_fpc304\make-test\params.cfg"

Aber auch diese läuft problemlos durch, d.h. die Datei wird trotz der einfachen Backslashes gefunden, egal ob der Pfad in Anführungsstrichen steht oder nicht (diese sind wahrscheinlich nötig, falls der Pfad Leerzeichen enthält).

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von Warf »

MmVisual hat geschrieben:Das Ergebnis warum es bei Lazarus 2.0.4 nicht klappen mag:

Die Zeilen sind unterschiedlich:
V1.8.4:

Code: Alles auswählen

OPT=@C:\Users\mm\AppData\Local\lazarus\idemake.cfg

V2.0.4:

Code: Alles auswählen

OPT="@C:\Users\mm\AppData\Local\lazarus\idemake.cfg"


Also die " mag das Make Tool nicht.


Nö, das hat mit make recht wenig zu tun. Make ist sehr einfach gestrickt, das gibt die variablen 1 zu 1 an die Shell für den befehl weiter

Ich hab hier mal ein kleines makefile erstellt

Code: Alles auswählen

A="a\b"
B='a\b'
C=a\b
all:
        echo "$A" ;\
        echo '$A' ;\
        echo $A ;\
        echo "$B" ;\
        echo '$B' ;\
        echo $B ;\
        echo "$C" ;\
        echo '$C' ;\
        echo $C
 


Ergebnis:

Code: Alles auswählen

echo ""a\b"" ;\
echo '"a\b"' ;\
echo "a\b" ;\
echo "'a\b'" ;\
echo ''a\b'' ;\
echo 'a\b' ;\
echo "a\b" ;\
echo 'a\b' ;\
echo a\b ;
ab
"a\b"
a\b
'a\b'
ab
a\b
a\b
a\b
ab
 

Wie man einfach sehen kann werden die Anführungszeichen einfach an das echo (bzw die shell die das echo ausführt) übergeben. Die ergebnisse sind exakt die die ich erwarten würde wenn ich die echos so in meine bash eintippen würde.

Das problem ist das folgende. Wenn in dem makefile dann das so steht

Code: Alles auswählen

xxx ... "$(OPT)" ...

dann wird das zu:

Code: Alles auswählen

xxx ... ""PFAD"" ...

Bash macht automatische string concatination, das heißt das was da steht ist LeererString + PFAD + LeererString und das ist exakt PFAD. \ wird von der Shell aber gesondert behandelt als escape character. z.B. $ bezeichnet in bash eine variable. echo a$b würde also a gefolgt vom Inhalt der variable b ausgeben. Wenn man jetzt aber das $ zeichen haben will muss man das escapen also echo a\$b. Soweit so einfach. Zu den anführungszeichen: Die Bash kennt zwei verschiedene arten von String representation, Single Quotes ' und Double quotes ". Was in Single quotes steht wird ohne zu parsen (Siehe hier: Link). d.H. echo 'a$b' ergibt a$b ohne das man $ escapen muss, da die Bash den string printed wie er da steht. Double quotes sagen der bash das nur noch die "wichtigsten" Special character geparsed werden sollen, das sind $, \ und *. Im gegensatz zu ohne quotes haben doublequotes was Backslashs angeht aber eine einschränkung: "Backslashes preceding characters without a special meaning are left unmodified", bedeutet backslashs werden nur dann als special chars geparsed wenn sie von einem Character benutzt werden (siehe hier: Link).
Das ist also alles keine magie sondern expected behavior, und vor allem hat es nichts mit make zutun. Make ist eine super einfache Sprache die eigentlich nix kann außer shell commands in einer Abbhängigkeitsbasierten Reihenfolge auszuführen, alles weitere kommt durch die Shell. Mehr dazu findet man in der bash doc: Link (Dokumentation lesen hilft, ich wusste das meiste auch nicht bevor ich grad mal in die Doc reingeschaut hab)

Zu dem Bug, meine empfohlene Lösung: entweder die anführungszeichen bei der definition von OPT wegnehmen, oder bei der benutzung. Sie an beiden stellen zu haben beudetet lediglich das sie gar nix bringen!. Außerdem würde ich empfehlen die Doppenlten Anführungszeichen durch einfache auszutauschen, damit garantiert ist das der String 1 zu 1 übergeben wird!

PS: das lustige bei make für windows ist, da Windows keine unix shell mitliefert muss die irgendwie in der make.exe drin sein, wie genau, und welche shell, keine ahnung, da es aber gnu make ist würde ich schätzen das es die bash ist

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von MmVisual »

Ich stecke gerade an einer Sackgasse fest, ich habe das mal probiert:

Code: Alles auswählen

set myroot=c:\lazarus
set myFPC=%myroot%\fpc\3.0-d
set PATH=%myFPC%\bin\x86_64-win64
make clean bigide OPT="@C:\Users\mm\AppData\Local\lazarus\idemake.cfg"


Und auch das:

Code: Alles auswählen

CD \lazarus
SET LCL_PLATFORM=win32
SET LANG=en_US
SET PP=C:\lazarus\fpc\3.0.4\bin\x86_64-win64\fpc.exe
SET OPT="@C:\Users\mm\AppData\Local\lazarus\idemake.cfg" -dx86_64
.\fpc\3.0.4\bin\x86_64-win64\make.exe -W -dx86_64


Der Build schlägt jedes mal fehlt, weil

Code: Alles auswählen

(9015) Linking ..\lazbuild.exe
C:\lazarus\ide\lazbuild.lpr(1869,1) Fatal: (10026) There were 1 errors compiling
 module, stopping
Fatal: (1018) Compilation aborted
Error: C:\lazarus\fpc\3.0.4\bin\x86_64-win64\ppcx64.exe returned an error exitco
de
make.exe[2]: *** [lazbuild.exe] Error 1
make.exe[2]: Leaving directory `C:/lazarus/ide'
make.exe[1]: *** [lazbuilder] Error 2
make.exe[1]: Leaving directory `C:/lazarus/ide'
.\fpc\3.0.4\bin\x86_64-win64\make.exe: *** [lazbuild] Error 2


Wenn ich wüsste was ich an meinen Befehlen eingeben muss, damit ich es in der Konsole nachvollziehen kann, dann käme ich eventuell weiter.

Benutzeravatar
six1
Beiträge: 219
Registriert: Do 1. Jul 2010, 19:01

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von six1 »

probiere mal dem fpc.exe ein "-k--verbose" mitzugeben... dadurch bekommst du viel mehr Ausgaben zum eigentlichen Problem...
Gruß, Michael

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von MmVisual »

Ich habe dank eurer Hilfe und den vielen Infos es nun geschafft den Lazarus Code so zu ändern dass er kompiliert:

- Lazarus neu installieren
- Die Datei "buildlazdialog.pas" ändern der Procedure:

Code: Alles auswählen

procedure TLazarusBuilder.SpecialIdeConfig;
var
  MakeIDECfgFilename: string;
begin
  MakeIDECfgFilename:=GetMakeIDEConfigFilename;
  //DebugLn(['SpecialIdeConfig MAKE MakeIDECfgFilename=',MakeIDECfgFilename,' ',FileExistsUTF8(MakeIDECfgFilename)]);
  if (FileExistsUTF8(MakeIDECfgFilename)) then begin
    // If a file name contains spaces, a file name whould need to be quoted.
    // Using a single quote is not possible, it is used already in the
    // makefile to group all Profile in OPT='bla bla'.
    // using " implicates that make uses a shell to execute the command of
    // that line. But using shells (i.e. command.com, cmd.exe, etc) is so
    // fragile (see bug 11362), that is better to avoid this.
    // Therefore we use a short 8.3 file and path name, so we don't need to
    // use quotes at all.
    // On platforms other than windows, ExtractShortPathName is implemented
    // too and simply returns the passed file name, so there is no need
    // for $IFDEF.
    if pos(' ',MakeIDECfgFilename)>0 then
      MakeIDECfgFilename:=ExtractShortPathNameUTF8(MakeIDECfgFilename);
    AppendExtraOption('@'+MakeIDECfgFilename,  False);
  end;
end;


Beschreibung Bugfix und warum das ein Bug ist:

Der Bug liegt nur in der Zeite:

Code: Alles auswählen

AppendExtraOption('@'+MakeIDECfgFilename);

Die ich so geändert habe:

Code: Alles auswählen

AppendExtraOption('@'+MakeIDECfgFilename,  False);

buildlazdialog.pas
(52.14 KiB) 48-mal heruntergeladen


Denn die Zeile zuvor erkennt bereits Leerzeichen im Dateiname und holt diese schon mit der Funktion ExtractShortPathNameUTF8() raus, daher braucht der Filename auch nicht mehr gequoted werden.
Das steht ja auch so im Kommentar von euch so drin:

Code: Alles auswählen

    // Therefore we use a short 8.3 file and path name, so we don't need to
    // use quotes at all.

Daher ist das wohl ein Bug der im Zuge des Umbaus auf Lazarus 2.0.x herein gekommen ist.

Nächster Schritt:
- C:\Lazarus\compile.bat ausführen (die gleiche Create.bat wie von Michl erstellt)
-> Danach hat man ein Lazarus, das zwar noch nicht richtig ist, jedoch zumindest sich selbt neu erstellen kann. (EXE hat 207MB)
- Start vom neuen Lazarus
- Werkzeuge > Lazarus kompilieren einrichten > Alle aufräumen und Neu kompilieren
-> Danach gibt es eine neue Lazarus EXE, größe ca. 260MB, was bei mir "normal" ist.

Könnt ihr bitte diese eine Codezeile in den Lazarus Sourcen ändern?
Dankeschön, Grüße Markus
Zuletzt geändert von MmVisual am Sa 2. Nov 2019, 09:25, insgesamt 3-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4292
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 2.0.4 Installationsproblem

Beitrag von af0815 »

six1 hat geschrieben:...das bleibt mir auch ein ewiges Rätsel, wie fpcupdeluxe die gesamte Installation incl. mehrerer Crosscompiler fehlerfrei aufbaut...
wenn ich auf der Shell eine Zeile starte, gehts meist schief :-)

Wenn du im höchsten verbose Modus bei fpcupdeluxe arbeitest, so kannst du JEDES Kommando genau mitlesen und auch händisch genauso ausführen. fpcupdeluxe ist kein Rätsel sondern hat nur die händischen Kommandos automatisiert, allerdings mit einem extrem hohen Hintergrundwissen. Für die Grundlagen gibt es die BuildFAQ, die zwar IMHO langsam veraltet ist, aber trotzdem sehr tiefen Einblick in die Besonderheiten des fpc Systems.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von wp_xyz »

MmVisual hat geschrieben:Beschreibung Bugfix und warum das ein Bug ist[...]

Alles schön und gut, aber warum kann ich den "Bug" nicht nachvollziehen? Wieso bist du (und der User im englischen Forum) der einzige, bei dem die Backslashes im Pfad fehlen? Die IDE nicht neu bauen zu können, ist ein ganz fundamentaler Fehler, der schon lange aufgefallen wäre, wenn das ein generelles Problem dieser Version wäre. Am besten schreibst du einen Bug-Report, so dass sich der Entwickler, der das geschrieben hat, anschauen kann.

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von wp_xyz »

MmVisual hat geschrieben:

Code: Alles auswählen

    // If a file name contains spaces, a file name whould need to be quoted.
...
    // On platforms other than windows, ExtractShortPathName is implemented
    // too and simply returns the passed file name, so there is no need
    // for $IFDEF.
end;

Das heißt aber doch, dass wenn ein Dateiname auf einer Nicht-Windows-Platform Leerzeichen enthält, diese beibehalten werden. Mit deiner Lösung ("AppendExtraOption(..., false)") werden diese Dateinamen dann auch nicht "gequotet", was nicht gutgehen wird...

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

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von Michl »

Gestern Abend hatte ich noch eine lange Zeit versucht das Problem nachzustellen. Leider ist es mir nicht gelungen. Ich glaube immer noch, daß letztlich ein falsches MAKE aufgerufen wird. Speziell in deinem System PATH macht mich ...D:\WinARM\make-tools\bin... stutzig, da dort auch ein MAKE vorhanden sein sollte. Warum das nicht gefunden wird, weiß ich nicht. Vielleicht wird irgendwo beim kompilieren der Pfad so erweitert, daß ein sonstig vorhandenes MAKE (evtl. im USER-Verzeichnis) gefunden wird.

Kannst du dazu nochmal einen Test machen und in den Windows System PATH erweitern, daß das MAKE von FPC tatsächlich immer zuerst gefunden und genommen wird?

Ansonsten müsste man die Änderung nochmal mit einem User mit Leerzeichen testen, ob das weiterhin funktioniert, ebenso, wie wp schrieb, ob es unter Linux weiterhin geht (am besten im Bugtracker).

Code: Alles auswählen

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

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Lazarus 2.0.4 Installationsproblem

Beitrag von MmVisual »

Als erstes mal müsste man wissen welches Programm diesen OPT Parameter benutzt, sowie heraus finden welche Programme da noch alle dazwischen hängen, wie z.B. das make. Bei meinem System wird jedenfalls kein anderes make aufgerufen, aber welches make wird bei euren Systemen aufgerufen? Ist da vielleicht eine andere GNU Umgebung aktiv?
Ich habe gerade etwas schwer zu schreiben, hab nur Handy, heute Abend werde ich wieder Zeit haben.
Das fett geschriebene sollte auch nicht provokativ sein, sondern in einem Thread mit vielen Infos ist es enorm schwer die eine Antwort zu finden mit dem richtigen Hinweis, das wollte ich somit hervorheben.

Antworten