]> sourceware.org Git - glibc.git/blame - test-installation.pl
Update.
[glibc.git] / test-installation.pl
CommitLineData
cc3fa755
UD
1#! /usr/bin/perl -w
2
3# Copyright (C) 1997 Free Software Foundation, Inc.
4# This file is part of the GNU C Library.
5# Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1997.
6
7# The GNU C Library is free software; you can redistribute it and/or
8# modify it under the terms of the GNU Library General Public License as
9# published by the Free Software Foundation; either version 2 of the
10# License, or (at your option) any later version.
11
12# The GNU C Library is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15# Library General Public License for more details.
16
17# You should have received a copy of the GNU Library General Public
18# License along with the GNU C Library; see the file COPYING.LIB. If not,
19# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20# Boston, MA 02111-1307, USA.
21
22
23$PACKAGE = "libc";
24$progname = $0;
25if ($ENV{CC}) {
26 $CC = $ENV{CC};
27} else {
28 $CC= "gcc";
29}
30
31sub usage {
32 print "Usage: test-installation [soversions.mk]\n";
33 print " --help print this help, then exit\n";
34 print " --version print version number, then exit\n";
35 exit 0;
36}
37
38sub installation_problem {
39 print "The script has found some problems with your installation!\n";
40 print "Please read the FAQ and the README file and check the following:\n";
41 print "- Did you change the gcc specs file (neccessary after upgrading from\n";
42 print " Linux libc5)?\n";
43 print "- Are there any symbolic links of the form libXXX.so to old libraries?\n";
44 print " Links like libm.so -> libm.so.5 (where libm.so.5 is an old library) are wrong,\n";
45 print " libm.so should point to the newly installed glibc file - and there should be\n";
46 print " only one such link (check e.g. /lib and /usr/lib)\n";
47 print "You should restart this script from your build directory after you've\n";
48 print "fixed all problems!\n";
49 print "Btw. the script doesn't work if you're installing GNU libc not as your\n";
50 print "primary library!\n";
51 exit 1;
52}
53
54arglist: while (@ARGV) {
55 if ($ARGV[0] eq "--v" || $ARGV[0] eq "--ve" || $ARGV[0] eq "--ver" ||
56 $ARGV[0] eq "--vers" || $ARGV[0] eq "--versi" ||
57 $ARGV[0] eq "--versio" || $ARGV[0] eq "--version") {
58 print "test-installation (GNU $PACKAGE)\n";
59 print "Copyright (C) 1997 Free Software Foundation, Inc.\n";
60 print "This is free software; see the source for copying conditions. There is NO\n";
61 print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n";
62 print "Written by Andreas Jaeger <aj\@arthur.rhein-neckar.de>\n";
63
64 exit 0;
65 } elsif ($ARGV[0] eq "--h" || $ARGV[0] eq "--he" || $ARGV[0] eq "--hel" ||
66 $ARGV[0] eq "--help") {
67 &usage;
68 } elsif ($ARGV[0] =~ /^-/) {
69 print "$progname: unrecognized option `$ARGV[0]'\n";
70 print "Try `$progname --help' for more information.\n";
71 exit 1;
72 } else {
73 last arglist;
74 }
75}
76
77# We expect none or one argument.
78if ($#ARGV == -1) {
79 $soversions="soversions.mk";
80} elsif ($#ARGV == 0) {
81 if (-d $ARGV[0]) {
82 $soversions = "$ARGV[0]/soversions.mk";
83 } else {
84 $soversions = $ARGV[0];
85 }
86} else {
87 die "Wrong number of arguments.";
88}
89
90
91# Read names and versions of all shared libraries that are part of
92# glibc
93open SOVERSIONS, $soversions
94 or die ("Couldn't open $soversions in build directory!");
95
96$link_libs = "";
97%versions = ();
98
99while (<SOVERSIONS>) {
100 next if (/^all-sonames/);
101 chop;
102 if (/^lib/) {
103 ($name, $version)= /^lib(.*)\.so-version=\.(.*)$/;
104 if ($name ne "nss_ldap") {
105 $link_libs .= " -l$name";
106 $versions{$name} = $version;
107 }
108 } else {
109 if (/^ld\.so/) {
110 ($ld_so_name, $ld_so_version)= /=(.*)\.so\.(.*)$/;
111 }
112 }
113}
114
115close SOVERSIONS;
116
117# Create test program and link it against all
118# shared libraries
119
120open PRG, ">/tmp/test-prg$$.c"
121 or die ("Couldn't write test file /tmp/test-prg$$.c");
122
123print PRG '
124#include <stdlib.h>
125int main(void) {
126 printf ("Your new glibc installation seems to be ok.\n");
127 exit (0);
128}
129';
130close PRG;
131
132open GCC, "$CC /tmp/test-prg$$.c $link_libs -o /tmp/test-prg$$ 2>&1 |"
133 or die ("Couldn't execute $CC!");
134
135while (<GCC>) {
136 print $_ if (! /warning/);
137}
138close GCC;
139if ($?) {
140 print "Execution of $CC failed!\n";
141 &installation_problem;
142}
143
144# Test if test program is linked against the right versions of
145# shared libraries
146
147$ok = 1;
148%found = ();
149
150open LDD, "ldd /tmp/test-prg$$ |"
151 or die ("Couldn't execute ldd");
152while (<LDD>) {
153 if (/^\s*lib/) {
154 ($name, $version1, $version2) =
155 /^\s*lib(\w*)\.so\.([0-9\.]*)\s*=>.*\.so\.([0-9\.]*)/;
156 $found{$name} = 1;
157 if ($versions{$name} ne $version1 || $version1 ne $version2) {
158 print "Library lib$name is not correctly installed.\n";
159 print "Please check your installation!\n";
160 print "Offending line of ldd output: $_\n";
161 $ok = 0;
162 }
163 }
164 if (/$ld_so_name/) {
165 ($version1, $version2) =
166 /$ld_so_name\.so\.([0-9\.]*)\s*=>.*\.so\.([0-9\.]*)/;
167 if ($version1 ne $version2 || $version1 ne $ld_so_version) {
168 print "The dynamic linker $ld_so_name.so is not correctly installed.\n";
169 print "Please check your installation!\n";
170 print "Offending line of ldd output: $_\n";
171 $ok = 0;
172 }
173 }
174}
175
176close LDD;
177die "ldd execution failed" if $?;
178
179foreach (keys %versions) {
180 unless ($found{$_}) {
181 print "Library lib$_ is not correctly installed since the test program\n";
182 print "was not linked dynamically against it.\n";
183 print "Do you have a file/link lib$_.so?\n";
184 $ok = 0;
185 }
186}
187
188&installation_problem unless $ok;
189
190# Finally execute the test program
191system ("/tmp/test-prg$$") == 0
192 or die ("Execution of test program failed");
193
194# Clean up after ourselves
195unlink ("/tmp/test-prg$$", "/tmp/test-prg$$.c");
This page took 0.050931 seconds and 5 git commands to generate.