#ifndef __ANDROID_DEBUG_H__ #define __ANDROID_DEBUG_H__ // Redirect printf() to Android log // Put this file into CFLAGS: "-include ../android_debug.h" #include #include #include #ifdef __cplusplus // Include everything beforehand, so we wont' get compiler errors because of our #define #include #include #include #include #include #include namespace std { class android_cout: public ostringstream { public: android_cout() {} template android_cout &operator<<(const T &v) { *((ostringstream*)this) << v; if( this->str().find('\n') != ::std::string::npos ) { __android_log_print(ANDROID_LOG_INFO, "LIBGL", "%s", this->str().c_str()); this->str().clear(); } return *this; } ~android_cout() { __android_log_print(ANDROID_LOG_INFO, "LIBGL", "%s", this->str().c_str()); this->str().clear(); } }; static const char * android_endl = "\n"; } #define cout android_cout() #define cerr android_cout() #define endl android_endl #endif #define printf(...) __android_log_print(ANDROID_LOG_INFO, "LIBGL", __VA_ARGS__) /* // Override fprintf(stderr, ...) constructs static inline int __sdl_logged_fprintf(FILE *stream, const char *format, ...) { int ret = 0; va_list args; va_start(args, format); if( stream == stderr || stream == stdout ) ret = __android_log_vprint(ANDROID_LOG_INFO, "LIBGL", format, args); else ret = vfprintf(stream, format, args); va_end(args); return ret; } #define fprintf(...) __sdl_logged_fprintf(__VA_ARGS__) */ #endif