Add preprocessor messages (stdout, stderr) to the logfile

Closes #306
time-shift
Sébastien Villemot 2013-03-18 13:44:04 +01:00
parent ba889e853c
commit cda0e03776
3 changed files with 24 additions and 5 deletions

View File

@ -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')

View File

@ -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;

View File

@ -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