diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-02-02 19:56:22 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-02-02 20:17:35 +0100 |
| commit | 0b59b4f8da889a547a1be03f51118769d73aff2a (patch) | |
| tree | 205b26a4913a38fdcf5d96f77a2bbbade13d23ab | |
| parent | ea6b2dae46caa1da829fbf499e83cd6ae3b3773a (diff) | |
boost exception test.
| -rw-r--r-- | src/lib/audio_buffers.cc | 10 | ||||
| -rw-r--r-- | src/lib/dcpomatic_assert.h | 20 | ||||
| -rw-r--r-- | src/tools/dcpomatic.cc | 10 | ||||
| -rw-r--r-- | src/tools/wscript | 3 | ||||
| -rw-r--r-- | test/wscript | 2 | ||||
| -rw-r--r-- | wscript | 3 |
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 @@ -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) |
