return;
}
- DCPOMATIC_ASSERT (from->channels() == channels());
-
+ read_offset = -1; // XXX
DCPOMATIC_ASSERT (from);
- DCPOMATIC_ASSERT (read_offset >= 0 && (read_offset + frames_to_copy) <= from->_allocated_frames);
+ DCPOMATIC_ASSERT (from->channels() == channels());
+ DCPOMATIC_ASSERT_MESSAGE (
+ read_offset >= 0 && (read_offset + frames_to_copy) <= from->_allocated_frames,
+ "(read_offset=%1, frames_to_copy=%2, _allocated_frames=%3)",
+ read_offset, read_offset + frames_to_copy, from->_allocated_frames
+ );
DCPOMATIC_ASSERT (write_offset >= 0 && (write_offset + frames_to_copy) <= _allocated_frames);
for (int i = 0; i < _channels; ++i) {
/*
- Copyright (C) 2014 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
*/
+#ifndef DCPOMATIC_ASSERT_H
+#define DCPOMATIC_ASSERT_H
+
#include "exceptions.h"
+#include <boost/stacktrace.hpp>
+#include <boost/exception/all.hpp>
+
+typedef boost::error_info<struct tag_stacktrace, boost::stacktrace::stacktrace> traced;
+
+template <class E>
+void throw_with_trace(E const& e)
+{
+ throw boost::enable_error_info(e) << traced(boost::stacktrace::stacktrace());
+}
+
+#define DCPOMATIC_ASSERT(x) if (!(x)) throw_with_trace(ProgrammingError (__FILE__, __LINE__));
+#define DCPOMATIC_ASSERT_MESSAGE(x, m, ...) if (!(x)) throw_with_trace(ProgrammingError(__FILE__, __LINE__, String::compose(m, __VA_ARGS__)));
-#define DCPOMATIC_ASSERT(x) if (!(x)) throw ProgrammingError (__FILE__, __LINE__);
+#endif
catch (std::exception& e) {
wxString p = std_to_wx (file.string ());
wxCharBuffer b = p.ToUTF8 ();
+ boost::stacktrace::stacktrace* st = boost::get_error_info<traced>(e);
+ std::cout << "Amiga!\n";
+ if (st) {
+ std::cout << "Awooga! " << *st << "\n";
+ }
error_dialog (this, wxString::Format (_("Could not open film at %s"), p.data()), std_to_wx (e.what()));
}
)
);
} catch (exception& e) {
+ boost::stacktrace::stacktrace* st = boost::get_error_info<traced>(e);
+ std::cout << "Amiga!\n";
+ if (st) {
+ std::cout << "Awooga! " << *st << "\n";
+ }
error_dialog (
0,
wxString::Format (
if bld.env.TARGET_WINDOWS:
uselib += 'WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE WINSOCK2 OLE32 DSOUND WINMM KSUSER '
+ if bld.env.TARGET_LINUX:
+ uselib += 'DL'
+
cli_tools = []
if bld.env.VARIANT == 'swaroop-theater':
cli_tools = [ 'dcpomatic_uuid']
obj.uselib += 'AVFORMAT AVFILTER AVCODEC AVUTIL SWSCALE SWRESAMPLE POSTPROC CXML SUB GLIB CURL SSH XMLSEC BOOST_REGEX ICU NETTLE MAGICK PNG '
if bld.env.TARGET_WINDOWS:
obj.uselib += 'WINSOCK2 DBGHELP SHLWAPI MSWSOCK BOOST_LOCALE '
+ if bld.env.TARGET_LINUX:
+ obj.uselib += 'DL '
obj.use = 'libdcpomatic2'
obj.source = """
4k_test.cc
conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_POSIX')
boost_lib_suffix = ''
boost_thread = 'boost_thread'
- conf.env.append_value('LINKFLAGS', '-pthread')
+ conf.env.append_value('LINKFLAGS', ['-pthread'])
# Linux
if conf.env.TARGET_LINUX:
conf.env.append_value('CXXFLAGS', '-DLINUX_SHARE_PREFIX="%s/share/dcpomatic2"' % conf.env['INSTALL_PREFIX'])
conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_LINUX')
conf.env.append_value('CXXFLAGS', ['-Wlogical-op', '-Wcast-align'])
+ conf.check(lib='dl', uselib_store='DL', msg="Checking for library dl")
if not conf.env.DISABLE_GUI:
conf.check_cfg(package='gtk+-2.0', args='--cflags --libs', uselib_store='GTK', mandatory=True)