1/*
2 * Copyright (c) 2007-2013 Zmanda, Inc.  All Rights Reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 *
18 * Contact information: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
19 * Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
20 */
21
22%module "Amanda::Debug"
23%include "amglue/amglue.swg"
24%include "exception.i"
25
26%include "Amanda/Debug.pod"
27
28%{
29#include <glib.h>
30#include "debug.h"
31%}
32
33/*
34 * Initialization
35 */
36
37amglue_export_tag(init,
38    debug_init dbopen dbreopen dbrename dbclose
39    $error_exit_status
40);
41
42void	debug_init(void);
43void	dbopen(char *subdir);
44void	dbreopen(char *file, char *notation);
45void	dbrename(char *config, char *subdir);
46void	dbclose(void);
47
48int error_exit_status;
49
50/*
51 * Override die() and warn()
52 */
53%perlcode %{
54sub _my_die {
55    # $^S: (from perlvar)
56    #  undef -> parsing module/eval
57    #  1 -> executing an eval
58    #  0 -> otherwise
59    # we *only* want to call critical() in the "otherwise" case
60    if (!defined($^S) or $^S == 1) {
61	die(@_);
62    } else {
63	my ($msg) = @_;
64	chomp $msg;
65	suppress_error_traceback();
66	critical(@_);
67    }
68};
69$SIG{__DIE__} = \&_my_die;
70
71sub _my_warn {
72    my ($msg) = @_;
73    chomp $msg;
74    warning(@_);
75};
76$SIG{__WARN__} = \&_my_warn;
77
78# utility function for test scripts, which want to use the regular
79# perl mechanisms
80sub disable_die_override {
81    delete $SIG{__DIE__};
82    delete $SIG{__WARN__};
83}
84%}
85
86/*
87 * Logging
88 */
89
90%rename(error) error__; /* error() is a macro defined in debug.h .. just avoid that */
91%inline %{
92void error__(char *msg) { g_error("%s", msg); }
93void critical(char *msg) { g_critical("%s", msg); }
94void warning(char *msg) { g_warning("%s", msg); }
95void message(char *msg) { g_message("%s", msg); }
96void info(char *msg) { g_info("%s", msg); }
97void debug(char *msg) { g_debug("%s", msg); }
98%}
99
100amglue_export_tag(logging,
101    error critical warning message info debug
102);
103
104void add_amanda_log_handler(amanda_log_handler_t *handler);
105/* these functions are written as simple global variables, since they are just
106 * function pointers used in add_amanda_log_handler.  Note that the functions
107 * then appear as e.g., $amanda_log_null. */
108%immutable;
109amanda_log_handler_t *amanda_log_stderr, *amanda_log_syslog, *amanda_log_null;
110%mutable;
111
112amglue_export_tag(logging,
113    add_amanda_log_handler
114    $amanda_log_stderr $amanda_log_syslog $amanda_log_null
115);
116
117/* used to suppress the traceback when calling from perl */
118void suppress_error_traceback(void);
119
120/*
121 * Advanced
122 */
123
124int	dbfd(void);
125char *	dbfn(void);
126void debug_dup_stderr_to_debug(void);
127