Patch zu "-macosx_version_min has been renamed" Fehler

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Hallo allerseits,

ich habe mich in den letzten Tagen mal mit der Erstellung von Patches für den Einsatz in FPCUpDeluxe beschäftigt und u.A. endlich mal einen Patch gegen die leidige Linker-Warnung gebaut, die einen seit XCode 15 unter macOS nervt:
-macosx_version_min has been renamed to -macos_version_min
Der Patch ist eigentlich ganz einfach, muss als Datei gespeichert und vor dem Bau der FPC/Laz-Umgebung unter "Setup +" bei "Add FPC Patch" eingetragen werden.

Code: Alles auswählen

--- fpcsrc/compiler/systems/t_darwin.pas	2024-03-08 13:21:33
+++ fpcsrc_patched/compiler/systems/t_darwin.pas	2024-03-08 13:25:40
@@ -354,7 +354,7 @@
       begin
         if MacOSXVersionMin.isvalid then
           begin
-            result:='-macosx_version_min '+MacOSXVersionMin.str;
+            result:='-macos_version_min '+MacOSXVersionMin.str;
           end
         else if iPhoneOSVersionMin.isvalid then
           begin
Für Lazarus habe ich auch noch einen, weiß aber nicht genau, ob das Tool create_lazarus_dmg.sh derzeit überhaupt relevant ist. Wahrscheinlich müsste man da wohl generell mal aufräumen, wenn ich das "-WM10.5" so sehe.

Code: Alles auswählen

--- lazarus/tools/install/macosx/create_lazarus_dmg.sh	2024-03-08 13:28:36
+++ lazarus_patched/tools/install/macosx/create_lazarus_dmg.sh	2024-03-08 13:27:54
@@ -118,7 +118,7 @@
 if [ "$ARCH" = "i386" ]; then
     LINKEROPTS="-WM10.5"
 else
-    LINKEROPTS="-k-macosx_version_min -k10.4 -XR/Developer/SDKs/MacOSX10.4u.sdk/"
+    LINKEROPTS="-k-macos_version_min"
 fi

 # copy sources
 
ACHTUNG: bitte Optionen wie "-WM"" aus den "Custom Options" entfernen, falls vorhanden, da die Übersetzung von Projekten mit einem "Error: ld: building fixups: pointer not aligned at ..." Fehler abbrechen.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Hallo,

vielen Dank für Deinen Beitrag. Kannst Du einen Hinweis geben wie man für den Bau der FPC/Laz-Umgebung vorgeht?
Auch ist mir nicht klar, wie man mit dem Tool create_lazarus_dmg.sh umgeht.

Leider bin ich blutiger Mac Einsteiger und würde mich über einen Hilfe dazu sehr freuen.

Ich arbeite mit einem MacBook M1 und verzweifle gerade bei der Installation der Lazarus App bzw des Free Pascal Compiler.

Vielen Dank

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Kennst Du fpcupdeluxe? Damit geht es fast kinderleicht. Mit einem M1 Macbook bitte folgendermaßen vorgehen:
  • Im Download-Ordner auspacken und dann in ein eigenes Verzeichnis unter /Users/DeinName/ legen, bspw. /Users/DeinName/fpcupdeluxe_builder/fpcupdeluxe-2.4.0d.app.
    DAS IST WICHTIG
  • fpcupdeluxe aus dem neuen Verzeichnis starten
    DAS IST NOCH WICHTIGER
  • Mit "Set install path" das Basisverzeichnis deiner Umgebung setzen, z.B. /Users/DeinName/fpcupdeluxe
  • Patches unter Setup+ konfigurieren, wie im ersten Post beschrieben
  • Gewünschte Umgebung auswählen, bspw. "Fixes" und bauen
  • Warten, bis Lazarus-Icon auf dem Desktop erscheint
  • Anklicken und freuen.
... falls es Probleme gibt, sonst einfach noch mal melden.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Hallo Stevie,

vielen Dank für diese rasante Antwort. Nein, fpcupdeluxe war mir noch kein Begriff.
Daher habe ich das erste Posting auch nicht richtig verstanden.

Also habe ich mich eben gleich mal ran gemacht, das nachzuvollziehen was du dankenswerterweise erklärt hast :)
Leider bin ich aber am Punkt "Patches unter Setup+ konfigurieren, wie im ersten Post beschrieben" deines letzten Postings gescheitert, da mich die Anwendung weder das Verzeichnis meines Patch-Ordners (fpcsrc_patched) noch eines Unterordners (fpcsrc_patched/compiler/systems) oder die geänderte Datei (fpcsrc_patched/compiler/systems/t_darwin.pas) auswählen ließ. Ich konnte zwar die Ordner auswählen. Diese wurden dann aber nur wieder im Auswahl-Dialog geladen anstatt ausgewählt zu werden. Im Ordner fpcsrc_patched/compiler/systems/ wurden mir alle Dateien angezeigt aber nicht zur Auswahl bereitgestellt.

Aber: Wenn ich es Recht verstehe, kann man damit auch die grundlegende Installation durchführen, selbst wenn man keine Anpassungen durchführen möchte.

Also habe ich mir den Spass gegönnt:
Ich habe kurzer Hand den Mac von der bisherigen Installation befreit, um dann mit dem Wundertool fpcupdeluxe eine Installation des Trunk Zweigs durchzuführen.
Wow!
Das funktionierte auf Anhieb und es gibt auch keine Meldung mehr, dass eine MACOSX_VERSION_MIN nun kein X mehr im Namen trägt.

Dafür erhalte ich 278 Warnungen, dass *.o Dateien für ein neueres macOS erzeugt wurden, als die gelinkte Anwendung
Beispiel:
Warning: ld: warning: object file (/Users/***/fpcupdeluxe/lazarus/lcl/units/aarch64-darwin/buttonpanel.o) was built for newer 'macOS' version (11.0) than being linked (10.9)
Auch das verwenden von visuellen Controls geht nun ohne Fehlermeldung oder gar Lazarus-Absturz.

Also warum weiter rumbasteln so kann man damit arbeiten.

Aber neugierig ist man ja doch - daher habe ich mir die t_darwin.pas mal angeschaut. Da steht:

Code: Alles auswählen

    ...
    function tlinkerdarwin.GetLinkVersion: TCmdStr;
      begin
        if MacOSXVersionMin.isvalid then
          begin
            result:='-macosx_version_min '+MacOSXVersionMin.str;
          end
        ...
Und auch die create_lazarus_dmg.sh sieht so aus:

Code: Alles auswählen

...
if [ "$ARCH" = "i386" ]; then
    LINKEROPTS="-WM10.5"
else
    LINKEROPTS="-k-macosx_version_min -k10.4 -XR/Developer/SDKs/MacOSX10.4u.sdk/"
fi
...
Wie auch immer - die letzten beiden Punkte Deiner Liste haben 100% für mich funktioniert:
  • Warten, bis Lazarus-Icon auf dem Desktop erscheint
    Anklicken und freuen.
Daher vielen lieben Dank für Deine Unterstützung.

Sollte nun noch jemand wissen warum sich das Patch nicht auswählen gelassen hat ist das ein Bonus für das nächste Mal, falls man doch noch etwas anpassen muss.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Ta Ta

Kaum habe ich eine Komponente hinzugefügt , was dazu führte, dass Lazarus neu kompiliert werden musste - ist die bösen Meldungen wieder da
...
Error: -macosx_version_min has been renamed to -macos_version_min
Warning: ld: warning: ignoring duplicate libraries: '-lc'
...

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Prima, dass es zumindest im Prinzip funktioniert hat. Den Rest bekommen wir auch noch hin. :-)

Zunächst einmal ist die Fehlermeldung zwar lästig, hat aber keinen Einfluss auf das Kompilat, das nämlich trotzdem funktioniert. Natürlich direkt aus der IDE heraus, wenn man über 'Project -> Project Options' ein 'NSApplication Bundle' erstellt hat und das Binary an die richtige Stelle darin verfrachtet hat, auch komplett eigenständig. So gesehen ist die Bezeichnung als 'Error' also etwas irreführend.

Damit Du den Patch auswählen kannst, musst Du im Datei-Dialog von "Add FPC patch" auf den "Optionen einblenden" Knopf drücken und dann das File Format von "diff" auf "patch" (oder besser gleich "all") umstellen. Dann sollte auch das funktionieren. Ich würde dabei empfehlen, die beiden Patches gleich in dasselbe Verzeichnis zu legen, wie fpcupdeluxe selbst, so dass die automatisch immer erreichbar sind. Einfach mal probieren!

Ansonsten gilt weiterhin: bei Fragen einfach fragen.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Cool, werde ich heute ausprobieren. Danke Dir!

Genügt es die beiden geänderten Dateien als Patch anzugeben oder ist es notwendig so wie du es gemacht hast, den ganzen Verzeichnisbaum als Patch bereitzustellen?

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

... du solltest die beiden Patches "mit Haut und Haaren" in jeweils eine Datei mit der Endung ".patch" übertragen und in das Verzeichnis legen, in dem Dein fpcupdeluxe liegt, zB. /Users/DeinName/fpcupdeluxe_builder/t_darwin_pas.patch und /Users/DeinName/create_lazarus_dmg_sh.patch . Dann wählst Du sie über "Add FPC patch" aus und baust Deine IDE. Im Ausgabefenster kannst Du dann kontrollieren, ob die Patches eingebaut wurden, was eigentlich der Fall sein sollte.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Hi,

egal wie, ob als kompletter Neu-Build oder als Update-Lauf, ich bekomme es nicht hin. Beide Patches werden mit "failed" protokolliert.
...
fpcupdeluxe: WARNING: FPC Native Installer (GetModule: FPC): Going to patch FPC sources !!
fpcupdeluxe: info: FPC Native Installer (GetModule: FPC): Trying to patch FPC with /Users/XXX/fpcupdeluxe_builder/patchfpc/t_darwin.patch.
fpcupdeluxe: Executing: /usr/bin/patch -t -p1 -N --no-backup-if-mismatch -i /Users/XXX/Lazarus/app/tmp/fpcup00000/t_darwin.patch (working dir: /Users/XXX/Lazarus/app/fpcsrc)
fpcupdeluxe: Executing: /usr/bin/patch -t -p0 -N --no-backup-if-mismatch -i /Users/XXX/Lazarus/app/tmp/fpcup00000/t_darwin.patch (working dir: /Users/XXX/Lazarus/app/fpcsrc)
fpcupdeluxe: ERROR: FPC Native Installer (GetModule: FPC): FPC patching with /Users/XXX/fpcupdeluxe_builder/patchfpc/t_darwin.patch failed.
fpcupdeluxe: ERROR: FPC Native Installer (GetModule: FPC): FPC patch output: .
...
...
fpcupdeluxe: WARNING: Lazarus Native Installer (GetModule: Lazarus): Going to patch Lazarus sources !!
fpcupdeluxe: info: Lazarus Native Installer (GetModule: Lazarus): Trying to patch Lazarus with /Users/XXX/fpcupdeluxe_builder/patchlazarus/create_lazarus_dmg.patch.
fpcupdeluxe: Executing: /usr/bin/patch -t -p1 -N --no-backup-if-mismatch -i /Users/XXX/Lazarus/app/tmp/fpcup00000/create_lazarus_dmg.patch (working dir: /Users/XXX/Lazarus/app/lazarus)
fpcupdeluxe: Executing: /usr/bin/patch -t -p0 -N --no-backup-if-mismatch -i /Users/XXX/Lazarus/app/tmp/fpcup00000/create_lazarus_dmg.patch (working dir: /Users/XXX/Lazarus/app/lazarus)
fpcupdeluxe: ERROR: Lazarus Native Installer (GetModule: Lazarus): Lazarus patching with /Users/XXX/fpcupdeluxe_builder/patchlazarus/create_lazarus_dmg.patch failed.
fpcupdeluxe: ERROR: Lazarus Native Installer (GetModule: Lazarus): Lazarus patch output: .
...

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Evtl. musst Du die Patches noch mal neu erstellen, wenn die sich zwischenzeitlich im Git geändert haben. Ich habe die eben gerade noch mal neu erstellt und gecheckt. Die hier funktionieren:

Code: Alles auswählen

--- fpcsrc/compiler/systems/t_darwin.pas	2024-04-29 09:59:29
+++ fpcsrc/compiler/systems/t_darwin.pas_patched	2024-04-29 10:29:33
@@ -360,7 +360,7 @@
       end;
       if MacOSXVersionMin<>'' then
         begin
-          LinkRes.Add('-macosx_version_min');
+          LinkRes.Add('-macos_version_min');
           LinkRes.Add(MacOSXVersionMin);
         end
       else if iPhoneOSVersionMin<>'' then
... bzw. ...

Code: Alles auswählen

--- lazarus/tools/install/macosx/create_lazarus_dmg.sh	2024-03-08 13:28:36
+++ lazarus_patched/tools/install/macosx/create_lazarus_dmg.sh	2024-03-08 13:27:54
@@ -118,7 +118,7 @@
 if [ "$ARCH" = "i386" ]; then
     LINKEROPTS="-WM10.5"
 else
-    LINKEROPTS="-k-macosx_version_min -k10.4 -XR/Developer/SDKs/MacOSX10.4u.sdk/"
+    LINKEROPTS="-k-macos_version_min"
 fi

 # copy sources

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Also ggf.
1. Update ohne Patch-Files
2. Patch-Files erstellen
3. Update mit Patch-Files

Werde ich testen

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Also ggf.
1. Update ohne Patch-Files
2. Patch-Files erstellen
3. Update mit Patch-Files
Geeeenau. :-)

Aber vielleicht versuchst Du es einfach noch mal mit diesen Patches. Die habe ich vorhin auf 'Fixes' gezogen. Damit sollten sie eigentlich auch funktionieren.

ExDelphi
Beiträge: 11
Registriert: Fr 26. Apr 2024, 18:49

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von ExDelphi »

Jetzt bin ich stutzig:

Du sagst ich soll es mit diesen Patches (deinen Patches) versuchen

und oben schreibst du mit allen drum und dran.

Was ist aus Deiner Sicht das jeweilige Patch?
a) exakt was du hier postest - also der Inhalt der Code-Boxen (nur die Änderungen der Dateien) in deinen Postings, inkl der Kommentare und Zeilen bzw. Vergleich-Hinweise
b) die komplette Dateien, allerdings mit den genannten Änderungen

Ich war bisher von der Variante b) ausgegangen.

Das Ganze jeweils mit dem neuen Dateinamen der sich aus dem original Dateinamen ableitet in dem man die original Endung mit einem Unterstrich an den Dateinamen anhängt und die Endung .patch verwendet.

aus t_darwin.pas
wird t_darwin_pas.patch
und
aus create_lazarus_dmg.sh
wird create_lazarus_dmg_sh.patch

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Was ist aus Deiner Sicht das jeweilige Patch?
Der Patch ist das in der jeweiligen Code-Box, sprich, das, was Du kopieren kannst, wenn Du "CODE: ALLES AUSWÄHLEN" anklickst. Das klebst Du dann in eine Datei mit einem beliebigen Namen mit der Endung ".patch" und registrierst es unter "Setup+" in der passenden Sektion ("Add fpc Patch" für den FPC Patch und "Add Laz. Patch" für den Lazarus Patch).

Stelle dir den Patch mal wie ein Skript für einen Editor vor. Der Patch-Mechanismus kopiert die Originaldatei in ein Temp-Verzeichnis, editiert die Datei mittels der Befehle im Patch und kopiert sie dann im Originalverzeichnis über die ursprüngliche Datei. So werden dann die beiden Dateien im Source-Tree durch die ersetzt, in denen die Korrektur durchgeführt ist.

Wenn alles geklappt hat, sollten die beiden Dateien nach dem Durchlauf von fpcupdeluxe im Sourcetree korrigiert vorliegen. Ist aber eigentlich egal, weil der Patch ja beim nächsten Durchlauf von fpcupdeluxe von vorne beginnen würde: Source auschecken, Patches drüberbügeln, übersetzen.

Jetzt klarer? :-)

Stevie
Beiträge: 162
Registriert: Di 27. Feb 2024, 22:40

Re: Patch zu "-macosx_version_min has been renamed" Fehler

Beitrag von Stevie »

Und noch ein Nachtrag: vergiss das, was im Patch hinter dem "+++" steht. Das ist nur der Name, unter dem ich die korrigierte Version gespeichert hatte und von der ich den Patch abgezogen habe. Relevant ist aber nur das hinter "---", das ist nämlich die Datei, auf der der Patch angewendet wird.

Antworten