(gelöst) freepascal, geany

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

(gelöst) freepascal, geany

Beitrag von guennid » 04.04.2015 11:18:10

Ich versuche nach langer Zeit mal wieder meine Freepascal-DOS-Progrämmchen für Linux umzuschreiben, bzw. neue zu entwickeln. Shell-Syntax tu' ich mir nur an, wenn's mit Pascal nicht geht. Objektorientierung kann ich nicht, weswegen ich Lazarus nicht benutze und u.a. deswegen wiederum auch das deutsche Lazarus-Forum eher schlecht nutzen kann.
Als Editor habe ich mir geany für Freepascal soweit eingerichtet, dass der Quelltext ziemlich genau so aussieht, wie im Editor von Turbo Pascal. (Die freepascal eigene IDE lass' ich deswegen und auch wegen anderer, ziemlich wegführender Probleme erst mal aus). Außer (fast) jedem gewünschten Sytax Higlightning bietet mir Geany auch den Vorteil, dass ich daraus direkt kompilieren kann.

Jetzt das Problemchen: Gefunden für die Kompilation werden zwar die freepascal-eigenen, aber nicht meine eigenen Units. Ich vermute, dass außer den fp-units Geany nur solche einbindet, die im gleichen Verzeichnis liegen wie die zu komilierende Datei (habe ich aber nicht geprüft). Das würde mir gar nicht gefallen. Hat jemand eine Idee, wie ich das abstellen kann, sprich wie ich meine Units einbinde, ohne sie ins Programm-Verzeichnis zu transferieren?

Falls ich sowas schon mal gefragt habe: Ich bin vergesslich. :wink:

Grüße, Günther

[edit] In ~/.config/geany/filedefs/filetypes.pascal finde ich ganz unten:

Code: Alles auswählen

[build_settings]
[...]
compiler=fpc "%f"
Ich vermute mal, das bedeutet "Kompiliere f mit fpc", weil: fpc finde ich als Link unter /usr/bin, der auf /etc/alternatives/fpc zeigt, was wiederum ein Link auf die ausführbare Datei /usr/bin/fpc2.6.0 ist (ob sich mir der Sinn dieses Hin-und-Her-Gelinkes jemals erschließen wird :roll: ). So, aus dem (schon etwas älteren) Freepascal-Handbuch werde ich, das nächste betreffend, auch nicht recht schlau, aber ich vermute mal weiter, dass fpc sich an einer config namens fpc.cfg orientiert, die in /etc liegen soll. /etc/fpc.cfg ist ein Link auf /etc/alternatives/fpc.cfg, ein weitere Link, der auf /etc/fpc-2.6.0.cfg zeigt. :roll: Da hinein müsste ich den Pfad meine Unit-, Include-, usw.-, Dateien schreiben, damit "f" aus Geany heraus richtig kompiliert wird - Könnte das funktionieren?
Zuletzt geändert von guennid am 04.04.2015 23:21:11, insgesamt 1-mal geändert.

tobo
Beiträge: 2340
Registriert: 10.12.2008 10:51:41

Re: freepascal, geany

Beitrag von tobo » 04.04.2015 16:43:08

Von geany habe ich keine Ahnung. Deine Vermutungen - was fpc betrifft - sind aber weitestgehend alle richtig. Entweder fügst Du dein Verzeichnis in der Datei /etc/fpc.cfg (bzw. lokal ~/fpc.cfg) hinzu (nach dem Abschnitt: "# searchpath for units and other system dependent things") oder Du gibst es geany mit (compiler=fpc -Fu"/MEIN/PFAD" -Fu"/MEIN/PFAD/*" "%f").
http://www.freepascal.org/docs-html/user/usersu7.html

Falls fpc.cfg unverändert ist, dann ist als Default-Mode beim Kompilieren -Mfpc eingestellt. Ich bin mir nicht sicher, ob Du das so haben willst!?
http://www.freepascal.org/docs-html/use ... 460005.1.5

guennid

Re: freepascal, geany

Beitrag von guennid » 04.04.2015 19:32:48

Danke für die Hinweise!

So, ich habe das jetzt so eingerichtet. Pfad zu den eigenen Units in /etc/fpc-2.6.0.cfg. Sagen wir mal, der Pfad sei /home/[user]/pascal/ide/unit. es funktioniert auch, aber: Wie ich bereits sagte, habe ich früher schon mal mit der Portierung meiner DOS-Programme begonnen, aber abgebrochen. Außerdem gibt's auch noch eine Pascal-IDE in /home/[user]/dosemu/freedos, die nach wie vor benutzt wird.

Versuche ich jetzt in /home/[user]/pascal/ide/unit eine DOS-Unit neu für Linux zu schreiben (aber mit dem alten Namen), nennen wir sie mal test.pas, dann meckert der Compiler an, dass er für diese Unit eine andere benötige und nicht finde. Stimmt aber nicht: Ich kann test.pas in /home/[user]/pascal/ide/unit compilieren, ohne dass da etwas als fehlend bemerkt würde. Dito, wenn ich sie umbenenne und mein Programm mit der umbenannten Unit im USES-Abschnitt kompiliere. Ich vermute, dass der Compiler irgendwie versucht, eine alte Unit namens test.pas (entweder aus meinen früheren Portierungsversuchen oder aus dem nach wie vor benutzten DOS-Pascal) zu kompilieren. Nur, wie kommt er dazu? Auf welche test.pas greift er zu? Ich habe alles mit fpc*.cfg gelöscht, was ich gefunden habe, außer /etc/fpc-2.6.0.cfg und alle verbliebenen fpc.cfg links unter /etc verweisen jetzt darauf. Unter /home/[user]/pascal/ide/unit gibt es keine test.pas, die die angemeckerte Abhängigkeit hätte. Hoffentlich ist meine Darstellung nachvollziehbar.

Jemand eine Idee, wo ich weiter suchen könnte?

Grüße, Günther

tobo
Beiträge: 2340
Registriert: 10.12.2008 10:51:41

Re: freepascal, geany

Beitrag von tobo » 04.04.2015 21:17:35

Verstehe ich das richtig: Du hast eine alte test.pas Unit, die lässt sich compilieren. Kopierst Du die (test.*) weg, legst eine neue test.pas Unit im selben Verzeichnis an, dann lässt sich diese nicht compilieren, weil der Compiler dort eingebundene Unit(s) nicht findet?
Wenn ja, dann werden im Uses-Abschnitt der neuen test.pas wohl Units eingebunden sein, die im Suchpfad nicht vorgefunden werden!? Im einfachsten Fall unterscheiden sich die Uses-Abschnitte der beiden test.pas. Was ich mir noch vorstellen könnte ist, dass hier plattformspezifische Angaben in der /etc/fpc.cfg gemacht wurde (gleicher Unit-Name aber in unterschiedlichen Verzeichnissen DOS/Linux liegend). Wenn nichts davon zutrifft, dann würde es ziemlich sicher Sinn machen, einfach mal die genaue Fehlermeldung zu zeigen...

guennid

Re: freepascal, geany

Beitrag von guennid » 04.04.2015 22:57:09

Kopierst Du die (test.*) weg, legst eine neue test.pas Unit im selben Verzeichnis an, dann lässt sich diese nicht compilieren
Jein. Ich kopiere sie nicht weg, ich verschiebe sie mitsamt ihrem Verzeichnis.

Es GAB den Pad /home/[user]/pascal/ide/alt-unit aus früheren Versuchen mit freepascal für linux. Außerdem existiert nach wie vor ein Pfad /home/[user]/dose/freedos/... mit dosemu/freepascal für DOS. In beiden Pfaden gibt/gab es eine Unit test.pas. Das Verzeichnis alt-unit habe ich verschoben einschließlich der dortigen Unit test.pas. Statt alt-unit habe ich das Verzeichnis "units" unter /home/[user]/pascal/ide/ neu angelegt. Alle fpc*.cfgs bis auf /etc/fpc-2.6.0.cfg würden gelöscht und darin /home/[user]/pascal/ide/units als neues Unit-Verzeichnis eingetragen (der Eintrag für alt-unit entfernt, versteht sich).
Mein in Arbeit befindliches Programm nennen wir mal guennid.pas. Es liegt in /home/[user]/pascal/ide/ In /home/[user]/pascal/ide/units habe ich eine völlig neue Unit mit Namen test.pas angelegt. Trage ich eine Unit test in guennid.pas ein und versuche guennid zu kompilieren, bricht die Kompilation ab, mit dem Hinweis test benötige eine weitere, nicht vorhandene Unit. Diese wurde bei der alten test-Unit in der Tat benötigt, nicht aber bei der neuen. Öffne ich die neue test-Unit in Geany, kann ich sie problemlos aus geany heraus kompilieren, was nichts nutzt, da auch dann eine Kompilation des eigentlichen Programms (guennid) via geany scheitert mit der o.a. Meldung. Benenne ich die neu test.pas um und trage sie unter diesem Namen in guennid ein, kann ich guennid kompilieren. Daraus schließe ich, dass dem Kompiler der Pfad /home/[user]/pascal/ide/units bekannt ist. Soweit ich sehe, muss ich herausfinden, woher sich der Kompiler eine nicht mehr zutreffende Info bezüglich einer Unit test holt, die er doch eigentlich gar nicht mehr kennen kann.

Grüße, Günther

[edit]
Fehler gefunden: Bei meinen Aufräumaktionen habe ich die alte test.pas irgendwann offenbar mal nach /home/[user]/pascal/ide transferiert, und dort hat der Kompiler beim Kompilieren von guennid wohl als erstes gesucht. :wink:

Antworten