weak/runtime jack linking: load libjack dynamically at runtime
[ardour.git] / libs / backends / jack / weak_libjack.h
1 /* runtime/weak dynamic JACK linking
2  *
3  * (C) 2014 Robin Gareus <robin@gareus.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2, or (at your option)
8  * any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19 #ifndef _WEAK_JACK_H
20 #define _WEAK_JACK_H
21
22 #ifdef __cplusplus
23 extern "C"
24 {
25 #endif
26
27 /** check if libjack is available
28  *
29  * return 0 if libjack is dynamically linked of was
30  * successfully dl-opened. Otherwise:
31  *
32  * -1: library was not initialized
33  * -2: libjack was not found
34  *  > 0 bitwise flags:
35  *      1: a required function was not found in libjack
36  *      2: jack_client_open was not found in libjack
37  */
38 int have_libjack(void);
39
40 #ifdef __cplusplus
41 }
42 #endif
43
44 #ifdef USE_WEAK_JACK
45
46 /* <jack/jack.h> */
47 #define jack_client_open                    WJACK_client_openX
48 #define jack_client_close                   WJACK_client_close
49 #define jack_get_client_name                WJACK_get_client_name
50 #define jack_get_sample_rate                WJACK_get_sample_rate
51 #define jack_get_buffer_size                WJACK_get_buffer_size
52 #define jack_frames_since_cycle_start       WJACK_frames_since_cycle_start
53 #define jack_frame_time                     WJACK_frame_time
54 #define jack_last_frame_time                WJACK_last_frame_time
55 #define jack_cpu_load                       WJACK_cpu_load
56 #define jack_is_realtime                    WJACK_is_realtime
57
58 #define jack_set_freewheel                  WJACK_set_freewheel
59 #define jack_set_buffer_size                WJACK_set_buffer_size
60
61 #define jack_on_shutdown                    WJACK_on_shutdown
62 #define jack_on_info_shutdown               WJACK_on_info_shutdown
63 #define jack_set_process_callback           WJACK_set_process_callback
64 #define jack_set_freewheel_callback         WJACK_set_freewheel_callback
65 #define jack_set_buffer_size_callback       WJACK_set_buffer_size_callback
66 #define jack_set_sample_rate_callback       WJACK_set_sample_rate_callback
67 #define jack_set_port_registration_callback WJACK_set_port_registration_callback
68 #define jack_set_port_connect_callback      WJACK_set_port_connect_callback
69 #define jack_set_graph_order_callback       WJACK_set_graph_order_callback
70 #define jack_set_xrun_callback              WJACK_set_xrun_callback
71 #define jack_set_latency_callback           WJACK_set_latency_callback
72 #define jack_set_error_function             WJACK_set_error_function
73
74 #define jack_activate                       WJACK_activate
75 #define jack_deactivate                     WJACK_deactivate
76
77 #define jack_recompute_total_latencies      WJACK_recompute_total_latencies
78 #define jack_port_get_total_latency         WJACK_port_get_total_latency
79 #define jack_port_get_latency_range         WJACK_port_get_latency_range
80 #define jack_port_set_latency_range         WJACK_port_set_latency_range
81 #define jack_port_get_buffer                WJACK_port_get_buffer
82 #define jack_port_request_monitor           WJACK_port_request_monitor
83 #define jack_port_ensure_monitor            WJACK_port_ensure_monitor
84 #define jack_port_monitoring_input          WJACK_port_monitoring_input
85
86 #define jack_port_name                      WJACK_port_name
87 #define jack_port_flags                     WJACK_port_flags
88 #define jack_get_ports                      WJACK_get_ports
89 #define jack_port_name_size                 WJACK_port_name_size
90 #define jack_port_type_size                 WJACK_port_type_size
91 #define jack_port_type_get_buffer_size      WJACK_port_type_get_buffer_size
92 #define jack_port_by_name                   WJACK_port_by_name
93 #define jack_port_by_id                     WJACK_port_by_id
94 #define jack_port_set_name                  WJACK_port_set_name
95 #define jack_port_disconnect                WJACK_port_disconnect
96 #define jack_port_register                  WJACK_port_register
97 #define jack_port_unregister                WJACK_port_unregister
98 #define jack_port_type                      WJACK_port_type
99 #define jack_port_get_connections           WJACK_port_get_connections
100 #define jack_port_get_all_connections       WJACK_port_get_all_connections
101 #define jack_connect                        WJACK_connect
102 #define jack_disconnect                     WJACK_disconnect
103 #define jack_free                           WJACK_free
104
105 #define jack_cycle_wait                     WJACK_cycle_wait
106 #define jack_cycle_signal                   WJACK_cycle_signal
107 #define jack_set_process_thread             WJACK_set_process_thread
108 #define jack_set_thread_init_callback       WJACK_set_thread_init_callback
109
110 /* <jack/transport.h> */
111 #define jack_get_current_transport_frame    WJACK_get_current_transport_frame
112 #define jack_transport_locate               WJACK_transport_locate
113 #define jack_transport_start                WJACK_transport_start
114 #define jack_transport_stop                 WJACK_transport_stop
115 #define jack_transport_query                WJACK_transport_query
116 #define jack_set_sync_callback              WJACK_set_sync_callback
117 #define jack_set_timebase_callback          WJACK_set_timebase_callback
118 #define jack_release_timebase               WJACK_release_timebase
119
120 /* <jack/midiport.h> */
121 #define jack_midi_get_event_count           WJACK_midi_get_event_count
122 #define jack_midi_event_get                 WJACK_midi_event_get
123 #define jack_midi_event_write               WJACK_midi_event_write
124 #define jack_midi_clear_buffer              WJACK_midi_clear_buffer
125
126 /* <jack/session.h> */
127 #define jack_set_session_callback           WJACK_set_session_callback
128 #define jack_session_reply                  WJACK_session_reply
129 #define jack_session_event_free             WJACK_session_event_free
130
131 /* <jack/ringbuffer.h> */
132 #define jack_ringbuffer_create              WJACK_ringbuffer_create
133 #define jack_ringbuffer_free                WJACK_ringbuffer_free
134 #define jack_ringbuffer_reset               WJACK_ringbuffer_reset
135 #define jack_ringbuffer_read_advance        WJACK_ringbuffer_read_advance
136 #define jack_ringbuffer_write_advance       WJACK_ringbuffer_write_advance
137 #define jack_ringbuffer_read_space          WJACK_ringbuffer_read_space
138 #define jack_ringbuffer_write_space         WJACK_ringbuffer_write_space
139 #define jack_ringbuffer_read                WJACK_ringbuffer_read
140 #define jack_ringbuffer_write               WJACK_ringbuffer_write
141 #define jack_ringbuffer_mlock               WJACK_ringbuffer_mlock
142
143 /* <jack/thread.h> */
144 #define jack_client_real_time_priority      WJACK_client_real_time_priority
145 #define jack_client_max_real_time_priority  WJACK_client_max_real_time_priority
146 #define jack_acquire_real_time_scheduling   WJACK_acquire_real_time_scheduling
147 #define jack_client_create_thread           WJACK_client_create_thread
148 #define jack_drop_real_time_scheduling      WJACK_drop_real_time_scheduling
149 #define jack_client_stop_thread             WJACK_client_stop_thread
150 #define jack_client_kill_thread             WJACK_client_kill_thread
151
152 /* var-args hack */
153 #define jack_client_open1                   WJACK_client_open1
154 #define jack_client_open2                   WJACK_client_open2
155 #include <jack/types.h>
156
157 #ifdef __cplusplus
158 extern "C"
159 {
160 #endif
161 jack_client_t * WJACK_client_open1 (
162         const char *client_name,
163         jack_options_t options, jack_status_t *status);
164
165 jack_client_t * WJACK_client_open2 (
166         const char *client_name,
167         jack_options_t options, jack_status_t *status, const char *uuid);
168
169 #ifdef __cplusplus
170 }
171 #endif
172
173 #else
174
175 /* var-args hack */
176 #define jack_client_open1                  jack_client_open
177 #define jack_client_open2                  jack_client_open
178
179 #endif // USE_WEAK_JACK
180
181 #include <jack/jack.h>
182 #include <jack/transport.h>
183 #include <jack/ringbuffer.h>
184 #include <jack/midiport.h>
185 #include <jack/session.h>
186 #include <jack/thread.h>
187
188 #endif // _WEAK_JACK_H