From: Carl Hetherington Date: Sun, 2 Feb 2020 18:56:22 +0000 (+0100) Subject: boost exception test. X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=0b59b4f8da889a547a1be03f51118769d73aff2a;p=dcpomatic.git boost exception test. --- 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 + Copyright (C) 2014-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -18,6 +18,22 @@ */ +#ifndef DCPOMATIC_ASSERT_H +#define DCPOMATIC_ASSERT_H + #include "exceptions.h" +#include +#include + +typedef boost::error_info traced; + +template +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(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(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)