Fix DSP load sorting with inactive plugins
[ardour.git] / gtk2_ardour / bundle_env_linux.cc
index 2956decef5774b4266e111c91f5af51511d02066..387a9aaae8528edb5f532ae342f92b380fe38891 100644 (file)
@@ -1,23 +1,22 @@
 /*
-    Copyright (C) 2001-2012 Paul Davis
+ * Copyright (C) 2014-2016 Paul Davis <paul@linuxaudiosystems.com>
+ * Copyright (C) 2015-2018 Robin Gareus <robin@gareus.org>
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
 
-    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 <fstream>
 #include <string>
 #include <vector>
 #include <cerrno>
 #include "pbd/pathexpand.h"
 #include "pbd/file_utils.h"
 
+#include "ardour_http.h"
 #include "bundle_env.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace PBD;
 using namespace ARDOUR;
 using namespace std;
 
 void
-fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir)
+fixup_bundle_environment (int /*argc*/, char* argv[], string & localedir)
 {
        /* THIS IS FOR LINUX - its just about the only place where its
         * acceptable to build paths directly using '/'.
@@ -60,18 +60,23 @@ fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir)
 
        std::string path;
        std::string dir_path = Glib::path_get_dirname (Glib::path_get_dirname (argv[0]));
-       std::string userconfigdir = user_config_directory();
+#if defined WINDOWS_VST_SUPPORT
+       // argv[0] will be "wine"
+       if (g_getenv ("INSTALL_DIR")) {
+               dir_path = g_getenv ("INSTALL_DIR");
+       }
+#endif
 
-#ifdef ENABLE_NLS
+#if ENABLE_NLS
        if (!ARDOUR::translations_are_enabled ()) {
-               (*localedir) = "/this/cannot/exist";
+               localedir = "/this/cannot/exist";
        } else {
                /* force localedir into the bundle */
                vector<string> lpath;
                lpath.push_back (dir_path);
                lpath.push_back ("share");
                lpath.push_back ("locale");
-               (*localedir) = canonical_path (Glib::build_filename (lpath)).c_str();
+               localedir = canonical_path (Glib::build_filename (lpath)).c_str();
        }
 #endif
 
@@ -90,10 +95,10 @@ fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir)
        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
+       /* unset GTK2_RC_FILES so that we only load the RC files that we define
         */
 
-       g_unsetenv ("GTK_RC_FILES");
+       g_unsetenv ("GTK2_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
@@ -106,65 +111,40 @@ fixup_bundle_environment (int /*argc*/, char* argv[], const char** localedir)
                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);
+       /* 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);
 
+       ArdourCurl::HttpGet::setup_certificate_paths ();
 }
 
-void 
-load_custom_fonts() 
+void
+load_custom_fonts()
 {
-       std::string ardour_mono_file;
+       FcConfig* config = FcInitLoadConfigAndFonts();
 
-       if (!find_file_in_search_path (ardour_data_search_path(), "ArdourMono.ttf", ardour_mono_file)) {
+       std::string font_file;
+
+       if (!find_file (ardour_data_search_path(), "ArdourMono.ttf", font_file)) {
                cerr << _("Cannot find ArdourMono TrueType font") << endl;
+       } else {
+               FcBool ret = FcConfigAppFontAddFile(config, reinterpret_cast<const FcChar8*>(font_file.c_str()));
+               if (ret == FcFalse) {
+                       cerr << _("Cannot load ArdourMono TrueType font.") << endl;
+               }
        }
 
-       FcConfig *config = FcInitLoadConfigAndFonts();
-       FcBool ret = FcConfigAppFontAddFile(config, reinterpret_cast<const FcChar8*>(ardour_mono_file.c_str()));
-
-       if (ret == FcFalse) {
-               cerr << _("Cannot load ArdourMono TrueType font.") << endl;
+       if (!find_file (ardour_data_search_path(), "ArdourSans.ttf", font_file)) {
+               cerr << _("Cannot find ArdourSans TrueType font") << endl;
+       } else {
+               FcBool ret = FcConfigAppFontAddFile(config, reinterpret_cast<const FcChar8*>(font_file.c_str()));
+               if (ret == FcFalse) {
+                       cerr << _("Cannot load ArdourSans TrueType font.") << endl;
+               }
        }
 
-       ret = FcConfigSetCurrent(config);
-
-       if (ret == FcFalse) {
+       if (FcFalse == FcConfigSetCurrent(config)) {
                cerr << _("Failed to set fontconfig configuration.") << endl;
        }
 }