Try to fix xmlsec startup on OS X.
authorCarl Hetherington <cth@carlh.net>
Sat, 12 Oct 2013 18:55:10 +0000 (19:55 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 12 Oct 2013 18:55:10 +0000 (19:55 +0100)
ChangeLog
src/lib/cross.cc
src/lib/cross.h
src/lib/util.cc

index 91103ed63da30efc326d0136713aebcab24644e0..1201e36ca89f4b37a5a2cc1724186e6a9c9ca5f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@
 
        * Add some missing libraries to the OS X build.
 
+       * Fix libltdl search path on OS X.
+
 2013-10-12  Carl Hetherington  <cth@carlh.net>
        
        * Version 1.13 released.
index 47f07cf9d3edcf2b16c287dbff2a508aa9f11c46..30a953bb835b68fa79c48026d4e9085d73d2315a 100644 (file)
@@ -35,6 +35,7 @@
 #include <sys/sysctl.h>
 #include <mach-o/dyld.h>
 #endif
+#include "exceptions.h"
 
 using std::pair;
 using std::list;
@@ -114,6 +115,24 @@ cpu_info ()
        return info;
 }
 
+#ifdef DCPOMATIC_OSX
+/** @return Path of the Contents directory in the .app */
+boost::filesystem::path
+app_contents ()
+{
+       uint32_t size = 1024;
+       char buffer[size];
+       if (_NSGetExecutablePath (buffer, &size)) {
+               throw StringError ("_NSGetExecutablePath failed");
+       }
+       
+       boost::filesystem::path path (buffer);
+       path.remove_filename ();
+       path.remove_filename ();
+       return path;
+}
+#endif
+
 void
 run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, shared_ptr<Log> log)
 {
@@ -189,15 +208,8 @@ run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, share
 #endif
 
 #ifdef DCPOMATIC_OSX
-       uint32_t size = 1024;
-       char buffer[size];
-       if (_NSGetExecutablePath (buffer, &size)) {
-               log->log ("_NSGetExecutablePath failed");
-               return;
-       }
-       
-       boost::filesystem::path path (buffer);
-       path.remove_filename ();
+       boost::filesystem::path path = app_contents();
+       path /= "MacOS";
        path /= "ffprobe";
        
        string ffprobe = path.string() + " \"" + content.string() + "\" 2> \"" + out.string() + "\"";
index c3bb20b47ba6fcb07f1425d1f2068d07ca2ceb2a..1fe34edbe0760d9e86f00c47a6689c61acf073a0 100644 (file)
@@ -30,3 +30,6 @@ extern std::string cpu_info ();
 extern void run_ffprobe (boost::filesystem::path, boost::filesystem::path, boost::shared_ptr<Log>);
 extern std::list<std::pair<std::string, std::string> > mount_info ();
 extern boost::filesystem::path openssl_path ();
+#ifdef DCPOMATIC_OSX
+extern boost::filesystem::path app_contents ();
+#endif
index 4b780e1b7f9471176a54274c7ad983914027818f..1d1372049451b274f7aa9417be9fa4088c2a5503 100644 (file)
@@ -279,6 +279,15 @@ dcpomatic_setup ()
        
        avfilter_register_all ();
 
+#ifdef DCPOMATIC_OSX
+       /* Add our lib directory to the libltdl search path so that
+          xmlsec can find xmlsec1-openssl.
+       */
+       boost::filesystem::path lib = app_contents ();
+       lib /= "lib";
+       lt_dladdsearchdir (lib.c_str ());
+#endif 
+
        libdcp::init ();
        
        Ratio::setup_ratios ();