summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-02-02 19:56:22 +0100
committerCarl Hetherington <cth@carlh.net>2020-02-02 20:17:35 +0100
commit0b59b4f8da889a547a1be03f51118769d73aff2a (patch)
tree205b26a4913a38fdcf5d96f77a2bbbade13d23ab
parentea6b2dae46caa1da829fbf499e83cd6ae3b3773a (diff)
boost exception test.
-rw-r--r--src/lib/audio_buffers.cc10
-rw-r--r--src/lib/dcpomatic_assert.h20
-rw-r--r--src/tools/dcpomatic.cc10
-rw-r--r--src/tools/wscript3
-rw-r--r--test/wscript2
-rw-r--r--wscript3
6 files changed, 42 insertions, 6 deletions
diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc
index 63204dd6a..f426c2b98 100644
--- a/src/lib/audio_buffers.cc
+++ b/src/lib/audio_buffers.cc
@@ -185,10 +185,14 @@ AudioBuffers::copy_from (AudioBuffers const * from, int32_t frames_to_copy, int3
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) {
diff --git a/src/lib/dcpomatic_assert.h b/src/lib/dcpomatic_assert.h
index a9851d0f8..b8adc5225 100644
--- a/src/lib/dcpomatic_assert.h
+++ b/src/lib/dcpomatic_assert.h
@@ -1,5 +1,5 @@
/*
- 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.
@@ -18,6 +18,22 @@
*/
+#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
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index 47851a218..d50604740 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -450,6 +450,11 @@ public:
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()));
}
@@ -1683,6 +1688,11 @@ private:
)
);
} 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 (
diff --git a/src/tools/wscript b/src/tools/wscript
index 3b2c0a04c..ad8d00c25 100644
--- a/src/tools/wscript
+++ b/src/tools/wscript
@@ -35,6 +35,9 @@ def build(bld):
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']
diff --git a/test/wscript b/test/wscript
index 3c6170dcf..71990c927 100644
--- a/test/wscript
+++ b/test/wscript
@@ -39,6 +39,8 @@ def build(bld):
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
diff --git a/wscript b/wscript
index c61b86782..f2b0c43f3 100644
--- a/wscript
+++ b/wscript
@@ -187,7 +187,7 @@ def configure(conf):
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:
@@ -196,6 +196,7 @@ def configure(conf):
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)