egl: Add support for driver built-in.
[mesa.git] / src / egl / main / egllog.c
1 /**
2 * Logging facility for debug/info messages.
3 * _EGL_FATAL messages are printed to stderr
4 * The EGL_LOG_LEVEL var controls the output of other warning/info/debug msgs.
5 */
6
7
8 #include <stdarg.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include "egllog.h"
13
14 #define MAXSTRING 1000
15 #define FALLBACK_LOG_LEVEL _EGL_WARNING
16 #define FALLBACK_LOG_LEVEL_STR "warning"
17
18 static EGLint ReportingLevel = -1;
19
20
21 static void
22 log_level_initialize(void)
23 {
24 char *log_env = getenv("EGL_LOG_LEVEL");
25
26 if (log_env == NULL) {
27 ReportingLevel = FALLBACK_LOG_LEVEL;
28 }
29 else if (strcasecmp(log_env, "fatal") == 0) {
30 ReportingLevel = _EGL_FATAL;
31 }
32 else if (strcasecmp(log_env, "warning") == 0) {
33 ReportingLevel = _EGL_WARNING;
34 }
35 else if (strcasecmp(log_env, "info") == 0) {
36 ReportingLevel = _EGL_INFO;
37 }
38 else if (strcasecmp(log_env, "debug") == 0) {
39 ReportingLevel = _EGL_DEBUG;
40 }
41 else {
42 fprintf(stderr, "Unrecognized EGL_LOG_LEVEL environment variable value. "
43 "Expected one of \"fatal\", \"warning\", \"info\", \"debug\". "
44 "Got \"%s\". Falling back to \"%s\".\n",
45 log_env, FALLBACK_LOG_LEVEL_STR);
46 ReportingLevel = FALLBACK_LOG_LEVEL;
47 }
48 }
49
50
51 /**
52 * Log a message to stderr.
53 * \param level one of _EGL_FATAL, _EGL_WARNING, _EGL_INFO, _EGL_DEBUG.
54 */
55 void
56 _eglLog(EGLint level, const char *fmtStr, ...)
57 {
58 va_list args;
59 char msg[MAXSTRING];
60 const char *levelStr;
61 static int log_level_initialized = 0;
62
63 if (!log_level_initialized) {
64 log_level_initialize();
65 log_level_initialized = 1;
66 }
67
68 if (level <= ReportingLevel) {
69 switch (level) {
70 case _EGL_FATAL:
71 levelStr = "Fatal";
72 break;
73 case _EGL_WARNING:
74 levelStr = "Warning";
75 break;
76 case _EGL_INFO:
77 levelStr = "Info";
78 break;
79 case _EGL_DEBUG:
80 levelStr = "Debug";
81 break;
82 default:
83 levelStr = "";
84 }
85
86 va_start(args, fmtStr);
87 vsnprintf(msg, MAXSTRING, fmtStr, args);
88 va_end(args);
89
90 fprintf(stderr, "libEGL %s: %s\n", levelStr, msg);
91
92 if (level == _EGL_FATAL) {
93 exit(1); /* or abort()? */
94 }
95 }
96 }