Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision cff913a1

Von Moritz Bunkus vor mehr als 7 Jahren hinzugefügt

  • ID cff913a1c984f82558a7d59dec0b8b1a06c5530d
  • Vorgänger 7c3c6e8d
  • Nachfolger ea4101ec

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.

Unterschiede anzeigen:

scripts/locales.pl
10 10
use strict;
11 11

  
12 12
BEGIN {
13
  unshift(@INC, 'modules/override'); # Use our own versions of various modules (e.g. YAML).
14
  push   (@INC, 'modules/fallback'); # Only use our own versions of modules if there's no system version.
13
  use FindBin;
14

  
15
  unshift(@INC, $FindBin::Bin . '/../modules/override'); # Use our own versions of various modules (e.g. YAML).
16
  push   (@INC, $FindBin::Bin . '/..');
17
  push   (@INC, $FindBin::Bin . '/../modules/fallback'); # Only use our own versions of modules if there's no system version.
15 18
}
16 19

  
17 20
use Carp;
......
28 31
use YAML ();
29 32
use YAML::Loader (); # YAML tries to load Y:L at runtime, but can't find it after we chdir'ed
30 33
use SL::DBUpgrade2;
34
use SL::System::Process;
31 35

  
32 36
$OUTPUT_AUTOFLUSH = 1;
33 37

  
......
546 550
  # we only need to do this for auth atm, because only auth scripts can include new rights, which are translateable
547 551
  my $auth = 1;
548 552

  
549
  my $dbu = SL::DBUpgrade2->new(auth => $auth, path => '../../sql/Pg-upgrade2-auth');
553
  my $dbu = SL::DBUpgrade2->new(auth => $auth, path => SL::System::Process->exe_dir . '/sql/Pg-upgrade2-auth');
550 554

  
551 555
  for my $upgrade ($dbu->sort_dbupdate_controls) {
552 556
    for my $string (@{ $upgrade->{locales} || [] }) {

Auch abrufbar als: Unified diff