X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcross.cc;h=1b83bad7c6dca9a02cf9696eccf8c8834f0fa8b7;hb=895b386b6751afd3d068155f4ea71e762297672a;hp=7c05ba2226182f39f9ec85d697899fe349cfbb44;hpb=ccbf3d0f3f17b87f0edd18b40c1a14649c559d92;p=dcpomatic.git diff --git a/src/lib/cross.cc b/src/lib/cross.cc index 7c05ba222..1b83bad7c 100644 --- a/src/lib/cross.cc +++ b/src/lib/cross.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -21,6 +21,7 @@ #include "cross.h" #include "compose.hpp" #include "log.h" +#include "dcpomatic_log.h" #include "config.h" #include "exceptions.h" extern "C" { @@ -53,10 +54,6 @@ extern "C" { #include "i18n.h" -#define LOG_GENERAL(...) log->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL); -#define LOG_ERROR(...) log->log (String::compose (__VA_ARGS__), LogEntry::TYPE_ERROR); -#define LOG_ERROR_NC(...) log->log (__VA_ARGS__, LogEntry::TYPE_ERROR); - using std::pair; using std::list; using std::ifstream; @@ -68,7 +65,7 @@ using boost::shared_ptr; /** @param s Number of seconds to sleep for */ void -dcpomatic_sleep (int s) +dcpomatic_sleep_seconds (int s) { #ifdef DCPOMATIC_POSIX sleep (s); @@ -182,7 +179,7 @@ shared_path () } void -run_ffprobe (boost::filesystem::path content, boost::filesystem::path out, shared_ptr log) +run_ffprobe (boost::filesystem::path content, boost::filesystem::path out) { #ifdef DCPOMATIC_WINDOWS SECURITY_ATTRIBUTES security; @@ -362,10 +359,16 @@ Waker::~Waker () } void -start_batch_converter (boost::filesystem::path dcpomatic) +start_tool (boost::filesystem::path dcpomatic, string executable, +#ifdef DCPOMATIC_OSX + string app +#else + string +#endif + ) { #if defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_WINDOWS) - boost::filesystem::path batch = dcpomatic.parent_path() / "dcpomatic2_batch"; + boost::filesystem::path batch = dcpomatic.parent_path() / executable; #endif #ifdef DCPOMATIC_OSX @@ -374,10 +377,10 @@ start_batch_converter (boost::filesystem::path dcpomatic) batch = batch.parent_path (); // Contents batch = batch.parent_path (); // DCP-o-matic.app batch = batch.parent_path (); // Applications - batch /= "DCP-o-matic\\ 2\\ Batch\\ Converter.app"; + batch /= app; batch /= "Contents"; batch /= "MacOS"; - batch /= "dcpomatic2_batch"; + batch /= executable; #endif #if defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_OSX) @@ -402,6 +405,18 @@ start_batch_converter (boost::filesystem::path dcpomatic) #endif } +void +start_batch_converter (boost::filesystem::path dcpomatic) +{ + start_tool (dcpomatic, "dcpomatic2_batch", "DCP-o-matic\\ 2\\ Batch\\ Converter.app"); +} + +void +start_player (boost::filesystem::path dcpomatic) +{ + start_tool (dcpomatic, "dcpomatic2_player", "DCP-o-matic\\ 2\\ Player.app"); +} + uint64_t thread_id () { @@ -448,3 +463,54 @@ maybe_open_console () } } #endif + +boost::filesystem::path +home_directory () +{ +#if defined(DCPOMATIC_LINUX) || defined(DCPOMATIC_OSX) + return getenv("HOME"); +#endif +#ifdef DCPOMATIC_WINDOWS + return boost::filesystem::path(getenv("HOMEDRIVE")) / boost::filesystem::path(getenv("HOMEPATH")); +#endif +} + +string +command_and_read (string cmd) +{ +#ifdef DCPOMATIC_LINUX + FILE* pipe = popen (cmd.c_str(), "r"); + if (!pipe) { + throw runtime_error ("popen failed"); + } + + string result; + char buffer[128]; + try { + while (fgets(buffer, sizeof(buffer), pipe)) { + result += buffer; + } + } catch (...) { + pclose (pipe); + throw; + } + + pclose (pipe); + return result; +#endif + + return ""; +} + +/** @return true if this process is a 32-bit one running on a 64-bit-capable OS */ +bool +running_32_on_64 () +{ +#ifdef DCPOMATIC_WINDOWS + BOOL p; + IsWow64Process (GetCurrentProcess(), &p); + return p; +#endif + /* XXX: assuming nobody does this on Linux / OS X */ + return false; +}