util: add GALLIUM_LOG_FILE option for logging output to a file
authorBrian Paul <brianp@vmware.com>
Tue, 22 May 2012 15:32:50 +0000 (09:32 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 25 May 2012 16:02:21 +0000 (10:02 -0600)
Useful for logging different runs to files and diffing, etc.

src/gallium/auxiliary/os/os_misc.c
src/gallium/auxiliary/util/u_debug.c

index 5744dd5b4fcd253db2e51d2f4b8044a6c75f7418..447e7208f69b60d57722d73c5ace1dbc08616ca6 100644 (file)
 void
 os_log_message(const char *message)
 {
+   /* If the GALLIUM_LOG_FILE environment variable is set to a valid filename,
+    * write all messages to that file.
+    */
+   static FILE *fout = NULL;
+
+   if (!fout) {
+      /* one-time init */
+      const char *filename = os_get_option("GALLIUM_LOG_FILE");
+      if (filename)
+         fout = fopen(filename, "w");
+      if (!fout)
+         fout = stderr;
+   }
+
 #if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
    OutputDebugStringA(message);
    if(GetConsoleWindow() && !IsDebuggerPresent()) {
       fflush(stdout);
-      fputs(message, stderr);
-      fflush(stderr);
+      fputs(message, fout);
+      fflush(fout);
+   }
+   else if (fout != stderr) {
+      fputs(message, fout);
+      fflush(fout);
    }
 #else /* !PIPE_SUBSYSTEM_WINDOWS */
    fflush(stdout);
-   fputs(message, stderr);
+   fputs(message, fout);
+   fflush(fout);
 #endif
 }
 
index df1d8e68cfda826b8221450778a381004b9ecb2d..0a350cae7ddc5993c663fca899f741259312c0eb 100644 (file)
@@ -48,9 +48,9 @@
 
 void _debug_vprintf(const char *format, va_list ap)
 {
+   static char buf[4096] = {'\0'};
 #if defined(PIPE_OS_WINDOWS) || defined(PIPE_SUBSYSTEM_EMBEDDED)
    /* We buffer until we find a newline. */
-   static char buf[4096] = {'\0'};
    size_t len = strlen(buf);
    int ret = util_vsnprintf(buf + len, sizeof(buf) - len, format, ap);
    if(ret > (int)(sizeof(buf) - len - 1) || util_strchr(buf + len, '\n')) {
@@ -58,8 +58,8 @@ void _debug_vprintf(const char *format, va_list ap)
       buf[0] = '\0';
    }
 #else
-   /* Just print as-is to stderr */
-   vfprintf(stderr, format, ap);
+   util_vsnprintf(buf, sizeof(buf), format, ap);
+   os_log_message(buf);
 #endif
 }