Free Electron
logging.h
1 #ifndef LOGGING_H
2 #define LOGGING_H
3 
4 #include <stdio.h>
5 
6 
7 #ifdef __GNUC__
8 #define DECL_FORMAT(x, y, z) __attribute__((format(x, (y), (z))))
9 #else
10 #define DECL_FORMAT(x, y, z)
11 #endif
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 extern FILE *LogFile;
18 
19 #if defined(__GNUC__) && !defined(_WIN32)
20 #define AL_PRINT(T, MSG, ...) fprintf(LogFile, "AL lib: %s %s: "MSG, T, __FUNCTION__ , ## __VA_ARGS__)
21 #else
22 void al_print(const char *type, const char *func, const char *fmt, ...) DECL_FORMAT(printf, 3,4);
23 #define AL_PRINT(T, ...) al_print((T), __FUNCTION__, __VA_ARGS__)
24 #endif
25 
26 #ifdef __ANDROID__
27 #include <android/log.h>
28 #define LOG_ANDROID(T, MSG, ...) __android_log_print(T, "openal", "AL lib: %s: "MSG, __FUNCTION__ , ## __VA_ARGS__)
29 #else
30 #define LOG_ANDROID(T, MSG, ...) ((void)0)
31 #endif
32 
33 enum LogLevel {
34  NoLog,
35  LogError,
36  LogWarning,
37  LogTrace,
38  LogRef
39 };
40 extern enum LogLevel LogLevel;
41 
42 #define TRACEREF(...) do { \
43  if(LogLevel >= LogRef) \
44  AL_PRINT("(--)", __VA_ARGS__); \
45 } while(0)
46 
47 #define TRACE(...) do { \
48  if(LogLevel >= LogTrace) \
49  AL_PRINT("(II)", __VA_ARGS__); \
50  LOG_ANDROID(ANDROID_LOG_DEBUG, __VA_ARGS__); \
51 } while(0)
52 
53 #define WARN(...) do { \
54  if(LogLevel >= LogWarning) \
55  AL_PRINT("(WW)", __VA_ARGS__); \
56  LOG_ANDROID(ANDROID_LOG_WARN, __VA_ARGS__); \
57 } while(0)
58 
59 #define ERR(...) do { \
60  if(LogLevel >= LogError) \
61  AL_PRINT("(EE)", __VA_ARGS__); \
62  LOG_ANDROID(ANDROID_LOG_ERROR, __VA_ARGS__); \
63 } while(0)
64 
65 #ifdef __cplusplus
66 } /* extern "C" */
67 #endif
68 
69 #endif /* LOGGING_H */