* Support for finding files on Linux in a case insensitive way.
* Enable stack trace in Linux
/dependencies64/boost/stage/lib/libboost_wave-vc120-mt-gd-1_57.lib
/build
+
+CMakeLists.txt.user
+.settings
+
add_compile_options( -mssse3 )
add_compile_options( -msse4.1 )
add_compile_options( -pthread )
+ add_compile_options( -fPIC )
add_compile_options( -fnon-call-exceptions ) # Allow signal handler to throw exception
endif ()
#include "except.h"
#include "log.h"
#include "string.h"
+#include "os/filesystem.h"
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
data = paths.get(L"data-path", initialPath + L"/data/");
font = paths.get(L"font-path", initialPath + L"/fonts/");
thumbnails = paths.get(L"thumbnails-path", initialPath + L"/data/");
+ }
+ catch(...)
+ {
+ CASPAR_LOG(error) << L" ### Invalid configuration file. ###";
+ throw;
+ }
- //Make sure that all paths have a trailing backslash
+ try
+ {
+ auto found_media_path = find_case_insensitive(media);
+ if (found_media_path)
+ media = *found_media_path;
+ else
+ boost::filesystem::create_directories(media);
+
+ auto found_template_path = find_case_insensitive(ftemplate);
+ if (found_template_path)
+ ftemplate = *found_template_path;
+ else
+ boost::filesystem::create_directories(ftemplate);
+
+ auto found_data_path = find_case_insensitive(data);
+ if (found_data_path)
+ data = *found_data_path;
+ else
+ boost::filesystem::create_directories(data);
+
+ auto found_font_path = find_case_insensitive(font);
+ if (found_font_path)
+ font = *found_font_path;
+ else
+ boost::filesystem::create_directories(font);
+
+ auto found_thumbnails_path = find_case_insensitive(thumbnails);
+ if (found_thumbnails_path)
+ thumbnails = *found_thumbnails_path;
+ else
+ boost::filesystem::create_directories(thumbnails);
+
+ auto found_log_path = find_case_insensitive(log);
+ if (found_log_path)
+ log = *found_log_path;
+ else if (!boost::filesystem::create_directories(log))
+ log = L"./";
+
+ //Make sure that all paths have a trailing slash
if(media.at(media.length()-1) != L'/')
media.append(L"/");
if(log.at(log.length()-1) != L'/')
try
{
+ auto initialPath = boost::filesystem::initial_path().wstring();
+
for(auto it = boost::filesystem::directory_iterator(initialPath); it != boost::filesystem::directory_iterator(); ++it)
{
- if(it->path().wstring().find(L".fth") != std::wstring::npos)
+ if(it->path().wstring().find(L".fth") != std::wstring::npos)
{
auto from_path = *it;
auto to_path = boost::filesystem::path(ftemplate + L"/" + it->path().wstring());
-
+
if(boost::filesystem::exists(to_path))
boost::filesystem::remove(to_path);
boost::filesystem::copy_file(from_path, to_path);
- }
+ }
}
}
catch(...)
}
}
catch(...)
- {
- CASPAR_LOG(error) << L" ### Invalid configuration file. ###";
- throw;
- }
-
- try
- {
- try
- {
- auto log_path = boost::filesystem::path(log);
- if(!boost::filesystem::exists(log_path))
- boost::filesystem::create_directories(log_path);
- }
- catch(...)
- {
- log = L"./";
- }
-
- auto media_path = boost::filesystem::path(media);
- if(!boost::filesystem::exists(media_path))
- boost::filesystem::create_directories(media_path);
-
- auto template_path = boost::filesystem::path(ftemplate);
- if(!boost::filesystem::exists(template_path))
- boost::filesystem::create_directories(template_path);
-
- auto data_path = boost::filesystem::path(data);
- if(!boost::filesystem::exists(data_path))
- boost::filesystem::create_directories(data_path);
-
- auto font_path = boost::filesystem::path(font);
- if(!boost::filesystem::exists(font_path))
- boost::filesystem::create_directories(font_path);
-
- auto thumbnails_path = boost::filesystem::path(thumbnails);
- if(!boost::filesystem::exists(thumbnails_path))
- boost::filesystem::create_directories(thumbnails_path);
- }
- catch(...)
{
CASPAR_LOG_CURRENT_EXCEPTION();
CASPAR_LOG(error) << L"Failed to create configured directories.";
*
* @param file The file to reemmit.
*/
- virtual void reemmit(const boost::filesystem::wpath& file) = 0;
+ virtual void reemmit(const boost::filesystem::path& file) = 0;
};
/**
* @param event Can be CREATED, REMOVED or MODIFIED.
* @param file The file affected.
*/
-typedef std::function<void (filesystem_event event, const boost::filesystem::wpath& file)> filesystem_monitor_handler;
+typedef std::function<void (filesystem_event event, const boost::filesystem::path& file)> filesystem_monitor_handler;
/**
* Called when the initially available files has been found.
*
* @param initial_files The files that were initially available.
*/
-typedef std::function<void (const std::set<boost::filesystem::wpath>& initial_files)> initial_files_handler;
+typedef std::function<void (const std::set<boost::filesystem::path>& initial_files)> initial_files_handler;
/**
* Factory for creating filesystem monitors.
* @return The filesystem monitor handle.
*/
virtual filesystem_monitor::ptr create(
- const boost::filesystem::wpath& folder_to_watch,
+ const boost::filesystem::path& folder_to_watch,
filesystem_event events_of_interest_mask,
bool report_already_existing,
const filesystem_monitor_handler& handler,
const initial_files_handler& initial_files_handler =
- [] (const std::set<boost::filesystem::wpath>&) { }) = 0;
+ [] (const std::set<boost::filesystem::path>&) { }) = 0;
};
-}
\ No newline at end of file
+}
#pragma once
#include "os/stack_trace.h"
+#include "utf.h"
#include <boost/log/trivial.hpp>
#include <boost/log/sources/global_logger_storage.hpp>
+#include <boost/exception/all.hpp>
#include <string>
#include <locale>
{
bool found = false;
- for (auto it = directory_iterator(result); it != directory_iterator(); ++it)
+ for (auto it = directory_iterator(absolute(result)); it != directory_iterator(); ++it)
{
auto leaf = it->path().leaf();
if (boost::algorithm::iequals(part.wstring(), leaf.wstring()))
{
- result += leaf;
+ result = result / leaf;
found = true;
break;
}
#include "../general_protection_fault.h"
#include "../../except.h"
+#include "../../log.h"
#include <signal.h>
void catch_fpe(int signum)
{
- CASPAR_THROW_EXCEPTION(floating_point_exception());
+ try
+ {
+ CASPAR_THROW_EXCEPTION(floating_point_exception());
+ }
+ catch (...)
+ {
+ CASPAR_LOG_CURRENT_EXCEPTION();
+ throw;
+ }
}
void catch_segv(int signum)
{
- CASPAR_THROW_EXCEPTION(segmentation_fault_exception());
+ try
+ {
+ CASPAR_THROW_EXCEPTION(segmentation_fault_exception());
+ }
+ catch (...)
+ {
+ CASPAR_LOG_CURRENT_EXCEPTION();
+ throw;
+ }
}
void do_install_handlers()
#include "../stack_trace.h"
+#include <execinfo.h>
+#include <cstdio>
+#include <array>
+#include <memory>
+#include <sstream>
+#include <cxxabi.h>
+
namespace caspar {
+std::string demangle(const std::string& mangled)
+{
+ auto start_of_name = mangled.find_first_of('(');
+
+ if (start_of_name == std::string::npos)
+ return mangled;
+
+ auto start_of_offset = mangled.find_first_of('+', start_of_name);
+
+ if (start_of_offset == std::string::npos)
+ return mangled;
+
+ auto end_of_name = mangled.find_first_of(')', start_of_offset);
+
+ if (end_of_name == std::string::npos)
+ return mangled;
+
+ auto file = mangled.substr(0, start_of_name);
+ auto mangled_symbol_name = mangled.substr(start_of_name + 1, start_of_offset - start_of_name - 1);
+ auto offset = mangled.substr(start_of_offset + 1, end_of_name - start_of_offset - 1);
+
+ int status;
+ auto demangled = abi::__cxa_demangle(mangled_symbol_name.c_str(), nullptr, nullptr, &status);
+ bool demangled_success = status == 0;
+
+ if (demangled_success)
+ {
+ auto demangled_guard = std::shared_ptr<char>(demangled, free);
+
+ return file + " : " + demangled + " + " + offset;
+ }
+ else
+ {
+ return mangled;
+ }
+}
+
std::wstring get_call_stack()
{
- // TODO: implement
- return L"";
+ std::array<void*, 100> stackframes;
+ auto size = backtrace(stackframes.data(), stackframes.size());
+ auto strings = backtrace_symbols(stackframes.data(), size);
+
+ if (strings == nullptr)
+ return L"Out of memory while generating stack trace";
+
+ try
+ {
+ auto entries = std::shared_ptr<char*>(strings, free);
+ std::wostringstream stream;
+
+ for (int i = 0; i != size; ++i)
+ {
+ stream << demangle(strings[i]).c_str() << std::endl;
+ }
+
+ return stream.str();
+ }
+ catch (const std::bad_alloc&)
+ {
+ return L"Out of memory while generating stack trace";
+ }
+ catch (...)
+ {
+ return L"Error while generating stack trace";
+ }
}
}
{
}
- void operator()(filesystem_event event, const boost::filesystem::wpath& file)
+ void operator()(filesystem_event event, const boost::filesystem::path& file)
{
try
{
class directory_monitor
{
bool report_already_existing_;
- boost::filesystem::wpath folder_;
+ boost::filesystem::path folder_;
filesystem_event events_mask_;
filesystem_monitor_handler handler_;
initial_files_handler initial_files_handler_;
bool first_scan_ = true;
- std::map<boost::filesystem::wpath, std::time_t> files_;
- std::map<boost::filesystem::wpath, uintmax_t> being_written_sizes_;
+ std::map<boost::filesystem::path, std::time_t> files_;
+ std::map<boost::filesystem::path, uintmax_t> being_written_sizes_;
public:
directory_monitor(
bool report_already_existing,
- const boost::filesystem::wpath& folder,
+ const boost::filesystem::path& folder,
filesystem_event events_mask,
const filesystem_monitor_handler& handler,
const initial_files_handler& initial_files_handler)
handler_(filesystem_event::MODIFIED, file.first);
}
- void reemmit(const boost::filesystem::wpath& file)
+ void reemmit(const boost::filesystem::path& file)
{
if (static_cast<int>(events_mask_ & filesystem_event::MODIFIED) == 0)
return;
bool interested_in_modified = static_cast<int>(events_mask_ & filesystem_event::MODIFIED) > 0;
auto filenames = cpplinq::from(files_).select(keys());
- std::set<wpath> removed_files(filenames.begin(), filenames.end());
- std::set<wpath> initial_files;
+ std::set<path> removed_files(filenames.begin(), filenames.end());
+ std::set<path> initial_files;
for (boost::filesystem::wrecursive_directory_iterator iter(folder_); iter != boost::filesystem::wrecursive_directory_iterator(); ++iter)
{
first_scan_ = false;
}
private:
- bool can_read_file(const boost::filesystem::wpath& file)
+ bool can_read_file(const boost::filesystem::path& file)
{
boost::filesystem::wifstream stream(file);
tbb::atomic<bool> running_;
int scan_interval_millis_;
std::promise<void> initial_scan_completion_;
- tbb::concurrent_queue<boost::filesystem::wpath> to_reemmit_;
+ tbb::concurrent_queue<boost::filesystem::path> to_reemmit_;
tbb::atomic<bool> reemmit_all_;
public:
polling_filesystem_monitor(
- const boost::filesystem::wpath& folder_to_watch,
+ const boost::filesystem::path& folder_to_watch,
filesystem_event events_of_interest_mask,
bool report_already_existing,
int scan_interval_millis,
reemmit_all_ = true;
}
- virtual void reemmit(const boost::filesystem::wpath& file)
+ virtual void reemmit(const boost::filesystem::path& file)
{
to_reemmit_.push(file);
}
root_monitor_.reemmit_all();
else
{
- boost::filesystem::wpath file;
+ boost::filesystem::path file;
while (to_reemmit_.try_pop(file))
root_monitor_.reemmit(file);
}
filesystem_monitor::ptr polling_filesystem_monitor_factory::create(
- const boost::filesystem::wpath& folder_to_watch,
+ const boost::filesystem::path& folder_to_watch,
filesystem_event events_of_interest_mask,
bool report_already_existing,
const filesystem_monitor_handler& handler,
polling_filesystem_monitor_factory(int scan_interval_millis = 5000);
virtual ~polling_filesystem_monitor_factory();
virtual filesystem_monitor::ptr create(
- const boost::filesystem::wpath& folder_to_watch,
+ const boost::filesystem::path& folder_to_watch,
filesystem_event events_of_interest_mask,
bool report_already_existing,
const filesystem_monitor_handler& handler,
spl::unique_ptr<impl> impl_;
};
-}
\ No newline at end of file
+}
if (params.empty())
return core::frame_producer::empty();
- std::wstring filename = env::media_folder() + L"\\" + params[0] + L".xml";
+ std::wstring filename = env::media_folder() + L"/" + params[0] + L".xml";
if (!boost::filesystem::is_regular_file(boost::filesystem::path(filename)))
return core::frame_producer::empty();
namespace caspar { namespace core {
std::wstring get_relative_without_extension(
- const boost::filesystem::wpath& file,
- const boost::filesystem::wpath& relative_to)
+ const boost::filesystem::path& file,
+ const boost::filesystem::path& relative_to)
{
auto result = file.stem();
- boost::filesystem::wpath current_path = file;
+ boost::filesystem::path current_path = file;
while (true)
{
struct thumbnail_generator::impl
{
private:
- boost::filesystem::wpath media_path_;
- boost::filesystem::wpath thumbnails_path_;
+ boost::filesystem::path media_path_;
+ boost::filesystem::path thumbnails_path_;
int width_;
int height_;
spl::shared_ptr<image_mixer> image_mixer_;
public:
impl(
filesystem_monitor_factory& monitor_factory,
- const boost::filesystem::wpath& media_path,
- const boost::filesystem::wpath& thumbnails_path,
+ const boost::filesystem::path& media_path,
+ const boost::filesystem::path& thumbnails_path,
int width,
int height,
const video_format_desc& render_video_mode,
media_path,
filesystem_event::ALL,
true,
- [this] (filesystem_event event, const boost::filesystem::wpath& file)
+ [this] (filesystem_event event, const boost::filesystem::path& file)
{
this->on_file_event(event, file);
},
- [this] (const std::set<boost::filesystem::wpath>& initial_files)
+ [this] (const std::set<boost::filesystem::path>& initial_files)
{
this->on_initial_files(initial_files);
}))
//output_->sleep_millis = 2000;
}
- void on_initial_files(const std::set<boost::filesystem::wpath>& initial_files)
+ void on_initial_files(const std::set<boost::filesystem::path>& initial_files)
{
using namespace boost::filesystem;
monitor_->reemmit_all();
}
- void on_file_event(filesystem_event event, const boost::filesystem::wpath& file)
+ void on_file_event(filesystem_event event, const boost::filesystem::path& file)
{
switch (event)
{
}
}
- bool needs_to_be_generated(const boost::filesystem::wpath& file)
+ bool needs_to_be_generated(const boost::filesystem::path& file)
{
using namespace boost::filesystem;
}
}
- void generate_thumbnail(const boost::filesystem::wpath& file)
+ void generate_thumbnail(const boost::filesystem::path& file)
{
auto media_file = get_relative_without_extension(file, media_path_);
auto png_file = thumbnails_path_ / (media_file + L".png");
thumbnail_generator::thumbnail_generator(
filesystem_monitor_factory& monitor_factory,
- const boost::filesystem::wpath& media_path,
- const boost::filesystem::wpath& thumbnails_path,
+ const boost::filesystem::path& media_path,
+ const boost::filesystem::path& thumbnails_path,
int width,
int height,
const video_format_desc& render_video_mode,
typedef std::function<void (
const class const_frame& frame,
const video_format_desc& format_desc,
- const boost::filesystem::wpath& output_file,
+ const boost::filesystem::path& output_file,
int width,
int height)> thumbnail_creator;
public:
thumbnail_generator(
filesystem_monitor_factory& monitor_factory,
- const boost::filesystem::wpath& media_path,
- const boost::filesystem::wpath& thumbnails_path,
+ const boost::filesystem::path& media_path,
+ const boost::filesystem::path& thumbnails_path,
int width,
int height,
const video_format_desc& render_video_mode,
spl::unique_ptr<impl> impl_;
};
-}}
\ No newline at end of file
+}}
--- /dev/null
+libass.so.5.0.0
\ No newline at end of file
--- /dev/null
+libass.so.5.0.0
\ No newline at end of file
-libavcodec.so.55
\ No newline at end of file
+libavcodec.so.55.52.102
\ No newline at end of file
--- /dev/null
+libavcodec.so.55.52.102
\ No newline at end of file
-libavdevice.so.55
\ No newline at end of file
+libavdevice.so.55.10.100
\ No newline at end of file
--- /dev/null
+libavdevice.so.55.10.100
\ No newline at end of file
-libavfilter.so.4
\ No newline at end of file
+libavfilter.so.4.2.100
\ No newline at end of file
--- /dev/null
+libavfilter.so.4.2.100
\ No newline at end of file
-libavformat.so.55
\ No newline at end of file
+libavformat.so.55.33.100
\ No newline at end of file
--- /dev/null
+libavformat.so.55.33.100
\ No newline at end of file
-libavutil.so.52
\ No newline at end of file
+libavutil.so.52.66.100
\ No newline at end of file
--- /dev/null
+libavutil.so.52.66.100
\ No newline at end of file
--- /dev/null
+libbluray.so.1.6.0
\ No newline at end of file
--- /dev/null
+libbluray.so.1.6.0
\ No newline at end of file
--- /dev/null
+libcrypto.so.1.0.0
\ No newline at end of file
--- /dev/null
+libexpat.so.1.6.0
\ No newline at end of file
--- /dev/null
+libexpat.so.1.6.0
\ No newline at end of file
--- /dev/null
+libfontconfig.so.1.8.0
\ No newline at end of file
--- /dev/null
+libfontconfig.so.1.8.0
\ No newline at end of file
--- /dev/null
+libfreetype.so.6.11.2
\ No newline at end of file
--- /dev/null
+libfreetype.so.6.11.2
\ No newline at end of file
--- /dev/null
+libfribidi.so.0.3.5
\ No newline at end of file
--- /dev/null
+libfribidi.so.0.3.5
\ No newline at end of file
--- /dev/null
+libgme.so.0
\ No newline at end of file
--- /dev/null
+libgme.so.0.6.0
\ No newline at end of file
--- /dev/null
+libgmp.so.10.2.0
\ No newline at end of file
--- /dev/null
+libgmp.so.10.2.0
\ No newline at end of file
--- /dev/null
+libgnutls-openssl.so.27.0.2
\ No newline at end of file
--- /dev/null
+libgnutls-openssl.so.27.0.2
\ No newline at end of file
--- /dev/null
+libgnutls-xssl.so.0.0.0
\ No newline at end of file
--- /dev/null
+libgnutls-xssl.so.0.0.0
\ No newline at end of file
--- /dev/null
+libgnutls.so.28.30.6
\ No newline at end of file
--- /dev/null
+libgnutls.so.28.30.6
\ No newline at end of file
--- /dev/null
+libhogweed.so.2.5
\ No newline at end of file
--- /dev/null
+libhogweed.so.2.5
\ No newline at end of file
--- /dev/null
+libilbc.so.0.0.1
\ No newline at end of file
--- /dev/null
+libilbc.so.0.0.1
\ No newline at end of file
--- /dev/null
+liblzma.so.5.2.1
\ No newline at end of file
--- /dev/null
+liblzma.so.5.2.1
\ No newline at end of file
--- /dev/null
+libmodplug.so.1.0.0
\ No newline at end of file
--- /dev/null
+libmodplug.so.1.0.0
\ No newline at end of file
--- /dev/null
+libmp3lame.so.0.0.0
\ No newline at end of file
--- /dev/null
+libmp3lame.so.0.0.0
\ No newline at end of file
--- /dev/null
+libnettle.so.4.7
\ No newline at end of file
--- /dev/null
+libnettle.so.4.7
\ No newline at end of file
--- /dev/null
+libogg.so.0.8.2
\ No newline at end of file
--- /dev/null
+libogg.so.0.8.2
\ No newline at end of file
--- /dev/null
+libopencore-amrnb.so.0.0.3
\ No newline at end of file
--- /dev/null
+libopencore-amrnb.so.0.0.3
\ No newline at end of file
--- /dev/null
+libopencore-amrwb.so.0.0.3
\ No newline at end of file
--- /dev/null
+libopencore-amrwb.so.0.0.3
\ No newline at end of file
--- /dev/null
+libopenjpeg.so.1.5.0
\ No newline at end of file
--- /dev/null
+libopenjpeg.so.1.5.0
\ No newline at end of file
--- /dev/null
+libopus.so.0.5.0
\ No newline at end of file
--- /dev/null
+libopus.so.0.5.0
\ No newline at end of file
--- /dev/null
+liborc-0.4.so.0.18.0
\ No newline at end of file
--- /dev/null
+liborc-0.4.so.0.18.0
\ No newline at end of file
--- /dev/null
+liborc-test-0.4.so.0.18.0
\ No newline at end of file
--- /dev/null
+liborc-test-0.4.so.0.18.0
\ No newline at end of file
--- /dev/null
+libpcre.so.1.2.4
\ No newline at end of file
--- /dev/null
+libpcre.so.1.2.4
\ No newline at end of file
--- /dev/null
+libpcrecpp.so.0.0.1
\ No newline at end of file
--- /dev/null
+libpcrecpp.so.0.0.1
\ No newline at end of file
--- /dev/null
+libpcreposix.so.0.0.3
\ No newline at end of file
--- /dev/null
+libpcreposix.so.0.0.3
\ No newline at end of file
--- /dev/null
+libpng12.so
\ No newline at end of file
--- /dev/null
+libpng.so.3.53.0
\ No newline at end of file
--- /dev/null
+libpng12.so.0.53.0
\ No newline at end of file
--- /dev/null
+libpng12.so.0.53.0
\ No newline at end of file
-libpostproc.so.52
\ No newline at end of file
+libpostproc.so.52.3.100
\ No newline at end of file
--- /dev/null
+libpostproc.so.52.3.100
\ No newline at end of file
--- /dev/null
+librtmp.so.0
\ No newline at end of file
--- /dev/null
+libschroedinger-1.0.so.0.11.0
\ No newline at end of file
--- /dev/null
+libschroedinger-1.0.so.0.11.0
\ No newline at end of file
--- /dev/null
+libsoxr-lsr.so.0
\ No newline at end of file
--- /dev/null
+libsoxr-lsr.so.0.1.9
\ No newline at end of file
--- /dev/null
+libsoxr.so.0
\ No newline at end of file
--- /dev/null
+libsoxr.so.0.1.0
\ No newline at end of file
--- /dev/null
+libspeex.so.1.5.0
\ No newline at end of file
--- /dev/null
+libspeex.so.1.5.0
\ No newline at end of file
--- /dev/null
+libspeexdsp.so.1.5.0
\ No newline at end of file
--- /dev/null
+libspeexdsp.so.1.5.0
\ No newline at end of file
--- /dev/null
+libssl.so.1.0.0
\ No newline at end of file
-libswresample.so.0
\ No newline at end of file
+libswresample.so.0.18.100
\ No newline at end of file
--- /dev/null
+libswresample.so.0.18.100
\ No newline at end of file
-libswscale.so.2
\ No newline at end of file
+libswscale.so.2.5.102
\ No newline at end of file
--- /dev/null
+libswscale.so.2.5.102
\ No newline at end of file
--- /dev/null
+libtasn1.so.6.4.2
\ No newline at end of file
--- /dev/null
+libtasn1.so.6.4.2
\ No newline at end of file
--- /dev/null
+libtheora.so.0.3.10
\ No newline at end of file
--- /dev/null
+libtheora.so.0.3.10
\ No newline at end of file
--- /dev/null
+libtheoradec.so.1.1.4
\ No newline at end of file
--- /dev/null
+libtheoradec.so.1.1.4
\ No newline at end of file
--- /dev/null
+libtheoraenc.so.1.1.2
\ No newline at end of file
--- /dev/null
+libtheoraenc.so.1.1.2
\ No newline at end of file
--- /dev/null
+libtwolame.so.0.0.0
\ No newline at end of file
--- /dev/null
+libtwolame.so.0.0.0
\ No newline at end of file
--- /dev/null
+libva-drm.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-drm.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-egl.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-egl.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-glx.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-glx.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-tpi.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-tpi.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-wayland.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-wayland.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-x11.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva-x11.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libva.so.1.3700.0
\ No newline at end of file
--- /dev/null
+libvidstab.so.0.9
\ No newline at end of file
--- /dev/null
+libvo-aacenc.so.0.0.4
\ No newline at end of file
--- /dev/null
+libvo-aacenc.so.0.0.4
\ No newline at end of file
--- /dev/null
+libvo-amrwbenc.so.0.0.4
\ No newline at end of file
--- /dev/null
+libvo-amrwbenc.so.0.0.4
\ No newline at end of file
--- /dev/null
+libvorbis.so.0.4.7
\ No newline at end of file
--- /dev/null
+libvorbis.so.0.4.7
\ No newline at end of file
--- /dev/null
+libvorbisenc.so.2.0.10
\ No newline at end of file
--- /dev/null
+libvorbisenc.so.2.0.10
\ No newline at end of file
--- /dev/null
+libvorbisfile.so.3.3.6
\ No newline at end of file
--- /dev/null
+libvorbisfile.so.3.3.6
\ No newline at end of file
--- /dev/null
+libvpx.so.1.3.0
\ No newline at end of file
--- /dev/null
+libvpx.so.1.3.0
\ No newline at end of file
--- /dev/null
+libvpx.so.1.3.0
\ No newline at end of file
--- /dev/null
+libwavpack.so.1.1.5
\ No newline at end of file
--- /dev/null
+libwavpack.so.1.1.5
\ No newline at end of file
--- /dev/null
+libwebp.so.5.0.0
\ No newline at end of file
--- /dev/null
+libwebp.so.5.0.0
\ No newline at end of file
--- /dev/null
+libx264.so.142
\ No newline at end of file
--- /dev/null
+libx265.so.21
\ No newline at end of file
--- /dev/null
+libx265.so.0.0
\ No newline at end of file
--- /dev/null
+libxavs.so.1
\ No newline at end of file
--- /dev/null
+libxml2.so.2.9.2
\ No newline at end of file
--- /dev/null
+libxml2.so.2.9.2
\ No newline at end of file
--- /dev/null
+libxvidcore.so.4.3
\ No newline at end of file
--- /dev/null
+libxvidcore.so.4.3
\ No newline at end of file
--- /dev/null
+libz.so.1.2.8
\ No newline at end of file
--- /dev/null
+libz.so.1.2.8
\ No newline at end of file
swresample.so
postproc.so
- bz2.a
- mp3lame.a
- opus.a
- png.a
- theora.a
- theoradec.a
- theoraenc.a
- vorbis.a
- vorbisenc.a
- vorbisfile.a
- ogg.a
- vpx.a
- x264.a
- xvidcore.a
- yasm.a
- z.a
+ ass
+ bluray
+ crypto
+ expat
+ fontconfig
+ fribidi
+ gmp
+ gnutls
+ gnutls-openssl
+ gnutls-xssl
+ gsm
+ hogweed
+ ilbc
+ lzma
+ modplug
+ mp3lame
+ nettle
+ ogg
+ opencore-amrnb
+ opencore-amrwb
+ opus
+ rtmp
+ ssl
+ tasn1
+ theora
+ theoradec
+ theoraenc
+ vorbis
+ vorbisenc
+ vorbisfile
+ vpx
+ x264
+ xavs
+ xvidcore
+ z
-Wl,--end-group
)
endif()
casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpostproc.so.52")
casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libswresample.so.0")
casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libswscale.so.2")
+
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libass.so.5")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libbluray.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libcrypto.so.1.0.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libexpat.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libfontconfig.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libfreetype.so.6")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libfribidi.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgme.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgmp.so.10")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgnutls-openssl.so.27")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgnutls-xssl.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgnutls.so.28")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libgsm.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libhogweed.so.2")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libilbc.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/liblzma.so.5")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libmodplug.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libmp3lame.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libnettle.so.4")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libogg.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libopencore-amrnb.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libopencore-amrwb.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libopenjpeg.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libopus.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/liborc-0.4.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/liborc-test-0.4.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpcre.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpcrecpp.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpcreposix.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpng.so.3")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libpng12.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/librtmp.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libschroedinger-1.0.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libsoxr-lsr.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libsoxr.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libspeex.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libspeexdsp.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libssl.so.1.0.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libtasn1.so.6")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libtheora.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libtheoradec.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libtheoraenc.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libtwolame.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libva.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvidstab.so.0.9")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvo-aacenc.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvo-amrwbenc.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvorbis.so.0")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvorbisenc.so.2")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvorbisfile.so.3")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libvpx.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libwavpack.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libwebp.so.5")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libx264.so.142")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libx265.so.21")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libxavs.so.1")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libxml2.so.2")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libxvidcore.so.4")
+ casparcg_add_runtime_dependency("${FFMPEG_BIN_PATH}/libz.so.1")
+
endif()
if (separate_key_)
{
- boost::filesystem::wpath fill_file(filename_);
+ boost::filesystem::path fill_file(filename_);
auto without_extension = u16(fill_file.stem().string());
auto key_file = env::media_folder() + without_extension + L"_A" + u16(fill_file.extension().string());
std::wstring get_relative_or_original(
const std::wstring& filename,
- const boost::filesystem::wpath& relative_to)
+ const boost::filesystem::path& relative_to)
{
- boost::filesystem::wpath file(filename);
+ boost::filesystem::path file(filename);
auto result = file.filename().wstring();
- boost::filesystem::wpath current_path = file;
+ boost::filesystem::path current_path = file;
while (true)
{
#include <common/except.h>
#include <common/array.h>
+#include <common/os/filesystem.h>
#include <tbb/parallel_for.h>
std::wstring probe_stem(const std::wstring& stem)
{
auto stem2 = boost::filesystem::path(stem);
- auto dir = stem2.parent_path();
+ auto parent = find_case_insensitive(stem2.parent_path().wstring());
+
+ if (!parent)
+ return L"";
+
+ auto dir = boost::filesystem::path(*parent);
+
for(auto it = boost::filesystem::directory_iterator(dir); it != boost::filesystem::directory_iterator(); ++it)
{
if(boost::iequals(it->path().stem().wstring(), stem2.filename().wstring()) && is_valid_file(it->path().wstring()))
void write_cropped_png(
const core::const_frame& frame,
const core::video_format_desc& format_desc,
- const boost::filesystem::wpath& output_file,
+ const boost::filesystem::path& output_file,
int width,
int height)
{
auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_Allocate(static_cast<int>(frame.width()), static_cast<int>(frame.height()), 32), FreeImage_Unload);
A_memcpy(FreeImage_GetBits(bitmap.get()), frame.image_data().begin(), frame.image_data().size());
FreeImage_FlipVertical(bitmap.get());
+#ifdef WIN32
FreeImage_SaveU(FIF_PNG, bitmap.get(), filename2.c_str(), 0);
+#else
+ FreeImage_Save(FIF_PNG, bitmap.get(), u8(filename2).c_str(), 0);
+#endif
}
catch(...)
{
void write_cropped_png(
const class core::const_frame& frame,
const core::video_format_desc& format_desc,
- const boost::filesystem::wpath& output_file,
+ const boost::filesystem::path& output_file,
int width,
int height);
spl::shared_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params, struct core::interaction_sink*);
-}}
\ No newline at end of file
+}}
#include <common/log.h>
#include <common/array.h>
#include <common/base64.h>
+#include <common/os/filesystem.h>
#include <boost/filesystem.hpp>
#include <boost/property_tree/ptree.hpp>
std::wstring filename = env::media_folder() + params[0];
auto ext = std::find_if(extensions.begin(), extensions.end(), [&](const std::wstring& ex) -> bool
- {
- return boost::filesystem::is_regular_file(boost::filesystem::path(filename).replace_extension(ex));
- });
+ {
+ auto file = caspar::find_case_insensitive(boost::filesystem::path(filename).replace_extension(ex).wstring());
+
+ return static_cast<bool>(file);
+ });
if(ext == extensions.end())
return core::frame_producer::empty();
- return spl::make_shared<image_producer>(frame_factory, filename + *ext);
+ return spl::make_shared<image_producer>(frame_factory, *caspar::find_case_insensitive(filename + *ext));
}
{
return caspar::image::create_producer(frame_factory, format_desc, params);
}
-}}
\ No newline at end of file
+}}
#include <common/array.h>
#include <common/tweener.h>
#include <common/param.h>
+#include <common/os/filesystem.h>
#include <boost/filesystem.hpp>
#include <boost/lexical_cast.hpp>
L".j2k",
L".j2c"
};
- std::wstring filename = env::media_folder() + L"\\" + params[0];
+ std::wstring filename = env::media_folder() + params[0];
auto ext = std::find_if(extensions.begin(), extensions.end(), [&](const std::wstring& ex) -> bool
- {
- return boost::filesystem::is_regular_file(boost::filesystem::path(filename).replace_extension(ex));
- });
+ {
+ auto file = caspar::find_case_insensitive(boost::filesystem::path(filename).replace_extension(ex).wstring());
+
+ return static_cast<bool>(file);
+ });
if(ext == extensions.end())
return core::frame_producer::empty();
bool progressive = contains_param(L"PROGRESSIVE", params);
return core::create_destroy_proxy(spl::make_shared<image_scroll_producer>(
- frame_factory,
- format_desc,
- filename + *ext,
- -speed,
- -duration,
- motion_blur_px,
- premultiply_with_alpha,
- progressive));
+ frame_factory,
+ format_desc,
+ *caspar::find_case_insensitive(filename + *ext),
+ -speed,
+ -duration,
+ motion_blur_px,
+ premultiply_with_alpha,
+ progressive));
}
-}}
\ No newline at end of file
+}}
if(!boost::filesystem::exists(filename))
CASPAR_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(u8(filename)));
- FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeU(filename.c_str(), 0);
+#ifdef WIN32
+ FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeU(filename.c_str(), 0);
+#else
+ FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(u8(filename).c_str(), 0);
+#endif
if(fif == FIF_UNKNOWN || !FreeImage_FIFSupportsReading(fif))
CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));
+#ifdef WIN32
auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_LoadU(fif, filename.c_str(), 0), FreeImage_Unload);
+#else
+ auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_Load(fif, u8(filename).c_str(), 0), FreeImage_Unload);
+#endif
if(FreeImage_GetBPP(bitmap.get()) != 32)
{
return bitmap;
}
-}}
\ No newline at end of file
+}}
#include <common/log.h>
#include <common/param.h>
#include <common/os/system_info.h>
+#include <common/os/filesystem.h>
#include <common/base64.h>
#include <core/producer/frame_producer.h>
using namespace core;
-std::wstring read_file_base64(const boost::filesystem::wpath& file)
+std::wstring read_file_base64(const boost::filesystem::path& file)
{
using namespace boost::archive::iterators;
return std::wstring(result.begin(), result.end());
}
-std::wstring read_utf8_file(const boost::filesystem::wpath& file)
+std::wstring read_utf8_file(const boost::filesystem::path& file)
{
std::wstringstream result;
boost::filesystem::wifstream filestream(file);
return result.str();
}
-std::wstring read_latin1_file(const boost::filesystem::wpath& file)
+std::wstring read_latin1_file(const boost::filesystem::path& file)
{
boost::locale::generator gen;
gen.locale_cache_enabled(true);
return widened_result;
}
-std::wstring read_file(const boost::filesystem::wpath& file)
+std::wstring read_file(const boost::filesystem::path& file)
{
static const uint8_t BOM[] = {0xef, 0xbb, 0xbf};
auto is_not_digit = [](char c){ return std::isdigit(c) == 0; };
- auto relativePath = boost::filesystem::wpath(path.wstring().substr(env::media_folder().size() - 1, path.wstring().size()));
+ auto relativePath = boost::filesystem::path(path.wstring().substr(env::media_folder().size() - 1, path.wstring().size()));
auto writeTimeStr = boost::posix_time::to_iso_string(boost::posix_time::from_time_t(boost::filesystem::last_write_time(path)));
writeTimeStr.erase(std::remove_if(writeTimeStr.begin(), writeTimeStr.end(), is_not_digit), writeTimeStr.end());
{
if(boost::filesystem::is_regular_file(itr->path()) && cg_registry->is_cg_extension(itr->path().extension().wstring()))
{
- auto relativePath = boost::filesystem::wpath(itr->path().wstring().substr(env::template_folder().size()-1, itr->path().wstring().size()));
+ auto relativePath = boost::filesystem::path(itr->path().wstring().substr(env::template_folder().size()-1, itr->path().wstring().size()));
auto writeTimeStr = boost::posix_time::to_iso_string(boost::posix_time::from_time_t(boost::filesystem::last_write_time(itr->path())));
writeTimeStr.erase(std::remove_if(writeTimeStr.begin(), writeTimeStr.end(), [](char c){ return std::isdigit(c) == 0;}), writeTimeStr.end());
filename.append(dataString);
filename.append(L".ftd");
- dataFromFile = read_file(boost::filesystem::wpath(filename));
- pDataString = dataFromFile.c_str();
+ auto found_file = find_case_insensitive(filename);
+
+ if (found_file)
+ {
+ dataFromFile = read_file(boost::filesystem::path(*found_file));
+ pDataString = dataFromFile.c_str();
+ }
}
}
filename.append(dataString);
filename.append(L".ftd");
- dataString = read_file(boost::filesystem::wpath(filename));
+ dataString = read_file(boost::filesystem::path(filename));
}
int layer = boost::lexical_cast<int>(parameters()[1]);
filename.append(parameters()[1]);
filename.append(L".ftd");
- auto data_path = boost::filesystem::wpath(
- boost::filesystem::wpath(filename).parent_path());
+ auto data_path = boost::filesystem::path(filename).parent_path().wstring();
+ auto found_data_path = find_case_insensitive(data_path);
+
+ if (found_data_path)
+ data_path = *found_data_path;
if(!boost::filesystem::exists(data_path))
boost::filesystem::create_directories(data_path);
+ auto found_filename = find_case_insensitive(filename);
+
+ if (found_filename)
+ filename = *found_filename; // Overwrite case insensitive.
+
boost::filesystem::wofstream datafile(filename);
if(!datafile)
{
filename.append(parameters()[1]);
filename.append(L".ftd");
- std::wstring file_contents = read_file(boost::filesystem::wpath(filename));
+ std::wstring file_contents;
+
+ auto found_file = find_case_insensitive(filename);
+
+ if (found_file)
+ file_contents = read_file(boost::filesystem::path(*found_file));
if (file_contents.empty())
{
if(!boost::iequals(itr->path().extension().wstring(), L".ftd"))
continue;
- auto relativePath = boost::filesystem::wpath(itr->path().wstring().substr(env::data_folder().size()-1, itr->path().wstring().size()));
+ auto relativePath = boost::filesystem::path(itr->path().wstring().substr(env::data_folder().size()-1, itr->path().wstring().size()));
auto str = relativePath.replace_extension(L"").generic_wstring();
if(str[0] == L'\\' || str[0] == L'/')
boost::property_tree::wptree info;
info.add_child(L"paths", caspar::env::properties().get_child(L"configuration.paths"));
- info.add(L"paths.initial-path", boost::filesystem::initial_path().wstring() + L"\\");
+ info.add(L"paths.initial-path", boost::filesystem::initial_path().wstring() + L"/");
boost::property_tree::write_xml(replyString, info, w);
}
filename.append(parameters()[1]);
filename.append(L".png");
- std::wstring file_contents = read_file_base64(boost::filesystem::wpath(filename));
+ std::wstring file_contents;
+
+ auto found_file = find_case_insensitive(filename);
+
+ if (found_file)
+ file_contents = read_file_base64(boost::filesystem::path(*found_file));
if (file_contents.empty())
{
if(!boost::iequals(itr->path().extension().wstring(), L".png"))
continue;
- auto relativePath = boost::filesystem::wpath(itr->path().wstring().substr(env::thumbnails_folder().size()-1, itr->path().wstring().size()));
+ auto relativePath = boost::filesystem::path(itr->path().wstring().substr(env::thumbnails_folder().size()-1, itr->path().wstring().size()));
auto str = relativePath.replace_extension(L"").generic_wstring();
if(str[0] == '\\' || str[0] == '/')
reroute
)
+add_custom_target(casparcg_copy_dependencies ALL)
+
casparcg_add_runtime_dependency("${LIBERATION_FONTS_BIN_PATH}/LiberationSans-Regular.ttf")
casparcg_add_runtime_dependency("${CMAKE_CURRENT_SOURCE_DIR}/casparcg.config")
set(OUTPUT_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
foreach(FILE_TO_COPY ${CASPARCG_RUNTIME_DEPENDENCIES})
- add_custom_command(TARGET casparcg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy \"${FILE_TO_COPY}\" \"${OUTPUT_FOLDER}/\")
- add_custom_command(TARGET casparcg POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy \"${FILE_TO_COPY}\" \"${CMAKE_CURRENT_BINARY_DIR}/\")
+ add_custom_command(TARGET casparcg_copy_dependencies POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy \"${FILE_TO_COPY}\" \"${OUTPUT_FOLDER}/\")
+ add_custom_command(TARGET casparcg_copy_dependencies POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy \"${FILE_TO_COPY}\" \"${CMAKE_CURRENT_BINARY_DIR}/\")
endforeach(FILE_TO_COPY)
#include "platform_specific.h"
+#include <exception>
+#include <common/log.h>
+
+#include <iostream>
+
+#include <X11/Xlib.h>
+
namespace caspar {
void setup_prerequisites()
{
- // TODO: implement if needed.
+ XInitThreads();
+
+ std::set_terminate([]
+ {
+ CASPAR_LOG_CURRENT_EXCEPTION();
+ });
}
void setup_console_window()
{
int return_code = 0;
setup_prerequisites();
- std::signal(SIGABRT, on_abort);
+ //std::signal(SIGABRT, on_abort);
setup_global_locale();