From 89d91900e92074780acaadc4361b2d99c8ec0ac3 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Fri, 30 Dec 2005 08:58:34 +0000 Subject: [PATCH] * lily/relocate.cc (framework_relocation): New function, factored from set_relocation (). (prefix_relocation): Rename from set_relocation (). (setup_paths): Use it. --- ChangeLog | 7 +++++++ config.hh.in | 3 +++ config.make.in | 1 - configure.in | 13 ++++++++++++ lily/relocate.cc | 54 ++++++++++++++++++++++++++++++++++-------------- 5 files changed, 61 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index a3859217cd..4f05fcde60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-12-29 Jan Nieuwenhuizen + + * lily/relocate.cc (framework_relocation): New function, + factored from set_relocation (). + (prefix_relocation): Rename from set_relocation (). + (setup_paths): Use it. + 2005-12-30 Han-Wen Nienhuys * scm/*.scm: use LEFT/RIGHT/UP/DOWN etc. iso. magical numbers. diff --git a/config.hh.in b/config.hh.in index 2d972e65af..19ba1403d6 100644 --- a/config.hh.in +++ b/config.hh.in @@ -10,6 +10,9 @@ /* dynamic relocation? */ #define ARGV0_RELOCATION 0 +/* framework prefix, usually ".." */ +#define FRAMEWORKDIR "@FRAMEWORKDIR@" + /* default lilypond locale dir */ #define LOCALEDIR "@LOCALEDIR@" diff --git a/config.make.in b/config.make.in index 9ff945e856..3d4295fbc7 100644 --- a/config.make.in +++ b/config.make.in @@ -118,7 +118,6 @@ PERL = @PERL@ PLATFORM_WINDOWS = @PLATFORM_WINDOWS@ PYTHON = @PYTHON@ RANLIB = @RANLIB@ -RANLIB = @RANLIB@ ROOTSEP = @ROOTSEP@ SHELL = @SHELL@ SPLITTING_MAKEINFO = @SPLITTING_MAKEINFO@ diff --git a/configure.in b/configure.in index 0c4041fdfa..46b6feeb90 100644 --- a/configure.in +++ b/configure.in @@ -38,6 +38,19 @@ AC_ARG_ENABLE(relocation, [ --enable-relocation compile with dynamic relocation. Default: off], [reloc_b=$enableval]) +FRAMEWORKDIR=".." +AC_ARG_WITH(framework-dir, + [ --with-framework-dir=DIR + relative the optional framework directory],[ + if test "$withval" = "yes" -o "$withval" = "no"; then + AC_MSG_WARN(Usage: --with-framework-dir=../lib/FRAMEWORK/DIR) + else + FRAMEWORKDIR="${withval}" + LDFLAGS="$LDFLAGS -Wl,--rpath,'\$\${ORIGIN}/$FRAMEWORKDIR/lib'" + fi + ]) +AC_DEFINE_UNQUOTED(FRAMEWORKDIR, ["${FRAMEWORKDIR}"]) + LINK_GXX_STATICALLY=no AC_ARG_ENABLE(static-gxx, [ --enable-static-gxx link libstdc++.a statically. Default: off], diff --git a/lily/relocate.cc b/lily/relocate.cc index 0ca4762ead..753557dc0b 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -83,6 +83,9 @@ dir_name (String const file_name) { String s = file_name; s.substitute ('\\', '/'); + int n = s.length (); + if (n && s[n - 1] == '/') + s[n - 1] = 0; s = s.left_string (s.index_last ('/')); return s; } @@ -92,17 +95,16 @@ dir_name (String const file_name) #endif void -set_relocation (String bindir, String prefix) +prefix_relocation (String prefix) { if (be_verbose_global) warning (_f ("Relocation: compile prefix=%s, new prefix=%s", prefix_directory, prefix.to_str0 ())); + String bindir = prefix + "/bin"; String datadir = prefix + "/share"; - String libdir = prefix + "/lib"; String localedir = datadir + "/locale"; - String sysconfdir = prefix + "/etc"; String lilypond_datadir = datadir + "/lilypond/" TOPLEVEL_VERSION; if (is_dir (lilypond_datadir)) @@ -113,8 +115,26 @@ set_relocation (String bindir, String prefix) bindtextdomain ("lilypond", localedir.to_str0 ()); #endif + prepend_env_path ("PATH", bindir); +} + +void +framework_relocation (String prefix) +{ + if (be_verbose_global) + warning (_f ("Relocation: framework_prefix=%s", prefix)); + + String bindir = prefix + "/bin"; + String datadir = prefix + "/share"; + String libdir = prefix + "/lib"; + String sysconfdir = prefix + "/etc"; + + /* need otherwise dynamic .so's aren't found. */ + prepend_env_path ("DYLD_LIBRARY_PATH", libdir); set_env_file ("FONTCONFIG_FILE", sysconfdir + "/fonts/fonts.conf"); + set_env_dir ("FONTCONFIG_PATH", sysconfdir + "/fonts"); + #ifdef __MINGW32__ char font_dir[PATH_MAX]; ExpandEnvironmentStrings ("%windir%/fonts", font_dir, sizeof (font_dir)); @@ -130,17 +150,13 @@ set_relocation (String bindir, String prefix) prepend_env_path ("GS_LIB", datadir + "/gs/Resource"); prepend_env_path ("GS_LIB", datadir + "/gs/lib"); - /* need otherwise dynamic .so's aren't found. */ - prepend_env_path ("DYLD_LIBRARY_PATH", libdir); - prepend_env_path ("GUILE_LOAD_PATH", datadir + to_string ("/guile/%d.%d", SCM_MAJOR_VERSION, SCM_MINOR_VERSION)); - set_env_file ("PANGO_RC_FILE", sysconfdir + "/pango/pangorc"); + set_env_file ("PANGO_RC_FILE", sysconfdir + "/pango/pangorc"); set_env_dir ("PANGO_PREFIX", prefix); - set_env_dir ("FONTCONFIG_PATH", sysconfdir + "/fonts"); - + prepend_env_path ("PATH", bindir); } @@ -163,10 +179,13 @@ setup_paths (char const *argv0_ptr) && getenv ("LILYPOND_RELOCATE_PREFIX")) { String prefix = getenv ("LILYPOND_RELOCATE_PREFIX"); - /* - fixme: need different sep for mingw? - */ - set_relocation (prefix + "/" + "bin", prefix); +#ifdef __MINGW32__ + /* Normalize file name. */ + prefix = File_name (prefix).to_string ().get_copy_str0 (); +#endif /* __MINGW32__ */ + prefix_relocation (prefix); + String bindir = prefix + "/bin"; + framework_relocation (bindir + "/" FRAMEWORKDIR); } else if (relocate_binary) { @@ -192,11 +211,14 @@ setup_paths (char const *argv0_ptr) if (argv0_abs.is_empty ()) programming_error ("can't find absolute argv0."); } - + String bindir = dir_name (argv0_abs); String argv0_prefix = dir_name (bindir); - if (argv0_prefix != dir_name (dir_name (dir_name (prefix_directory)))) - set_relocation (bindir, argv0_prefix); + String compile_prefix = dir_name (dir_name (dir_name (prefix_directory))); + if (argv0_prefix != compile_prefix) + prefix_relocation (argv0_prefix); + if (argv0_prefix != compile_prefix || String (FRAMEWORKDIR) != "..") + framework_relocation (bindir + "/" FRAMEWORKDIR); } /* FIXME: use LILYPOND_DATADIR. */ -- 2.39.2