From 65dc32f9ec083c763761c79fb9306032e32e89b5 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Sun, 18 May 2014 23:02:24 +0100 Subject: Add back libardour wrappers for PBD::SystemExec Add back ARDOUR::SystemExec wrapper for PBD::SystemExec, and add constructor for command line with parameter substitution. --- libs/ardour/ardour/system_exec.h | 51 ++++++++++++++++++++++++++ libs/ardour/system_exec.cc | 78 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 libs/ardour/ardour/system_exec.h create mode 100644 libs/ardour/system_exec.cc (limited to 'libs') diff --git a/libs/ardour/ardour/system_exec.h b/libs/ardour/ardour/system_exec.h new file mode 100644 index 0000000000..ae865c7bff --- /dev/null +++ b/libs/ardour/ardour/system_exec.h @@ -0,0 +1,51 @@ +/* + Copyright (C) 2010 Paul Davis + Copyright (C) 2010-2014 Robin Gareus + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ +#ifndef _ardour_system_exec_h_ +#define _ardour_system_exec_h_ + +#include "ardour/libardour_visibility.h" +#include "pbd/system_exec.h" + +namespace ARDOUR { + +class LIBARDOUR_API SystemExec + : public PBD::SystemExec +{ + +public: + SystemExec (std::string c, std::string a = ""); + SystemExec (std::string c, char ** a); + SystemExec (std::string c, const std::map subs); + ~SystemExec (); + + int start (int stderr_mode = 1) { + return PBD::SystemExec::start(stderr_mode, _vfork_exec_wrapper); + } + +private: + static char * _vfork_exec_wrapper; + +}; /* end class */ + +}; /* end namespace */ + +#endif /* _libpbd_system_exec_h_ */ + + diff --git a/libs/ardour/system_exec.cc b/libs/ardour/system_exec.cc new file mode 100644 index 0000000000..760a9b7878 --- /dev/null +++ b/libs/ardour/system_exec.cc @@ -0,0 +1,78 @@ +/* + Copyright (C) 2010 Paul Davis + Copyright (C) 2010-2014 Robin Gareus + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include "pbd/pathscanner.h" +#include "pbd/file_utils.h" +#include "pbd/error.h" + +#include "ardour/filesystem_paths.h" +#include "ardour/system_exec.h" + +using namespace ARDOUR; + +char * SystemExec::_vfork_exec_wrapper = NULL; + +static char *vfork_exec_wrapper_path() { +#ifdef PLATFORM_WINDOWS + return NULL; +#else + std::string vfork_exec_wrapper; + if (!PBD::find_file_in_search_path ( + PBD::Searchpath(Glib::build_filename(ARDOUR::ardour_dll_directory(), "vfork")), + "ardour-exec-wrapper", vfork_exec_wrapper)) { + PBD::warning << "vfork exec wrapper not found..'" << endmsg; + return NULL; + } + return strdup(vfork_exec_wrapper.c_str()); +#endif +} + +SystemExec::SystemExec (std::string c, char ** a) + : PBD::SystemExec(c, a) +{ +#ifndef PLATFORM_WINDOWS + if (!_vfork_exec_wrapper) { + _vfork_exec_wrapper = vfork_exec_wrapper_path(); + } +#endif +} + +SystemExec::SystemExec (std::string c, std::string a) + : PBD::SystemExec(c, a) +{ +#ifndef PLATFORM_WINDOWS + if (!_vfork_exec_wrapper) { + _vfork_exec_wrapper = vfork_exec_wrapper_path(); + } +#endif +} + +SystemExec::SystemExec (std::string c, const std::map subs) + : PBD::SystemExec(c, subs) +{ +#ifndef PLATFORM_WINDOWS + if (!_vfork_exec_wrapper) { + _vfork_exec_wrapper = vfork_exec_wrapper_path(); + } +#endif +} + +SystemExec::~SystemExec() { } -- cgit v1.2.3