changeset 488:da9ffb48edd8

Linux Framework relocation using rpath.
author janneke <janneke@gnu.org>
date Fri, 30 Dec 2005 08:54:17 +0100
parents 2cbfd0935051
children 902905826f1b
files driver.py specs/framework.py specs/gub.py specs/lilypond.apspec.in xpm-apt.py
diffstat 5 files changed, 57 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/driver.py	Thu Dec 29 13:41:09 2005 +0100
+++ b/driver.py	Fri Dec 30 08:54:17 2005 +0100
@@ -127,6 +127,8 @@
 					   % settings.__dict__)
 		settings.framework_root = ('%(installer_root)s/usr/%(framework_dir)s'
 					   % settings.__dict__)
+		# This works, but better avoid depending on autopackage.
+		# os.environ['APBUILD_PROJECTNAME'] = 'lilypond/framework/0.0.0/usr/lib'
 
 def get_cli_parser ():
 	p = optparse.OptionParser (usage="""driver.py [OPTION]... COMMAND [PACKAGE]...
--- a/specs/framework.py	Thu Dec 29 13:41:09 2005 +0100
+++ b/specs/framework.py	Fri Dec 30 08:54:17 2005 +0100
@@ -378,6 +378,7 @@
 		return LilyPond.configure_command (self) + gub.join_lines ('''
 --enable-static-gxx
 --disable-optimising
+--with-framework-dir=../%(framework_dir)s/usr
 ''')
 
 	def compile_command (self):
@@ -388,21 +389,22 @@
 
 	def install (self):
 		LilyPond.install (self)
+		# handle framework dir in relocate.cc?
+		# self.wrap_framework_program ('lilypond')
 		for i in (
 			'abc2ly',
 			'convert-ly',
 			'etf2ly',
-			'lilypond',
 			'lilypond-book',
 			'lilypond-invoke-editor',
 			'midi2ly',
 			'mup2ly',
 			'musicxml2ly'
 			):
-			self.wrap_framework_program (i)
+			self.wrap_interpreter (i, 'python')
+		self.wrap_interpreter (i, 'guile')
 
 	def wrap_framework_program (self, name):
-		# handle framework dir in relocate.cc?
 		wrapper = name
 		program = '.%(name)s-wrapped' % locals ()
 		self.system ('''
@@ -410,7 +412,7 @@
 ''',
 			     locals ())
 		self.dump ('''#! /bin/sh
-# Not using Python, as python itself might need a relocation wrapper
+# Not using Python/Guile, as those also need a relocation wrapper
 FRAMEWORK_DIR="${FRAMEWORK_DIR-/%(framework_dir)s}"
 if [ ! -d "$FRAMEWORK_DIR" ]; then
     if expr "$0" : '/' > /dev/null 2>&1; then
@@ -433,7 +435,8 @@
 GUILE_LOAD_PATH=$FRAMEWORK_DIR/usr/share/guile/%(guile_version)s:$GUILE_LOAD_PATH \\
 GS_FONTPATH=$FRAMEWORK_DIR/usr/share/ghostscript/%(ghostscript_version)s/fonts:$GS_FONTPATH \\
 GS_LIB=$FRAMEWORK_DIR/usr/share/ghostscript/%(ghostscript_version)s/lib:$GS_LIB \\
-LD_LIBRARY_PATH=$FRAMEWORK_DIR/usr/lib:$LD_LIBRARY_PATH \\
+USING_RPATH_LD_LIBRARY_PATH=$FRAMEWORK_DIR/usr/lib:$LD_LIBRARY_PATH \\
+LD_LIBRARY_PATH= \\
 LILYPONDPREFIX=$prefix/share/lilypond/%(version)s/ \\
 PANGO_PREFIX=${PANGO_PREFIX-$FRAMEWORK_DIR/usr} \\
 PANGO_RC_FILE=${PANGO_RC_FILE-$FRAMEWORK_DIR/usr/etc/pango/pangorc} \\
@@ -449,6 +452,46 @@
 		os.chmod (self.expand ('%(install_root)s/usr/bin/%(name)s',
 				       locals ()), 0755)
 
+	def wrap_interpreter (self, name, interpreter):
+		wrapper = name
+		program = '.%(name)s-wrapped' % locals ()
+		self.system ('''
+cd %(install_root)s/usr/bin && mv %(wrapper)s %(program)s
+''',
+			     locals ())
+		self.dump ('''#! /bin/sh
+FRAMEWORK_DIR="${FRAMEWORK_DIR-/%(framework_dir)s}"
+if [ ! -d "$FRAMEWORK_DIR" ]; then
+    if expr "$0" : '/' > /dev/null 2>&1; then
+        bindir=$(cd $(dirname $0); pwd)
+    elif [ "$(basename $0)" != "$0" ]; then
+        bindir=$PWD/$(dirname $0)
+    else
+        (IFS=:; for d in $PATH; do
+	    if [ -x $d/%(program)s ]; then
+	        bindir=$d
+	        break
+	    fi
+	done)
+	bindir=/usr/bin
+    fi
+    prefix=$(dirname $bindir)
+    FRAMEWORK_DIR="$prefix/%(framework_dir)s"
+fi
+GUILE_LOAD_PATH=$FRAMEWORK_DIR/usr/share/guile/%(guile_version)s:$GUILE_LOAD_PATH \\
+LD_LIBRARY_PATH=$FRAMEWORK_DIR/usr/lib:$LD_LIBRARY_PATH \\
+LILYPONDPREFIX=$prefix/share/lilypond/%(bundle_version)s/ \\
+PATH=$FRAMEWORK_DIR/usr/bin:$PATH \\
+PYTHONPATH=$FRAMEWORK_DIR/../python:$PYTHONPATH \\
+PYTHONPATH=$FRAMEWORK_DIR/usr/lib/python%(python_version)s:$PYTHONPATH \\
+%(interpreter)s %(program)s "$@"
+'''
+,
+		'%(install_root)s/usr/bin/%(name)s',
+		env=locals ())
+		os.chmod (self.expand ('%(install_root)s/usr/bin/%(name)s',
+				       locals ()), 0755)
+
 class LilyPond__darwin (LilyPond):
 	def __init__ (self, settings):
 		LilyPond.__init__ (self, settings)
--- a/specs/gub.py	Thu Dec 29 13:41:09 2005 +0100
+++ b/specs/gub.py	Fri Dec 30 08:54:17 2005 +0100
@@ -435,7 +435,11 @@
 			dict['CXX'] = self.settings.gxx
 		if self.settings.__dict__.has_key ('ld'):
 			dict['LD'] = self.settings.ld
-
+		if self.settings.platform.startswith ('linux'):
+			# Moved to lilypond/configure.in
+#			# FIXME: what happens when LD="ld $(LDFLAGS)"?
+			#dict['LDFLAGS'] = """-Wl,--rpath,'${ORIGIN}/../%(framework_dir)s/usr/lib'"""
+			dict['LDFLAGS'] = '-Wl,--as-needed'
 		dict.update (env)
 		return dict
 
--- a/specs/lilypond.apspec.in	Thu Dec 29 13:41:09 2005 +0100
+++ b/specs/lilypond.apspec.in	Fri Dec 30 08:54:17 2005 +0100
@@ -31,7 +31,7 @@
 rm share/lilypond/@VERSION@/dvips/ps
 rm share/lilypond/@VERSION@/dvips/map
 
-rm bin/.fonts.cache-1
+rm bin/fonts.cache-1
 
 
 echo '*' | import
--- a/xpm-apt.py	Thu Dec 29 13:41:09 2005 +0100
+++ b/xpm-apt.py	Fri Dec 30 08:54:17 2005 +0100
@@ -220,6 +220,7 @@
 		#URG
 		import buildnumber
 		settings.build_number_db = buildnumber.Build_number_db (settings.topdir)
+		settings.framework_dir = 'FUBAR'
 
 	tool_manager, target_manager = xpm.get_managers (settings)