diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-11-04 02:40:07 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-11-04 02:40:07 +0000 |
commit | 3903bc0cb2764020ae7beab9f06f9b6ada6721a4 (patch) | |
tree | 37068129164d0ff2bda2b211283185b0369bdeba /gtk2_ardour/main.cc | |
parent | 1fb74e6818c6f19f27ef36ab351da36c0e5b0e26 (diff) |
merge linux bundle fixup code from 2.X
git-svn-id: svn://localhost/ardour2/branches/3.0@7961 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/main.cc')
-rw-r--r-- | gtk2_ardour/main.cc | 155 |
1 files changed, 154 insertions, 1 deletions
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index 1ea0158ac7..3862a30f60 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -19,6 +19,8 @@ #include <cstdlib> #include <signal.h> +#include <cerrno> +#include <fstream> #include <sigc++/bind.h> #include <gtkmm/settings.h> @@ -99,7 +101,6 @@ Please consider the possibilities, and perhaps (re)start JACK.")); #include <mach-o/dyld.h> #include <sys/param.h> -#include <fstream> extern void set_language_preference (); // cocoacarbon.mm @@ -299,6 +300,158 @@ fixup_bundle_environment () } } +#else + +void +fixup_bundle_environment (int argc, char* argv[]) +{ + if (!getenv ("ARDOUR_BUNDLED")) { + return; + } + + Glib::ustring exec_path = argv[0]; + Glib::ustring dir_path = Glib::path_get_dirname (Glib::path_get_dirname (exec_path)); + Glib::ustring path; + const char *cstr = getenv ("PATH"); + Glib::ustring userconfigdir = user_config_directory().to_string(); + + /* ensure that we find any bundled executables (e.g. JACK), + and find them before any instances of the same name + elsewhere in PATH + */ + + /* note that this function is POSIX/Linux specific, so using / as + a dir separator in this context is just fine. + */ + + path = dir_path; + path += "/etc:"; + path += dir_path; + path += "/lib/surfaces:"; + path += dir_path; + path += "/lib/panners:"; + + setenv ("ARDOUR_MODULE_PATH", path.c_str(), 1); + + path = userconfigdir; + path += ':'; + path += dir_path; + path += "/etc/icons:"; + path += dir_path; + path += "/etc/pixmaps:"; + path += dir_path; + path += "/share:"; + path += dir_path; + path += "/etc"; + + setenv ("ARDOUR_PATH", path.c_str(), 1); + setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1); + setenv ("ARDOUR_DATA_PATH", path.c_str(), 1); + + path = dir_path; + path += "/etc"; + setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1); + + cstr = getenv ("LADSPA_PATH"); + if (cstr) { + path = cstr; + path += ':'; + } else { + path = ""; + } + path += dir_path; + path += "/lib/plugins"; + + setenv ("LADSPA_PATH", path.c_str(), 1); + + cstr = getenv ("VAMP_PATH"); + if (cstr) { + path = cstr; + path += ':'; + } else { + path = ""; + } + path += dir_path; + path += "/lib"; + + setenv ("VAMP_PATH", path.c_str(), 1); + + cstr = getenv ("ARDOUR_CONTROL_SURFACE_PATH"); + if (cstr) { + path = cstr; + path += ':'; + } else { + path = ""; + } + path += dir_path; + path += "/lib/surfaces"; + + setenv ("ARDOUR_CONTROL_SURFACE_PATH", path.c_str(), 1); + + cstr = getenv ("LV2_PATH"); + if (cstr) { + path = cstr; + path += ':'; + } else { + path = ""; + } + path += dir_path; + path += "/lib/plugins"; + + setenv ("LV2_PATH", path.c_str(), 1); + + path = dir_path; + path += "/lib/clearlooks"; + + setenv ("GTK_PATH", path.c_str(), 1); + + if (!ARDOUR::translations_are_disabled ()) { + path = dir_path; + path += "/share/locale"; + + localedir = strdup (path.c_str()); + setenv ("GTK_LOCALEDIR", localedir, 1); + } + + /* write a pango.rc file and tell pango to use it. we'd love + to put this into the Ardour.app bundle and leave it there, + but the user may not have write permission. so ... + + we also have to make sure that the user ardour directory + actually exists ... + */ + + if (g_mkdir_with_parents (userconfigdir.c_str(), 0755) < 0) { + error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno)) + << endmsg; + } else { + + Glib::ustring mpath; + + path = Glib::build_filename (userconfigdir, "pango.rc"); + + std::ofstream pangorc (path.c_str()); + if (!pangorc) { + error << string_compose (_("cannot open pango.rc file %1") , path) << endmsg; + } else { + mpath = Glib::build_filename (userconfigdir, "pango.modules"); + + pangorc << "[Pango]\nModuleFiles="; + pangorc << mpath << endl; + pangorc.close (); + } + + setenv ("PANGO_RC_FILE", path.c_str(), 1); + + /* similar for GDK pixbuf loaders, but there's no RC file required + to specify where it lives. + */ + + mpath = Glib::build_filename (userconfigdir, "gdk-pixbuf.loaders"); + setenv ("GDK_PIXBUF_MODULE_FILE", mpath.c_str(), 1); + } +} + #endif static gboolean |