aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/scripts
diff options
context:
space:
mode:
authorAleric Inglewood2010-10-08 22:43:56 +0200
committerAleric Inglewood2010-10-08 23:08:31 +0200
commita3cffd06a0e7aa92e1b6c28e7bad655b7085296c (patch)
tree9a75a4f34df3cb8963a1f1e9d130164011f49756 /linden/scripts
parentMerge remote branch 'remote-twoway/weekly' into weekly (diff)
downloadmeta-impy-a3cffd06a0e7aa92e1b6c28e7bad655b7085296c.zip
meta-impy-a3cffd06a0e7aa92e1b6c28e7bad655b7085296c.tar.gz
meta-impy-a3cffd06a0e7aa92e1b6c28e7bad655b7085296c.tar.bz2
meta-impy-a3cffd06a0e7aa92e1b6c28e7bad655b7085296c.tar.xz
RED-429: Link against prebuilt libraries / always use gtk-related system libs (linux)
This patch fixes the problem that there were no 'developer' symlinks for the prebuilt packages (which is not needed for runtim), causing the casual user that tries to compile the viewer on linux (without using --standalone) to link against their system libs (while using the header files of the prebuilt versions), often causing linker errors. It also fixes the fact that a few libraries were completely missing, most notably the dbusglib package only had header files and not a library at all! libgio and libpangocairo where missing from the link command line so that the wrong libraries were picked up, if any at all. Finally, the last GTK related prebuilt libraries have simply been removed from the packaging: linux has those installed (or else the users will know how to install them as soon as they see that the viewer complains about a missing library). This is much more stable, as all those libraries more or less form a whole. Or rather, the libraries that use glib, as especially that one gives a problem at the moment since the latest glib has new g_malloc_n functions that don't exist in the prebuilt glib. Note the difference between a USER compiling her own viewer, and the imprudence team compiling a release: When the imprudence team compiles a release we need to create a portable binary that runs on many versions of linux. In order to achieve that we link against "old" library versions, so that the viewer still works on old operating systems, and (hopefull) also on newer systems, since libraries with the same SONAME are backwards compatible. With g_malloc_n as example: our viewer binary doesn't use that function, so a user that links with their own glib will never have a problem, whether or not his library provides this function. On the other hand, when a user gets the sources and compiles his own viewer he wants to use the LATEST library versions: his own operating system ones. The best way to achieve this is to configure with --standalone, but that currently demands that ALL libraries are installed on her system, including a few very-hard-to-get libraries. If she therefore chooses to configure without --standalone, she suddenly gets all the old library versions, forcing her to at least link against those at compile time (in order to minimize the risk of version incompatibilities). A better solution for the do-it-yourself user would be to have a --semi-standalone configuration that only uses the hard-to-get prebuilt libs and further uses as much the operating system libraries as possible. For most of the hard-to-get libraries this is no problem since they all only depend on libc and similar stable ABI libs.
Diffstat (limited to 'linden/scripts')
-rwxr-xr-xlinden/scripts/install.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/linden/scripts/install.py b/linden/scripts/install.py
index fca6dbe..69f0c64 100755
--- a/linden/scripts/install.py
+++ b/linden/scripts/install.py
@@ -35,6 +35,7 @@ $/LicenseInfo$
35 35
36import sys 36import sys
37import os.path 37import os.path
38import re
38 39
39# Look for indra/lib/python in all possible parent directories ... 40# Look for indra/lib/python in all possible parent directories ...
40# This is an improvement over the setup-path.py method used previously: 41# This is an improvement over the setup-path.py method used previously:
@@ -563,6 +564,29 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
563 tar.extractall(path=install_dir) 564 tar.extractall(path=install_dir)
564 except AttributeError: 565 except AttributeError:
565 _extractall(tar, path=install_dir) 566 _extractall(tar, path=install_dir)
567 if _get_platform() == 'linux' or _get_platform() == 'linux64':
568 first = 1
569 for tfile in tar.getnames():
570 if tfile.find('.so.') > 0:
571 LINK = re.sub(r'\.so\.[0-9.]*$', '.so', tfile)
572 link_name = "../" + LINK
573 if not os.path.exists(link_name):
574 if first == 1:
575 first = 0
576 print "Adding missing symlink(s) for package %s:" % ifile.filename
577 target = os.path.basename(tfile)
578 soname = os.popen("readelf -d \"../%(tfile)s\" "
579 " | grep SONAME "
580 " | sed -e 's/.*\[//;s/\].*//'" % {"tfile": tfile}).read()
581 soname = soname.strip()
582 if soname: # not empty
583 tmpfname = os.path.dirname(LINK) + "/" + soname
584 if os.path.exists("../" + tmpfname):
585 target = soname
586 else:
587 print "WARNING: SONAME %s doesn't exist!" % tmpfname
588 os.symlink(target, link_name)
589 print " %s --> %s" % (LINK, target)
566 if ifile.pkgname in self._installed: 590 if ifile.pkgname in self._installed:
567 self._installed[ifile.pkgname].add_files( 591 self._installed[ifile.pkgname].add_files(
568 ifile.url, 592 ifile.url,