]> git.pld-linux.org Git - packages/libreoffice.git/blame - openoffice-dpack-lang.pl
- up
[packages/libreoffice.git] / openoffice-dpack-lang.pl
CommitLineData
ae4c2043 1#! /usr/bin/perl
2
3use strict;
4
5#- Define full path to unzip command
6my $UnzipCommand = "/usr/bin/unzip";
7
8#- Define the default setup file
9my $SetupConf = "setup.ins";
10
11#- Define the zipfiles dir (will be the same as of setup.ins)
12my $SetupDir = ".";
13
14#- Define destination directory
15my $DestDir = "/usr/lib/openoffice";
16
17#- Define to extract help files
18my $ExtractHelp = 0;
19
20sub dirname { local $_ = shift; s|[^/]*/*\s*$||; s|(.)/*$|$1|; $_ || '.' }
21sub cat_ { local *F; open F, $_[0] or return; my @l = <F>; wantarray() ? @l : join '', @l }
22
23sub mkdir_p {
24 my ($dir) = @_;
25 if (-d $dir) {
26 # nothing to do
27 } elsif (-e $dir) {
28 die "mkdir: error creating directory $dir: $dir is a file and i won't delete it\n";
29 } else {
30 mkdir_p(dirname($dir));
31 mkdir($dir, 0755) or die "mkdir: error creating directory $dir: $!\n";
32 }
33 1;
34}
35
36while ( $ARGV[0] =~ /^-/ ) {
37 $_ = shift;
38 if (m/^-d=(\S+)/) {
39 $DestDir=$1;
40 }
41 elsif (m/^-z=(\S+)/) {
42 $UnzipCommand=$1;
43 }
44 elsif (m/^-i=(\S+)/) {
45 $SetupConf=$1;
46 $SetupDir=dirname $SetupConf;
47 }
48 elsif (m/^-h/) {
49 $ExtractHelp = 1;
50 }
51 else {
52 print STDERR "$0: Unknown option $_";
53 }
54}
55
56# Parse enough of <setup.ins> to get correct Directory and File sections.
57sub ReadSetup($) {
58 my ($file) = @_;
59 my $e;
60 my %entries;
61 foreach (cat_("$file")) {
62 if (/^([_A-Za-z]+)\s*([_A-Za-z0-9]+)/) {
63 $entries{$1}{$2} = $e = { };
64 }
65 elsif (/\s*([_A-Za-z]+)\s*=\s*\"?([^;\"]+)\"?;/) {
66 $e->{$1} = $2;
67 }
68 }
69
70 # Expand predefined dirs to de $DestDir variable
71 $entries{Directory}{$_} = { HostName => "$DestDir" } foreach
72 qw( PREDEFINED_HOMEDIR PREDEFINED_PROGDIR PREDEFINED_CONFIGDIR );
73
74 \%entries;
75}
76
77sub DumpEntries(\%$) {
78 my $entries = shift;
79 my ($basename) = @_;
80 my $sections = $entries->{$basename} if $entries->{$basename};
81 while (my ($key, $value) = each(%$sections)) {
82 print "$basename $key\n";
83 $value->{$_} and print "\t$_\t= \"$value->{$_}\";\n"
84 foreach qw(Bitmap Date DefaultDestPath DefaultLanguage
85 Description FadeType FileName fontsDirFile
86 fontsDirGlobalFile fontspath HostName ID Key
87 Languages Name PackedName Path ProcName
88 ProductName ProductVersion Section Text Time
89 Value VendorBitmap);
90 $value->{$_} and print "\t$_\t= $value->{$_};\n"
91 foreach qw(ArchiveFiles ArchiveSize BitmapPosX BitmapPoxY
92 Carrier Default Dir DiskNo FileID FontSize
93 Minimal ModuleID NetDir Order ParentID
94 ProfileID RegistryID ScriptVersion Size
95 TextHeight TextWidth UnixRights);
96 print "End\n\n";
97 }
98}
99
100sub GetFullPath {
101 my $dirs = shift;
102 my ($id) = @_;
103 return ( $dirs->{$id}->{ParentID} ? GetFullPath($dirs, $dirs->{$id}->{ParentID}) . "/" : "" )
104 . $dirs->{$id}->{HostName};
105}
106
107# Parse the file and get all entries
108die "$0: Can't open $SetupConf\n" if ( ! -r $SetupConf );
109my $setup = ReadSetup($SetupConf);
110#DumpEntries %$setup, "Directory";
111#DumpEntries %$setup, "File";
112
113die "$UnzipCommand not found, please set the full path to the unzip command\n" if
114 ( ! -x "$UnzipCommand" );
115
116while (my ($key, $value) = each (%{$setup->{File}})) {
117 if ($value->{PackedName}) {
118 my $zipfile = "$SetupDir/$value->{PackedName}";
119 die "$0: zip file $zipfile not accessible" if
120 ( ! -r "$zipfile" );
121
122 # Find language-specific candidates
123 if ($key =~ /_Lang$/ || $value->{Name} =~ /\.res$/
124 || ($ExtractHelp && $key =~ /File_Help/ && $value->{Dir} =~ /gid_Dir_Help_Isolanguage/)) {
125 print "Unpacking $zipfile... ";
126 # Prefer NetDir path over simple Dir
127 my $outpath = GetFullPath \%{$setup->{Directory}}, $value->{NetDir} ? $value->{NetDir} : $value->{Dir};
128 -d $outpath or mkdir_p($outpath);
129 system("$UnzipCommand $zipfile -d $outpath");
130 }
131 }
132}
133
This page took 0.090974 seconds and 4 git commands to generate.