From 3b5cc5a9fdd6b741f2cda857875fd953a4e87b31 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 2 Mar 2014 11:30:51 -0500 Subject: move fixup_bundle_environment() code into per-platform files --- gtk2_ardour/bundle_env.h | 35 ++++++ gtk2_ardour/bundle_env_cocoa.cc | 172 +++++++++++++++++++++++++ gtk2_ardour/bundle_env_linux.cc | 170 +++++++++++++++++++++++++ gtk2_ardour/bundle_env_mingw.cc | 30 +++++ gtk2_ardour/main.cc | 273 +--------------------------------------- gtk2_ardour/wscript | 7 +- 6 files changed, 415 insertions(+), 272 deletions(-) create mode 100644 gtk2_ardour/bundle_env.h create mode 100644 gtk2_ardour/bundle_env_cocoa.cc create mode 100644 gtk2_ardour/bundle_env_linux.cc create mode 100644 gtk2_ardour/bundle_env_mingw.cc (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/bundle_env.h b/gtk2_ardour/bundle_env.h new file mode 100644 index 0000000000..3a2ca4c54d --- /dev/null +++ b/gtk2_ardour/bundle_env.h @@ -0,0 +1,35 @@ +/* + Copyright (C) 2001-2012 Paul Davis + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __gtk2_ardour_bundle_env_h__ +#define __gtk2_ardour_bundle_env_h__ + +/** This function must do whatever is necessary to create the right runtime + * environment for the GTK2 version of ardour, on a per-platform basis. + */ + +void fixup_bundle_environment (int, char* [], const char** localedir); + +/** Load any fonts required by the GTK2 version of ardour, on a per-platform + * basis. + */ + +void load_custom_fonts(); + +#endif /* __gtk2_ardour_bundle_env_h__ */ diff --git a/gtk2_ardour/bundle_env_cocoa.cc b/gtk2_ardour/bundle_env_cocoa.cc new file mode 100644 index 0000000000..3b3094e7f3 --- /dev/null +++ b/gtk2_ardour/bundle_env_cocoa.cc @@ -0,0 +1,172 @@ +/* + Copyright (C) 2001-2012 Paul Davis + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "ardour/ardour.h" +#include "ardour/filesystem_paths.h" + +#include "pbd/epa.h" +#include "pbd/search_path.h" +#include "pbd/pathexpand.h" +#include "pbd/file_utils.h" + +#include "bundle_env.h" + +#include "i18n.h" + +#include +#include +#include + +using namespace PBD; +using namespace ARDOUR; +using namespace std; + +extern void set_language_preference (); // cocoacarbon.mm + +void +fixup_bundle_environment (int, char* [], const char** localedir) +{ + if (!g_getenv ("ARDOUR_BUNDLED")) { + return; + } + + EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV")); + + set_language_preference (); + + char execpath[MAXPATHLEN+1]; + uint32_t pathsz = sizeof (execpath); + + _NSGetExecutablePath (execpath, &pathsz); + + std::string path; + std::string exec_dir = Glib::path_get_dirname (execpath); + std::string bundle_dir; + std::string userconfigdir = user_config_directory(); + + bundle_dir = Glib::path_get_dirname (exec_dir); + +#ifdef ENABLE_NLS + if (!ARDOUR::translations_are_enabled ()) { + (*localedir) = "/this/cannot/exist"; + } else { + /* force localedir into the bundle */ + + vector lpath; + lpath.push_back (bundle_dir); + lpath.push_back ("Resources"); + lpath.push_back ("locale"); + (*localedir) = strdup (Glib::build_filename (lpath).c_str()); + } +#endif + + export_search_path (bundle_dir, "ARDOUR_DLL_PATH", "/lib"); + + /* inside an OS X .app bundle, there is no difference + between DATA and CONFIG locations, since OS X doesn't + attempt to do anything to expose the notion of + machine-independent shared data. + */ + + export_search_path (bundle_dir, "ARDOUR_DATA_PATH", "/Resources"); + export_search_path (bundle_dir, "ARDOUR_CONFIG_PATH", "/Resources"); + export_search_path (bundle_dir, "ARDOUR_INSTANT_XML_PATH", "/Resources"); + export_search_path (bundle_dir, "LADSPA_PATH", "/Plugins"); + export_search_path (bundle_dir, "VAMP_PATH", "/lib"); + export_search_path (bundle_dir, "GTK_PATH", "/lib/gtkengines"); + + g_setenv ("SUIL_MODULE_DIR", (bundle_dir + "/lib").c_str(), 1); + g_setenv ("PATH", (bundle_dir + "/MacOS:" + std::string(g_getenv ("PATH"))).c_str(), 1); + + /* unset GTK_RC_FILES so that we only load the RC files that we define + */ + + g_unsetenv ("GTK_RC_FILES"); + + /* write a pango.rc file and tell pango to use it. we'd love + to put this into the PROGRAM_NAME.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 %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME) + << endmsg; + } else { + + 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 { + pangorc << "[Pango]\nModuleFiles=" + << Glib::build_filename (bundle_dir, "Resources/pango.modules") + << endl; + pangorc.close (); + + g_setenv ("PANGO_RC_FILE", path.c_str(), 1); + } + } + + g_setenv ("CHARSETALIASDIR", bundle_dir.c_str(), 1); + g_setenv ("FONTCONFIG_FILE", Glib::build_filename (bundle_dir, "Resources/fonts.conf").c_str(), 1); + g_setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (bundle_dir, "Resources/gdk-pixbuf.loaders").c_str(), 1); +} + +void load_custom_fonts() +{ + /* this code will only compile on OS X 10.6 and above, and we currently do not + * need it for earlier versions since we fall back on a non-monospace, + * non-custom font. + */ + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 + std::string ardour_mono_file; + + if (!find_file_in_search_path (ardour_data_search_path(), "ArdourMono.ttf", ardour_mono_file)) { + cerr << _("Cannot find ArdourMono TrueType font") << endl; + } + + CFStringRef ttf; + CFURLRef fontURL; + CFErrorRef error; + ttf = CFStringCreateWithBytes( + kCFAllocatorDefault, (UInt8*) ardour_mono_file.c_str(), + ardour_mono_file.length(), + kCFStringEncodingUTF8, FALSE); + fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, ttf, kCFURLPOSIXPathStyle, TRUE); + if (CTFontManagerRegisterFontsForURL(fontURL, kCTFontManagerScopeProcess, &error) != true) { + cerr << _("Cannot load ArdourMono TrueType font.") << endl; + } +#endif +} diff --git a/gtk2_ardour/bundle_env_linux.cc b/gtk2_ardour/bundle_env_linux.cc new file mode 100644 index 0000000000..2956decef5 --- /dev/null +++ b/gtk2_ardour/bundle_env_linux.cc @@ -0,0 +1,170 @@ +/* + Copyright (C) 2001-2012 Paul Davis + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "ardour/ardour.h" +#include "ardour/filesystem_paths.h" + +#include "pbd/epa.h" +#include "pbd/search_path.h" +#include "pbd/pathexpand.h" +#include "pbd/file_utils.h" + +#include "bundle_env.h" + +#include "i18n.h" + +using namespace PBD; +using namespace ARDOUR; +using namespace std; + +void +fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir) +{ + /* THIS IS FOR LINUX - its just about the only place where its + * acceptable to build paths directly using '/'. + */ + + if (!g_getenv ("ARDOUR_BUNDLED")) { + return; + } + + EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV")); + + std::string path; + std::string dir_path = Glib::path_get_dirname (Glib::path_get_dirname (argv[0])); + std::string userconfigdir = user_config_directory(); + +#ifdef ENABLE_NLS + if (!ARDOUR::translations_are_enabled ()) { + (*localedir) = "/this/cannot/exist"; + } else { + /* force localedir into the bundle */ + vector lpath; + lpath.push_back (dir_path); + lpath.push_back ("share"); + lpath.push_back ("locale"); + (*localedir) = canonical_path (Glib::build_filename (lpath)).c_str(); + } +#endif + + /* note that this function is POSIX/Linux specific, so using / as + a dir separator in this context is just fine. + */ + + export_search_path (dir_path, "ARDOUR_DLL_PATH", "/lib"); + export_search_path (dir_path, "ARDOUR_CONFIG_PATH", "/etc"); + export_search_path (dir_path, "ARDOUR_INSTANT_XML_PATH", "/share"); + export_search_path (dir_path, "ARDOUR_DATA_PATH", "/share"); + export_search_path (dir_path, "LADSPA_PATH", "/plugins"); + export_search_path (dir_path, "VAMP_PATH", "/lib"); + export_search_path (dir_path, "GTK_PATH", "/lib/gtkengines"); + + g_setenv ("SUIL_MODULE_DIR", (dir_path + "/lib").c_str(), 1); + g_setenv ("PATH", (dir_path + "/bin:" + std::string(g_getenv ("PATH"))).c_str(), 1); + + /* unset GTK_RC_FILES so that we only load the RC files that we define + */ + + g_unsetenv ("GTK_RC_FILES"); + + /* Tell fontconfig where to find fonts.conf. Use the system version + if it exists, otherwise use the stuff we included in the bundle + */ + + if (Glib::file_test ("/etc/fonts/fonts.conf", Glib::FILE_TEST_EXISTS)) { + g_setenv ("FONTCONFIG_FILE", "/etc/fonts/fonts.conf", 1); + g_setenv ("FONTCONFIG_PATH", "/etc/fonts", 1); + } else { + error << _("No fontconfig file found on your system. Things may looked very odd or ugly") << endmsg; + } + + /* 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 %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME) + << endmsg; + } else { + + 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 { + pangorc << "[Pango]\nModuleFiles=" + << Glib::build_filename (userconfigdir, "pango.modules") + << endl; + pangorc.close (); + } + + g_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. + */ + + g_setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (userconfigdir, "gdk-pixbuf.loaders").c_str(), 1); + } + + /* this doesn't do much but setting it should prevent various parts of the GTK/GNU stack + from looking outside the bundle to find the charset.alias file. + */ + g_setenv ("CHARSETALIASDIR", dir_path.c_str(), 1); + +} + +void +load_custom_fonts() +{ + std::string ardour_mono_file; + + if (!find_file_in_search_path (ardour_data_search_path(), "ArdourMono.ttf", ardour_mono_file)) { + cerr << _("Cannot find ArdourMono TrueType font") << endl; + } + + FcConfig *config = FcInitLoadConfigAndFonts(); + FcBool ret = FcConfigAppFontAddFile(config, reinterpret_cast(ardour_mono_file.c_str())); + + if (ret == FcFalse) { + cerr << _("Cannot load ArdourMono TrueType font.") << endl; + } + + ret = FcConfigSetCurrent(config); + + if (ret == FcFalse) { + cerr << _("Failed to set fontconfig configuration.") << endl; + } +} diff --git a/gtk2_ardour/bundle_env_mingw.cc b/gtk2_ardour/bundle_env_mingw.cc new file mode 100644 index 0000000000..bf0acb8871 --- /dev/null +++ b/gtk2_ardour/bundle_env_mingw.cc @@ -0,0 +1,30 @@ +/* + Copyright (C) 2001-2012 Paul Davis + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "bundle_env.h" + +void +fixup_bundle_environment (int, char* [], const char** localedir) +{ + /* what to do ? */ +} + +void load_custom_fonts() +{ +} diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc index d212edef92..bb9fabb6bb 100644 --- a/gtk2_ardour/main.cc +++ b/gtk2_ardour/main.cc @@ -27,7 +27,6 @@ #include #include "pbd/error.h" -#include "pbd/epa.h" #include "pbd/file_utils.h" #include "pbd/textreceiver.h" #include "pbd/failed_constructor.h" @@ -49,19 +48,15 @@ #include #include -#include - #include "version.h" #include "utils.h" #include "ardour_ui.h" #include "opts.h" #include "enums.h" +#include "bundle_env.h" #include "i18n.h" -#ifdef __APPLE__ -#include -#endif using namespace std; using namespace Gtk; @@ -99,270 +94,6 @@ gui_jack_error () win.run (); } -static void export_search_path (const string& base_dir, const char* varname, const char* dir) -{ - string path; - const char * cstr = g_getenv (varname); - - if (cstr) { - path = cstr; - path += ':'; - } else { - path = ""; - } - path += base_dir; - path += dir; - - g_setenv (varname, path.c_str(), 1); -} - -#ifdef __APPLE__ - -#include -#include - -extern void set_language_preference (); // cocoacarbon.mm - -void -fixup_bundle_environment (int, char* []) -{ - if (!g_getenv ("ARDOUR_BUNDLED")) { - return; - } - - EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV")); - - set_language_preference (); - - char execpath[MAXPATHLEN+1]; - uint32_t pathsz = sizeof (execpath); - - _NSGetExecutablePath (execpath, &pathsz); - - std::string path; - std::string exec_dir = Glib::path_get_dirname (execpath); - std::string bundle_dir; - std::string userconfigdir = user_config_directory(); - - bundle_dir = Glib::path_get_dirname (exec_dir); - -#ifdef ENABLE_NLS - if (!ARDOUR::translations_are_enabled ()) { - localedir = "/this/cannot/exist"; - } else { - /* force localedir into the bundle */ - - vector lpath; - lpath.push_back (bundle_dir); - lpath.push_back ("Resources"); - lpath.push_back ("locale"); - localedir = strdup (Glib::build_filename (lpath).c_str()); - } -#endif - - export_search_path (bundle_dir, "ARDOUR_DLL_PATH", "/lib"); - - /* inside an OS X .app bundle, there is no difference - between DATA and CONFIG locations, since OS X doesn't - attempt to do anything to expose the notion of - machine-independent shared data. - */ - - export_search_path (bundle_dir, "ARDOUR_DATA_PATH", "/Resources"); - export_search_path (bundle_dir, "ARDOUR_CONFIG_PATH", "/Resources"); - export_search_path (bundle_dir, "ARDOUR_INSTANT_XML_PATH", "/Resources"); - export_search_path (bundle_dir, "LADSPA_PATH", "/Plugins"); - export_search_path (bundle_dir, "VAMP_PATH", "/lib"); - export_search_path (bundle_dir, "GTK_PATH", "/lib/gtkengines"); - - g_setenv ("SUIL_MODULE_DIR", (bundle_dir + "/lib").c_str(), 1); - g_setenv ("PATH", (bundle_dir + "/MacOS:" + std::string(g_getenv ("PATH"))).c_str(), 1); - - /* unset GTK_RC_FILES so that we only load the RC files that we define - */ - - g_unsetenv ("GTK_RC_FILES"); - - /* write a pango.rc file and tell pango to use it. we'd love - to put this into the PROGRAM_NAME.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 %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME) - << endmsg; - } else { - - 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 { - pangorc << "[Pango]\nModuleFiles=" - << Glib::build_filename (bundle_dir, "Resources/pango.modules") - << endl; - pangorc.close (); - - g_setenv ("PANGO_RC_FILE", path.c_str(), 1); - } - } - - g_setenv ("CHARSETALIASDIR", bundle_dir.c_str(), 1); - g_setenv ("FONTCONFIG_FILE", Glib::build_filename (bundle_dir, "Resources/fonts.conf").c_str(), 1); - g_setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (bundle_dir, "Resources/gdk-pixbuf.loaders").c_str(), 1); -} - -static void load_custom_fonts() { -/* this code will only compile on OS X 10.6 and above, and we currently do not - * need it for earlier versions since we fall back on a non-monospace, - * non-custom font. - */ -#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 - std::string ardour_mono_file; - - if (!find_file_in_search_path (ardour_data_search_path(), "ArdourMono.ttf", ardour_mono_file)) { - cerr << _("Cannot find ArdourMono TrueType font") << endl; - } - - CFStringRef ttf; - CFURLRef fontURL; - CFErrorRef error; - ttf = CFStringCreateWithBytes( - kCFAllocatorDefault, (UInt8*) ardour_mono_file.c_str(), - ardour_mono_file.length(), - kCFStringEncodingUTF8, FALSE); - fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, ttf, kCFURLPOSIXPathStyle, TRUE); - if (CTFontManagerRegisterFontsForURL(fontURL, kCTFontManagerScopeProcess, &error) != true) { - cerr << _("Cannot load ArdourMono TrueType font.") << endl; - } -#endif -} - -#else - -void -fixup_bundle_environment (int /*argc*/, char* argv[]) -{ - /* THIS IS FOR LINUX - its just about the only place where its - * acceptable to build paths directly using '/'. - */ - - if (!g_getenv ("ARDOUR_BUNDLED")) { - return; - } - - EnvironmentalProtectionAgency::set_global_epa (new EnvironmentalProtectionAgency (true, "PREBUNDLE_ENV")); - - std::string path; - std::string dir_path = Glib::path_get_dirname (Glib::path_get_dirname (argv[0])); - std::string userconfigdir = user_config_directory(); - -#ifdef ENABLE_NLS - if (!ARDOUR::translations_are_enabled ()) { - localedir = "/this/cannot/exist"; - } else { - /* force localedir into the bundle */ - vector lpath; - lpath.push_back (dir_path); - lpath.push_back ("share"); - lpath.push_back ("locale"); - localedir = canonical_path (Glib::build_filename (lpath)).c_str(); - } -#endif - - /* note that this function is POSIX/Linux specific, so using / as - a dir separator in this context is just fine. - */ - - export_search_path (dir_path, "ARDOUR_DLL_PATH", "/lib"); - export_search_path (dir_path, "ARDOUR_CONFIG_PATH", "/etc"); - export_search_path (dir_path, "ARDOUR_INSTANT_XML_PATH", "/share"); - export_search_path (dir_path, "ARDOUR_DATA_PATH", "/share"); - export_search_path (dir_path, "LADSPA_PATH", "/plugins"); - export_search_path (dir_path, "VAMP_PATH", "/lib"); - export_search_path (dir_path, "GTK_PATH", "/lib/gtkengines"); - - g_setenv ("SUIL_MODULE_DIR", (dir_path + "/lib").c_str(), 1); - g_setenv ("PATH", (dir_path + "/bin:" + std::string(g_getenv ("PATH"))).c_str(), 1); - - /* unset GTK_RC_FILES so that we only load the RC files that we define - */ - - g_unsetenv ("GTK_RC_FILES"); - - /* Tell fontconfig where to find fonts.conf. Use the system version - if it exists, otherwise use the stuff we included in the bundle - */ - - if (Glib::file_test ("/etc/fonts/fonts.conf", Glib::FILE_TEST_EXISTS)) { - g_setenv ("FONTCONFIG_FILE", "/etc/fonts/fonts.conf", 1); - g_setenv ("FONTCONFIG_PATH", "/etc/fonts", 1); - } else { - error << _("No fontconfig file found on your system. Things may looked very odd or ugly") << endmsg; - } - - /* 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 %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME) - << endmsg; - } else { - - 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 { - pangorc << "[Pango]\nModuleFiles=" - << Glib::build_filename (userconfigdir, "pango.modules") - << endl; - pangorc.close (); - } - - g_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. - */ - - g_setenv ("GDK_PIXBUF_MODULE_FILE", Glib::build_filename (userconfigdir, "gdk-pixbuf.loaders").c_str(), 1); - } - - /* this doesn't do much but setting it should prevent various parts of the GTK/GNU stack - from looking outside the bundle to find the charset.alias file. - */ - g_setenv ("CHARSETALIASDIR", dir_path.c_str(), 1); - -} - -static void load_custom_fonts() { - std::string ardour_mono_file; - if (!find_file_in_search_path (ardour_data_search_path(), "ArdourMono.ttf", ardour_mono_file)) { - cerr << _("Cannot find ArdourMono TrueType font") << endl; - } - - FcConfig *config = FcInitLoadConfigAndFonts(); - FcBool ret = FcConfigAppFontAddFile(config, reinterpret_cast(ardour_mono_file.c_str())); - if (ret == FcFalse) { - cerr << _("Cannot load ArdourMono TrueType font.") << endl; - } - ret = FcConfigSetCurrent(config); - if (ret == FcFalse) { - cerr << _("Failed to set fontconfig configuration.") << endl; - } -} - -#endif - static gboolean tell_about_backend_death (void* /* ignored */) { @@ -421,7 +152,7 @@ int ardour_main (int argc, char *argv[]) int main (int argc, char *argv[]) #endif { - fixup_bundle_environment (argc, argv); + fixup_bundle_environment (argc, argv, &localedir); load_custom_fonts(); /* needs to happend before any gtk and pango init calls */ diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 24349d928d..af25cf4b57 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -439,6 +439,12 @@ def build(bld): if sys.platform == 'darwin': obj.uselib += ' AUDIOUNITS OSX GTKOSX' obj.use += ' libappleutility' + obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ] + elif sys.platform == 'mingw': + obj.source += [ 'bundle_env_mingw.cc' ] + else: + obj.source += [ 'bundle_env_linux.cc' ] + obj.includes += ['../libs'] if bld.env['build_target'] == 'mingw': @@ -470,7 +476,6 @@ def build(bld): if bld.is_defined('HAVE_COREAUDIO'): TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc'] - obj.source += [ 'cocoacarbon.mm' ] obj.use += ' libappleutility ' if bld.is_defined('AUDIOUNIT_SUPPORT'): -- cgit v1.2.3