mesa: new MESA_LOG_FILE env var to log errors, warnings, etc., to a file
authorBrian Paul <brianp@vmware.com>
Mon, 25 Jun 2012 17:43:03 +0000 (11:43 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 25 Jun 2012 22:10:01 +0000 (16:10 -0600)
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
docs/envvars.html
src/mesa/main/errors.c

index fffb50a47185973da4e588689d6a1ba86cf3f25d..102ea287eb841e15b31e714a21b2ee6bbe1830ce 100644 (file)
@@ -42,6 +42,8 @@ sometimes be useful for debugging end-user issues.
    printed to stderr.<br>
    If the value of MESA_DEBUG is 'FP' floating point arithmetic errors will
    generate exceptions.
+<li>MESA_LOG_FILE - specifies a file name for logging all errors, warnings,
+etc., rather than stderr
 <li>MESA_TEX_PROG - if set, implement conventional texture env modes with
 fragment programs (intended for developers only)
 <li>MESA_TNL_PROG - if set, implement conventional vertex transformation
index 69dbb65cf4037f26a05a96183347e167b3894549..ef78a0bca46301f0c390d4eed01ca3a10cf601cc 100644 (file)
@@ -801,12 +801,21 @@ output_if_debug(const char *prefixString, const char *outputString,
                 GLboolean newline)
 {
    static int debug = -1;
+   static FILE *fout = NULL;
 
    /* Init the local 'debug' var once.
     * Note: the _mesa_init_debug() function should have been called
     * by now so MESA_DEBUG_FLAGS will be initialized.
     */
    if (debug == -1) {
+      /* If MESA_LOG_FILE env var is set, log Mesa errors, warnings,
+       * etc to the named file.  Otherwise, output to stderr.
+       */
+      const char *logFile = _mesa_getenv("MESA_LOG_FILE");
+      if (logFile)
+         fout = fopen(logFile, "w");
+      if (!fout)
+         fout = stderr;
 #ifdef DEBUG
       /* in debug builds, print messages unless MESA_DEBUG="silent" */
       if (MESA_DEBUG_FLAGS & DEBUG_SILENT)
@@ -821,9 +830,10 @@ output_if_debug(const char *prefixString, const char *outputString,
 
    /* Now only print the string if we're required to do so. */
    if (debug) {
-      fprintf(stderr, "%s: %s", prefixString, outputString);
+      fprintf(fout, "%s: %s", prefixString, outputString);
       if (newline)
-         fprintf(stderr, "\n");
+         fprintf(fout, "\n");
+      fflush(fout);
 
 #if defined(_WIN32) && !defined(_WIN32_WCE)
       /* stderr from windows applications without console is not usually