Revision cff913a1
Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt
scripts/find-use.pl | ||
---|---|---|
1 | 1 |
#!/usr/bin/perl -l |
2 |
|
|
3 |
BEGIN { |
|
4 |
use FindBin; |
|
5 |
|
|
6 |
unshift(@INC, $FindBin::Bin . '/../modules/override'); # Use our own versions of various modules (e.g. YAML). |
|
7 |
push (@INC, $FindBin::Bin . '/..'); # '.' will be removed from @INC soon. |
|
8 |
push (@INC, $FindBin::Bin . '/../modules/fallback'); # Only use our own versions of modules if there's no system version. |
|
9 |
} |
|
10 |
|
|
2 | 11 |
use strict; |
3 | 12 |
#use warnings; # corelist and find throw tons of warnings |
4 | 13 |
use File::Find; |
... | ... | |
55 | 64 |
'files-with-match|l' => \ my $l, |
56 | 65 |
); |
57 | 66 |
|
67 |
chmod($FindBin::Bin . '/..'); |
|
68 |
|
|
58 | 69 |
find(sub { |
59 | 70 |
return unless /(\.p[lm]|console)$/; |
60 | 71 |
|
Auch abrufbar als: Unified diff
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.