Revision cff913a1
Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt
scripts/generate_client_js_actions.pl | ||
---|---|---|
4 | 4 |
use warnings; |
5 | 5 |
|
6 | 6 |
use File::Slurp; |
7 |
use FindBin; |
|
7 | 8 |
use List::Util qw(first max); |
8 | 9 |
use Template; |
9 | 10 |
|
10 |
my $rel_dir = (first { -f "${_}/SL/ClientJS.pm" } qw(. ..)) || die "ClientJS.pm not found";
|
|
11 |
my $rel_dir = $FindBin::Bin . '/..';
|
|
11 | 12 |
my @actions; |
12 | 13 |
|
13 | 14 |
foreach (read_file("${rel_dir}/SL/ClientJS.pm")) { |
... | ... | |
58 | 59 |
|
59 | 60 |
$output .= sprintf "\n else\%sconsole.log('Unknown action: ' + action[0]);\n", ' ' x (4 + 2 + 6 + 3 + 4 + 2 + $longest + 1); |
60 | 61 |
|
61 |
my $template = Template->new({ RELATIVE => 1 });
|
|
62 |
my $template = Template->new({ ABSOLUTE => 1 });
|
|
62 | 63 |
$template->process($rel_dir . '/scripts/generate_client_js_actions.tpl', { actions => $output }, $rel_dir . '/js/client_js.js') || die $template->error(), "\n"; |
63 | 64 |
print "js/client_js.js generated automatically.\n"; |
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.