From: Moritz Bunkus Date: Tue, 8 Nov 2016 11:58:44 +0000 (+0100) Subject: Startup: Include-Pfade mittels FindBin ermitteln X-Git-Tag: release-3.5.4~1924 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/cff913a1c984f82558a7d59dec0b8b1a06c5530d?hp=cff913a1c984f82558a7d59dec0b8b1a06c5530d Startup: Include-Pfade mittels FindBin ermitteln Neue Perl-Versionen werden das aktuelle Verzeichnis '.' aus dem Standard-Include-Pfad @INC entfernen. Das bedeutet für uns, dass wir nicht mehr einfach »use SL::Dispatcher;« und ähnliche Konstrukte machen können. Daher stellt dieser Commit all diejenigen Perl-Dateien, die als externe Einstiegsquelle dienen, auf die Verwendung von FindBin um. Es werden nicht nur die Verzeichnisse »modules/override« und »modules/fallback« behandelt, sondern auch das Installationsverzeichins selber mit in @INC aufgenommen, um für die Entfernung von '.' gewappnet zu sein. Zusätzlich wurden die meisten Scripte so modifiziert, dass sie nicht mehr direkt aus dem kivitendo-Installationsverzeichnis heraus aufgerufen werden müssen sondern aus beliebigen Verzeichnissen heraus aufgerufen werden können. Sie wechseln schlicht zu allererst das aktuelle Verzeichnis ins kivitendo-Installationsverzeichnis. Perl-Module, die nicht direkt Scripte sind und den Pfad zum Installationsverzeichnis benötigen (also z.B. SL/DBUpgrade2.pm), dürfen allerdings FindBin nicht benutzen, weil $FindBin::Bin das Verzeichnis zum aufgerufenen Perl-Script enthält, und das kann mal dispatcher.pl sein, mal scripts/dbupgrade2.pl. Für diese Module gibt es weiterhin SL::System::Process->exe_dir, die das kivitendo-Installationsverzeichnis zuverlässig ermittelt. Leider ist es nicht möglich, nur SL::System::Process->exe_dir anstelle von $FindBin::Bin zu nutzen, da zuerst SL::System::Process eingebunden werden muss, und um das zu tun, muss das Installationsverzeichnis ja bereits im Include-Pfad vorhanden sein — typical case of catch 22. ---