From fb7c03d8cd15994100e3a55516d349db6fa2949b Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Sat, 23 Sep 2006 10:43:18 +0000 Subject: [PATCH] Fix #357310 Original commit message from CVS: * Makefile.am: * gst/__init__.py: * gstltihooks.py: Fix #357310 --- ChangeLog | 7 +++++ Makefile.am | 2 +- gst/__init__.py | 18 ++++++------- gstltihooks.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 10 deletions(-) create mode 100644 gstltihooks.py diff --git a/ChangeLog b/ChangeLog index 356d863424..6208e9d7c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-09-23 Thomas Vander Stichele + + * Makefile.am: + * gst/__init__.py: + * gstltihooks.py: + Fix #357310 + 2006-09-22 Edward Hervey Patch by: Rene Stadler diff --git a/Makefile.am b/Makefile.am index 9681a9e026..a1dcc78d48 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,7 +1,7 @@ SUBDIRS = codegen gst examples testsuite pkgconfig EXTRA_DIST = \ - ltihooks.py \ + gstltihooks.py \ pygst.py.in \ gst-python.spec.in \ gst-python.spec \ diff --git a/gst/__init__.py b/gst/__init__.py index a6104a3317..8bba5be575 100644 --- a/gst/__init__.py +++ b/gst/__init__.py @@ -21,10 +21,10 @@ # # Author: David I. Lehn -__ltihooks_used__ = False +__gstltihooks_used__ = False try: - import ltihooks - __ltihooks_used__ = True + import gstltihooks + __gstltihooks_used__ = True except: pass @@ -116,11 +116,11 @@ del sys # this restores previously installed importhooks, so we don't interfere # with other people's module importers # it also clears out the module completely as if it were never loaded, -# so that if anyone else imports ltihooks the hooks get installed -if __ltihooks_used__: - ltihooks.uninstall() - __ltihooks_used__ = False - del ltihooks +# so that if anyone else imports gstltihooks the hooks get installed +if __gstltihooks_used__: + gstltihooks.uninstall() + __gstltihooks_used__ = False + del gstltihooks import sys - del sys.modules['ltihooks'] + del sys.modules['gstltihooks'] diff --git a/gstltihooks.py b/gstltihooks.py new file mode 100644 index 0000000000..2ef7aa0ed7 --- /dev/null +++ b/gstltihooks.py @@ -0,0 +1,71 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +# ltihooks.py: python import hooks that understand libtool libraries. +# Copyright (C) 2000 James Henstridge. +# renamed to gstltihooks.py so it does not accidentally get imported by +# an installed copy of gtk +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import os, ihooks + +class LibtoolHooks(ihooks.Hooks): + def get_suffixes(self): + """Like normal get_suffixes, but adds .la suffixes to list""" + ret = ihooks.Hooks.get_suffixes(self) + ret.insert(0, ('module.la', 'rb', 3)) + ret.insert(0, ('.la', 'rb', 3)) + return ret + + def load_dynamic(self, name, filename, file=None): + """Like normal load_dynamic, but treat .la files specially""" + if len(filename) > 3 and filename[-3:] == '.la': + fp = open(filename, 'r') + dlname = '' + installed = 1 + line = fp.readline() + while line: + # dlname: the name that we can dlopen + if len(line) > 7 and line[:7] == 'dlname=': + dlname = line[8:-2] + # installed: whether it's already installed + elif len(line) > 10 and line[:10] == 'installed=': + installed = line[10:-1] == 'yes' + line = fp.readline() + fp.close() + if dlname: + if installed: + filename = os.path.join(os.path.dirname(filename), + dlname) + else: + # if .libs already there, don't need to add it again + if os.path.dirname(filename).endswith('.libs'): + filename = os.path.join(os.path.dirname(filename), + dlname) + else: + filename = os.path.join(os.path.dirname(filename), + '.libs', dlname) + return ihooks.Hooks.load_dynamic(self, name, filename, file) + +importer = ihooks.ModuleImporter() +importer.set_hooks(LibtoolHooks()) + +def install(): + importer.install() +def uninstall(): + importer.uninstall() + +install()