aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden
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
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 '')
-rw-r--r--linden/doc/contributions.txt1
-rw-r--r--linden/indra/cmake/GStreamer.cmake2
-rw-r--r--linden/indra/cmake/UI.cmake2
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py30
-rwxr-xr-xlinden/install.xml4
-rwxr-xr-xlinden/scripts/install.py24
6 files changed, 47 insertions, 16 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 5fe073c..1cbc2dd 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -62,6 +62,7 @@ Aleric Inglewood
62 SNOW-766 62 SNOW-766
63 SNOW-796 63 SNOW-796
64 SNOW-800 64 SNOW-800
65 RED-429
65 RED-552 66 RED-552
66 RED-553 67 RED-553
67 RED-554 68 RED-554
diff --git a/linden/indra/cmake/GStreamer.cmake b/linden/indra/cmake/GStreamer.cmake
index 9c5e9f7..e8e0d9e 100644
--- a/linden/indra/cmake/GStreamer.cmake
+++ b/linden/indra/cmake/GStreamer.cmake
@@ -90,6 +90,7 @@ else (WINDOWS)
90 gmodule-2.0 90 gmodule-2.0
91 gthread-2.0 91 gthread-2.0
92 glib-2.0 92 glib-2.0
93 gio-2.0
93 xml2.2 94 xml2.2
94 ) 95 )
95 96
@@ -109,6 +110,7 @@ else (WINDOWS)
109 gthread-2.0 110 gthread-2.0
110 rt 111 rt
111 glib-2.0 112 glib-2.0
113 gio-2.0
112 ) 114 )
113 115
114 endif (DARWIN) 116 endif (DARWIN)
diff --git a/linden/indra/cmake/UI.cmake b/linden/indra/cmake/UI.cmake
index b70a531..9d068c4 100644
--- a/linden/indra/cmake/UI.cmake
+++ b/linden/indra/cmake/UI.cmake
@@ -39,6 +39,7 @@ else (STANDALONE)
39 gdk-x11-2.0 39 gdk-x11-2.0
40 gdk_pixbuf-2.0 40 gdk_pixbuf-2.0
41 glib-2.0 41 glib-2.0
42 gio-2.0
42 gmodule-2.0 43 gmodule-2.0
43 gobject-2.0 44 gobject-2.0
44 gthread-2.0 45 gthread-2.0
@@ -48,6 +49,7 @@ else (STANDALONE)
48 pangox-1.0 49 pangox-1.0
49 pangoxft-1.0 50 pangoxft-1.0
50 pixman-1 51 pixman-1
52 pangocairo-1.0
51 ) 53 )
52 endif (LINUX) 54 endif (LINUX)
53 55
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 4a17cd0..7563268 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -938,18 +938,19 @@ class Linux_i686Manifest(LinuxManifest):
938 self.path("libalut.so.0") 938 self.path("libalut.so.0")
939 939
940 # GTK+ and dependencies 940 # GTK+ and dependencies
941 self.path("libatk-1.0.so.0") 941 ## Lets just use the system libraries for all of these:
942 self.path("libcairo.so.2") 942 ##self.path("libatk-1.0.so.0")
943 self.path("libfontconfig.so.1") 943 ##self.path("libcairo.so.2")
944 self.path("libfreetype.so.6") 944 ##self.path("libfontconfig.so.1")
945 ##self.path("libfreetype.so.6")
945 # self.path("libgdk_pixbuf-2.0.so.0") # see linux64 why 946 # self.path("libgdk_pixbuf-2.0.so.0") # see linux64 why
946 self.path("libgdk-x11-2.0.so.0") 947 ##self.path("libgdk-x11-2.0.so.0")
947 self.path("libgtk-x11-2.0.so.0") 948 ##self.path("libgtk-x11-2.0.so.0")
948 # self.path("libpango-1.0.so.0") # dto. 949 # self.path("libpango-1.0.so.0") # dto.
949 # self.path("libpangoft2-1.0.so.0") 950 # self.path("libpangoft2-1.0.so.0")
950 # self.path("libpangox-1.0.so.0") 951 # self.path("libpangox-1.0.so.0")
951 # self.path("libpangoxft-1.0.so.0") 952 # self.path("libpangoxft-1.0.so.0")
952 self.path("libpixman-1.so.0") 953 ##self.path("libpixman-1.so.0")
953 954
954 # Gstreamer libs 955 # Gstreamer libs
955 self.path("libgstbase-0.10.so.0") 956 self.path("libgstbase-0.10.so.0")
@@ -1067,18 +1068,19 @@ class Linux_x86_64Manifest(LinuxManifest):
1067 self.path("libalut.so.0") 1068 self.path("libalut.so.0")
1068 1069
1069 # GTK+ and dependencies 1070 # GTK+ and dependencies
1070 self.path("libatk-1.0.so.0") 1071 ## Lets just use the system libraries for all of these:
1071 self.path("libcairo.so.2") 1072 ##self.path("libatk-1.0.so.0")
1072 self.path("libfontconfig.so.1") 1073 ##self.path("libcairo.so.2")
1073 self.path("libfreetype.so.6") 1074 ##self.path("libfontconfig.so.1")
1075 ##self.path("libfreetype.so.6")
1074# self.path("libgdk_pixbuf-2.0.so.0") # use systems gdk pixbufs instead 1076# self.path("libgdk_pixbuf-2.0.so.0") # use systems gdk pixbufs instead
1075 self.path("libgdk-x11-2.0.so.0") 1077 ##self.path("libgdk-x11-2.0.so.0")
1076 self.path("libgtk-x11-2.0.so.0") 1078 ##self.path("libgtk-x11-2.0.so.0")
1077# self.path("libpango-1.0.so.0") # use systems pango instead 1079# self.path("libpango-1.0.so.0") # use systems pango instead
1078# self.path("libpangoft2-1.0.so.0") # Both gdk pixbufs and pango would load systems modules 1080# self.path("libpangoft2-1.0.so.0") # Both gdk pixbufs and pango would load systems modules
1079# self.path("libpangox-1.0.so.0") # and crash if not compatible or present. 1081# self.path("libpangox-1.0.so.0") # and crash if not compatible or present.
1080# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway. 1082# self.path("libpangoxft-1.0.so.0") # So we depend system gdk pixbufs and pango anyway.
1081 self.path("libpixman-1.so.0") 1083 ##self.path("libpixman-1.so.0")
1082 1084
1083 # Gstreamer libs 1085 # Gstreamer libs
1084 self.path("libgstbase-0.10.so.0") 1086 self.path("libgstbase-0.10.so.0")
diff --git a/linden/install.xml b/linden/install.xml
index 601e4b0..4985b69 100755
--- a/linden/install.xml
+++ b/linden/install.xml
@@ -334,9 +334,9 @@
334 <key>linux64</key> 334 <key>linux64</key>
335 <map> 335 <map>
336 <key>md5sum</key> 336 <key>md5sum</key>
337 <string>9738472b94191fae2b0fe3fce8df17b0</string> 337 <string>09be41e3145e1a960e50f2f9ce0a5e7d</string>
338 <key>url</key> 338 <key>url</key>
339 <uri>http://imprudenceviewer.org/download/libs/dbusglib-linux64-20091129.tar.bz2</uri> 339 <uri>http://imprudenceviewer.org/download/libs/dbusglib-linux64-20101007.tar.bz2</uri>
340 </map> 340 </map>
341 </map> 341 </map>
342 </map> 342 </map>
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,