Move initialization of libardour from ARDOUR_UI class into main()
[ardour.git] / gtk2_ardour / main.cc
index 8a0cf1e85736010bc4038bc1098fb22b829c8c24..2e5d87b598e7ab169cf07c8c47cd0ec8fa3ed95e 100644 (file)
@@ -38,7 +38,7 @@
 
 #include <jack/jack.h>
 
-#include "ardour/svn_revision.h"
+#include "ardour/revision.h"
 #include "ardour/version.h"
 #include "ardour/ardour.h"
 #include "ardour/audioengine.h"
 
 #include "i18n.h"
 
+#ifdef __APPLE__
+#include <Carbon/Carbon.h>
+#endif
+
 using namespace std;
 using namespace Gtk;
 using namespace ARDOUR_COMMAND_LINE;
@@ -80,13 +84,13 @@ gui_jack_error ()
                           false,
                           Gtk::MESSAGE_INFO,
                           Gtk::BUTTONS_NONE);
-win.set_secondary_text(_("There are several possible reasons:\n\
+       win.set_secondary_text(string_compose (_("There are several possible reasons:\n\
 \n\
 1) JACK is not running.\n\
 2) JACK is running as another user, perhaps root.\n\
-3) There is already another client called \"ardour\".\n\
+3) There is already another client called \"%1\".\n\
 \n\
-Please consider the possibilities, and perhaps (re)start JACK."));
+Please consider the possibilities, and perhaps (re)start JACK."), PROGRAM_NAME));
 
        win.add_button (Stock::QUIT, RESPONSE_CLOSE);
        win.set_default_response (RESPONSE_CLOSE);
@@ -178,7 +182,9 @@ fixup_bundle_environment (int, char* [])
        export_search_path (bundle_dir, "LADSPA_PATH", "/Plugins");
        export_search_path (bundle_dir, "VAMP_PATH", "/lib");
        export_search_path (bundle_dir, "SUIL_MODULE_DIR", "/lib");
-       export_search_path (bundle_dir, "GTK_PATH", "/lib/clearlooks");
+       export_search_path (bundle_dir, "GTK_PATH", "/lib/gtkengines");
+
+       setenv ("PATH", (bundle_dir + "/MacOS:" + std::string(getenv ("PATH"))).c_str(), 1);
 
        /* unset GTK_RC_FILES so that we only load the RC files that we define
         */
@@ -194,7 +200,7 @@ fixup_bundle_environment (int, char* [])
        */
 
        if (g_mkdir_with_parents (userconfigdir.c_str(), 0755) < 0) {
-               error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno))
+               error << string_compose (_("cannot create user %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME)
                      << endmsg;
        } else {
                
@@ -217,6 +223,32 @@ fixup_bundle_environment (int, char* [])
        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
@@ -260,8 +292,9 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
        export_search_path (dir_path, "LADSPA_PATH", "/plugins");
        export_search_path (dir_path, "VAMP_PATH", "/lib");
        export_search_path (dir_path, "SUIL_MODULE_DIR", "/lib");
+       export_search_path (dir_path, "GTK_PATH", "/lib/gtkengines");
 
-       export_search_path (dir_path, "GTK_PATH", "/lib/clearlooks");
+       setenv ("PATH", (dir_path + "/bin:" + std::string(getenv ("PATH"))).c_str(), 1);
 
        /* unset GTK_RC_FILES so that we only load the RC files that we define
         */
@@ -276,11 +309,7 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
                setenv ("FONTCONFIG_FILE", "/etc/fonts/fonts.conf", 1);
                setenv ("FONTCONFIG_PATH", "/etc/fonts", 1);
        } else {
-               /* use the one included in the bundle */
-               
-               path = Glib::build_filename (dir_path, "etc/fonts/fonts.conf");
-               setenv ("FONTCONFIG_FILE", path.c_str(), 1);
-               export_search_path (dir_path, "FONTCONFIG_PATH", "/etc/fonts");
+               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
@@ -292,7 +321,7 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
        */
 
        if (g_mkdir_with_parents (userconfigdir.c_str(), 0755) < 0) {
-               error << string_compose (_("cannot create user ardour folder %1 (%2)"), userconfigdir, strerror (errno))
+               error << string_compose (_("cannot create user %3 folder %1 (%2)"), userconfigdir, strerror (errno), PROGRAM_NAME)
                      << endmsg;
        } else {
                
@@ -323,8 +352,6 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
 
 }
 
-#endif
-
 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)) {
@@ -333,9 +360,17 @@ static void load_custom_fonts() {
 
        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;
+       }
        ret = FcConfigSetCurrent(config);
+       if (ret == FcFalse) {
+               cerr << _("Failed to set fontconfig configuration.") << endl;
+       }
 }
 
+#endif
+
 static gboolean
 tell_about_jack_death (void* /* ignored */)
 {
@@ -454,7 +489,7 @@ int main (int argc, char *argv[])
        cout << PROGRAM_NAME
             << VERSIONSTRING
             << _(" (built using ")
-            << svn_revision
+            << revision
 #ifdef __GNUC__
             << _(" and GCC version ") << __VERSION__
 #endif
@@ -480,6 +515,11 @@ int main (int argc, char *argv[])
 
        PBD::ID::init ();
 
+       if (!ARDOUR::init (ARDOUR_COMMAND_LINE::use_vst, ARDOUR_COMMAND_LINE::try_hw_optimization, localedir)) {
+               error << string_compose (_("could not initialize %1."), PROGRAM_NAME) << endmsg;
+               exit (1);
+       }
+
        if (::signal (SIGPIPE, sigpipe_handler)) {
                cerr << _("Cannot xinstall SIGPIPE error handler") << endl;
        }
@@ -487,7 +527,7 @@ int main (int argc, char *argv[])
        try {
                ui = new ARDOUR_UI (&argc, &argv, localedir);
        } catch (failed_constructor& err) {
-               error << _("could not create ARDOUR GUI") << endmsg;
+               error << string_compose (_("could not create %1 GUI"), PROGRAM_NAME) << endmsg;
                exit (1);
        }