summaryrefslogtreecommitdiff
path: root/include_server/test_data/distcc/src/trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'include_server/test_data/distcc/src/trace.h')
-rw-r--r--include_server/test_data/distcc/src/trace.h230
1 files changed, 230 insertions, 0 deletions
diff --git a/include_server/test_data/distcc/src/trace.h b/include_server/test_data/distcc/src/trace.h
new file mode 100644
index 0000000..0d99e0f
--- /dev/null
+++ b/include_server/test_data/distcc/src/trace.h
@@ -0,0 +1,230 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- generate and apply network deltas
+ *
+ * Copyright (C) 2000, 2001, 2002, 2003, 2004 by Martin Pool
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/**
+ * @file
+ *
+ * Reusable trace library.
+ *
+ * @todo A function like perror that includes strerror output. Apache
+ * does this by adding flags as well as the severity level which say
+ * whether such information should be included.
+ *
+ * @todo Also check in configure for the C9X predefined identifier `_function', or
+ * whatever it's called.
+ **/
+
+/* Provide simple macro statement wrappers (adapted from glib, and originally from Perl):
+ * RS_STMT_START { statements; } RS_STMT_END;
+ * can be used as a single statement, as in
+ * if (x) RS_STMT_START { ... } RS_STMT_END; else ...
+ *
+ * For gcc we will wrap the statements within `({' and `})' braces.
+ * For SunOS they will be wrapped within `if (1)' and `else (void) 0',
+ * and otherwise within `do' and `while (0)'.
+ */
+#if !(defined (RS_STMT_START) && defined (RS_STMT_END))
+# if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
+# define RS_STMT_START (void)(
+# define RS_STMT_END )
+# else
+# if (defined (sun) || defined (__sun__))
+# define RS_STMT_START if (1)
+# define RS_STMT_END else (void)0
+# else
+# define RS_STMT_START do
+# define RS_STMT_END while (0)
+# endif
+# endif
+#endif
+
+
+#include <stdarg.h>
+
+/* unconditionally on */
+#define DO_RS_TRACE
+
+/**
+ * Log severity levels.
+ *
+ * These have the same numeric values as the levels for syslog, at
+ * least in glibc.
+ *
+ * Trace may be turned off.
+ *
+ * Error is always on, but you can return and continue in some way.
+ */
+typedef enum {
+ RS_LOG_EMERG = 0, /**< System is unusable */
+ RS_LOG_ALERT = 1, /**< Action must be taken immediately */
+ RS_LOG_CRIT = 2, /**< Critical conditions */
+ RS_LOG_ERR = 3, /**< Error conditions */
+ RS_LOG_WARNING = 4, /**< Warning conditions */
+ RS_LOG_NOTICE = 5, /**< Normal but significant condition */
+ RS_LOG_INFO = 6, /**< Informational */
+ RS_LOG_DEBUG = 7 /**< Debug-level messages */
+} rs_loglevel;
+
+int rs_loglevel_from_name(const char *name);
+
+enum {
+ RS_LOG_PRIMASK = 7, /**< Mask to extract priority
+ part. \internal */
+
+ RS_LOG_NONAME = 8, /**< \b Don't show function name in
+ message. */
+
+ RS_LOG_NO_PROGRAM = 16,
+ RS_LOG_NO_PID = 32
+};
+
+
+/**
+ * \typedef rs_logger_fn
+ * \brief Callback to write out log messages.
+ * \param level a syslog level.
+ * \param msg message to be logged.
+ *
+ * \param private Opaque data passed in when logger was added. For
+ * example, pointer to file descriptor.
+ */
+typedef void rs_logger_fn(int flags, const char *fn,
+ char const *msg, va_list,
+ void *private_ptr, int private_int);
+
+void rs_format_msg(char *buf, size_t, int, const char *,
+ const char *fmt, va_list);
+
+void rs_trace_set_level(rs_loglevel level);
+
+void rs_add_logger(rs_logger_fn *, int level, void *, int);
+void rs_remove_logger(rs_logger_fn *, int level, void *, int);
+void rs_remove_all_loggers(void);
+
+
+void rs_logger_file(int level, const char *fn, char const *fmt, va_list va,
+ void *, int);
+
+void rs_logger_syslog(int level, const char *fn, char const *fmt, va_list va,
+ void *, int);
+
+/** Check whether the library was compiled with debugging trace suport. */
+int rs_supports_trace(void);
+
+void rs_log0(int level, char const *fn, char const *fmt, ...)
+#if defined(__GNUC__)
+ __attribute__ ((format(printf, 3, 4)))
+#endif /* __GNUC__ */
+ ;
+
+
+ /* TODO: Check for the __FUNCTION__ thing, rather than gnuc */
+#if defined(HAVE_VARARG_MACROS) && defined(__GNUC__)
+
+#if 1 || defined(DO_RS_TRACE)
+# define rs_trace(fmt, arg...) \
+ do { rs_log0(RS_LOG_DEBUG, __FUNCTION__, fmt , ##arg); \
+ } while (0)
+#else
+# define rs_trace(s, str...)
+#endif /* !DO_RS_TRACE */
+
+#define rs_log(l, s, str...) do { \
+ rs_log0((l), __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+
+#define rs_log_crit(s, str...) do { \
+ rs_log0(RS_LOG_CRIT, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+#define rs_log_error(s, str...) do { \
+ rs_log0(RS_LOG_ERR, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+#define rs_log_notice(s, str...) do { \
+ rs_log0(RS_LOG_NOTICE, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+#define rs_log_warning(s, str...) do { \
+ rs_log0(RS_LOG_WARNING, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+#define rs_log_info(s, str...) do { \
+ rs_log0(RS_LOG_INFO, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+#else /* not defined HAVE_VARARG_MACROS */
+
+/* If we don't have gcc vararg macros, then we fall back to making the
+ * log routines just plain functions. On platforms without gcc (boo
+ * hiss!) this means at least you get some messages, but not the nice
+ * function names etc. */
+#define rs_log rs_log0_nofn
+
+#define rs_trace rs_log_trace_nofn
+#define rs_log_info rs_log_info_nofn
+#define rs_log_notice rs_log_notice_nofn
+#define rs_log_warning rs_log_warning_nofn
+#define rs_log_error rs_log_error_nofn
+#define rs_log_crit rs_log_critical_nofn
+#endif /* HAVE_VARARG_MACROS */
+
+
+
+void rs_log_trace_nofn(char const *s, ...);
+void rs_log_info_nofn(char const *, ...);
+void rs_log_notice_nofn(char const *, ...);
+void rs_log_warning_nofn(char const *s, ...);
+void rs_log_error_nofn(char const *s, ...);
+void rs_log_critical_nofn(char const *, ...);
+
+void rs_log0_nofn(int level, char const *fmt, ...);
+
+
+
+/**
+ * \macro rs_trace_enabled()
+ *
+ * Call this before putting too much effort into generating trace
+ * messages.
+ */
+
+extern int rs_trace_level;
+
+#ifdef DO_RS_TRACE
+# define rs_trace_enabled() ((rs_trace_level & RS_LOG_PRIMASK) >= RS_LOG_DEBUG)
+#else
+# define rs_trace_enabled() 0
+#endif
+
+/**
+ * Name of the program, to be included in log messages.
+ *
+ * @note This must be defined exactly once in each program that links to
+ * trace.c
+ **/
+extern const char *rs_program_name;
+
+void dcc_job_summary_clear(void);
+void dcc_job_summary(void);
+void dcc_job_summary_append(const char *s);