1*b1cdbd2cSJim Jagielski#**************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski#**************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielskipackage installer::strip;
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielskiuse installer::converter;
27*b1cdbd2cSJim Jagielskiuse installer::existence;
28*b1cdbd2cSJim Jagielskiuse installer::globals;
29*b1cdbd2cSJim Jagielskiuse installer::logger;
30*b1cdbd2cSJim Jagielskiuse installer::pathanalyzer;
31*b1cdbd2cSJim Jagielskiuse installer::systemactions;
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski#####################################################################
34*b1cdbd2cSJim Jagielski# Checking whether a file has to be stripped
35*b1cdbd2cSJim Jagielski#####################################################################
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielskisub need_to_strip
38*b1cdbd2cSJim Jagielski{
39*b1cdbd2cSJim Jagielski	my ( $filename ) = @_;
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski	my $strip = 0;
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski	# Check using the "file" command
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski	open (FILE, "file $filename |");
46*b1cdbd2cSJim Jagielski	my $fileoutput = <FILE>;
47*b1cdbd2cSJim Jagielski	close (FILE);
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski	if (( $fileoutput =~ /not stripped/i ) && ( $fileoutput =~ /\bELF\b/ )) { $strip = 1; }
50*b1cdbd2cSJim Jagielski
51*b1cdbd2cSJim Jagielski	return $strip
52*b1cdbd2cSJim Jagielski}
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski#####################################################################
55*b1cdbd2cSJim Jagielski# Checking whether a file has to be stripped
56*b1cdbd2cSJim Jagielski#####################################################################
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielskisub do_strip
59*b1cdbd2cSJim Jagielski{
60*b1cdbd2cSJim Jagielski	my ( $filename ) = @_;
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski	my $systemcall = "strip" . " " . $filename;
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski	my $returnvalue = system($systemcall);
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski	my $infoline = "Systemcall: $systemcall\n";
67*b1cdbd2cSJim Jagielski	$installer::logger::Lang->print($infoline);
68*b1cdbd2cSJim Jagielski
69*b1cdbd2cSJim Jagielski	if ($returnvalue)
70*b1cdbd2cSJim Jagielski	{
71*b1cdbd2cSJim Jagielski		$infoline = "ERROR: Could not strip $filename!\n";
72*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
73*b1cdbd2cSJim Jagielski	}
74*b1cdbd2cSJim Jagielski	else
75*b1cdbd2cSJim Jagielski	{
76*b1cdbd2cSJim Jagielski		$infoline = "SUCCESS: Stripped library $filename!\n";
77*b1cdbd2cSJim Jagielski		$installer::logger::Lang->print($infoline);
78*b1cdbd2cSJim Jagielski	}
79*b1cdbd2cSJim Jagielski}
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski#####################################################################
82*b1cdbd2cSJim Jagielski# Resolving all variables in the packagename.
83*b1cdbd2cSJim Jagielski#####################################################################
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielskisub strip_libraries
86*b1cdbd2cSJim Jagielski{
87*b1cdbd2cSJim Jagielski	my ( $filelist, $languagestringref ) = @_;
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski	installer::logger::include_header_into_logfile("Stripping files:");
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski	my $strippeddirbase = installer::systemactions::create_directories("stripped", $languagestringref);
92*b1cdbd2cSJim Jagielski
93*b1cdbd2cSJim Jagielski	if (! installer::existence::exists_in_array($strippeddirbase, \@installer::globals::removedirs))
94*b1cdbd2cSJim Jagielski	{
95*b1cdbd2cSJim Jagielski		push(@installer::globals::removedirs, $strippeddirbase);
96*b1cdbd2cSJim Jagielski	}
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski	for ( my $i = 0; $i <= $#{$filelist}; $i++ )
99*b1cdbd2cSJim Jagielski	{
100*b1cdbd2cSJim Jagielski		my $sourcefilename = ${$filelist}[$i]->{'sourcepath'};
101*b1cdbd2cSJim Jagielski
102*b1cdbd2cSJim Jagielski		if ( need_to_strip($sourcefilename) )
103*b1cdbd2cSJim Jagielski		{
104*b1cdbd2cSJim Jagielski			my $shortfilename = $sourcefilename;
105*b1cdbd2cSJim Jagielski			installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$shortfilename);
106*b1cdbd2cSJim Jagielski
107*b1cdbd2cSJim Jagielski			$infoline = "Strip: $shortfilename\n";
108*b1cdbd2cSJim Jagielski			$installer::logger::Lang->print($infoline);
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski			# copy file into directory for stripped libraries
111*b1cdbd2cSJim Jagielski
112*b1cdbd2cSJim Jagielski			my $onelanguage = ${$filelist}[$i]->{'specificlanguage'};
113*b1cdbd2cSJim Jagielski
114*b1cdbd2cSJim Jagielski			# files without language into directory "00"
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski			if ($onelanguage eq "") { $onelanguage = "00"; }
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski			my $strippeddir = $strippeddirbase . $installer::globals::separator . $onelanguage;
119*b1cdbd2cSJim Jagielski			installer::systemactions::create_directory($strippeddir);	# creating language specific subdirectories
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski			my $destfilename = $strippeddir . $installer::globals::separator . $shortfilename;
122*b1cdbd2cSJim Jagielski			installer::systemactions::copy_one_file($sourcefilename, $destfilename);
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski			# change sourcepath in files collector
125*b1cdbd2cSJim Jagielski
126*b1cdbd2cSJim Jagielski			${$filelist}[$i]->{'sourcepath'} = $destfilename;
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski			# strip file
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski			do_strip($destfilename);
131*b1cdbd2cSJim Jagielski		}
132*b1cdbd2cSJim Jagielski	}
133*b1cdbd2cSJim Jagielski}
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski1;
136