Commit cda0e037 authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Add preprocessor messages (stdout, stderr) to the logfile

Closes #306
parent ba889e85
......@@ -102,7 +102,21 @@ for i=2:nargin
end
[status, result] = system(command);
disp(result)
% Save preprocessor result in logfile (if `no_log' option not present)
no_log = 0;
for i=2:nargin
no_log = no_log || strcmp(varargin{i-1}, "nolog");
end
if ~no_log
logname = [ substr(fname, 1, -4) ".log" ];
fid = fopen(logname, "w");
fputs(fid, result);
fclose(fid);
end
if status
% Should not use "error(result)" since message will be truncated if too long
error('DYNARE: preprocessing failed')
......
......@@ -30,6 +30,8 @@ using namespace std;
#endif
#include "macro/MacroDriver.hh"
#include <unistd.h>
/* Prototype for second part of main function
Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be
included simultaneously (because of Bison limitations).
......@@ -58,6 +60,13 @@ usage()
int
main(int argc, char **argv)
{
/*
Redirect stderr to stdout.
Made necessary because MATLAB/Octave can only capture stdout (but not
stderr), in order to put it in the logfile (see issue #306)
*/
dup2(STDOUT_FILENO, STDERR_FILENO);
if (argc < 2)
{
cerr << "Missing model file!" << endl;
......
......@@ -477,11 +477,7 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b
mOutputFile << "global_initialization;" << endl
<< "diary off;" << endl;
if (!no_log)
mOutputFile << "logname_ = '" << basename << ".log';" << endl
<< "if exist(logname_, 'file')" << endl
<< " delete(logname_)" << endl
<< "end" << endl
<< "diary(logname_)" << endl;
mOutputFile << "diary('" << basename << ".log');" << endl;
if (console)
mOutputFile << "options_.console_mode = 1;" << endl
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment