From fb4414b8b494e559d47abf974ec5ac81d674b361 Mon Sep 17 00:00:00 2001 From: sletz Date: Mon, 10 Mar 2008 13:17:48 +0000 Subject: [PATCH] Nedko Arnaudov log patch. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1927 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 7 ++- common/JackDriverLoader.cpp | 6 +- common/JackError.c | 50 +++++++++++++-- common/JackError.h | 6 ++ common/JackServerGlobals.cpp | 18 +++--- common/jack/jack.h | 15 +++++ common/shm.c | 2 +- linux/alsa/alsa_rawmidi.c | 78 ++++++++++++------------ linux/alsa/hammerfall.c | 2 +- linux/alsa/usx2y.c | 6 +- macosx/JackCoreAudioDriver.cpp | 2 +- macosx/Jackdmp.xcodeproj/project.pbxproj | 2 +- 12 files changed, 129 insertions(+), 65 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2061a8a8..22496d13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,12 +12,17 @@ Andrzej Szombierski Kjetil S.Matheussen Pieter Palmers Tim Blechmann -Marc-Olivier Barre +Marc-Olivier Barre +Nedko Arnaudov --------------------------- Jackdmp changes log --------------------------- +2008-03-10 Stephane Letz + + * Nedko Arnaudov log patch. + 2008-03-07 Stephane Letz * Define an internal jack_client_open_aux needed for library wrapper feature. diff --git a/common/JackDriverLoader.cpp b/common/JackDriverLoader.cpp index e2992338..9b2917fc 100644 --- a/common/JackDriverLoader.cpp +++ b/common/JackDriverLoader.cpp @@ -296,10 +296,10 @@ jack_drivers_get_descriptor (JSList * drivers, const char * sofile) #ifdef WIN32 if ((so_get_descriptor == NULL) && (dlerr = GetLastError()) != 0) { - fprintf(stderr, "%ld\n", dlerr); + jack_error("%ld", dlerr); #else if ((so_get_descriptor == NULL) && (dlerr = dlerror ()) != NULL) { - fprintf(stderr, "%s\n", dlerr); + jack_error("%s", dlerr); #endif UnloadDriverModule(dlhandle); @@ -360,7 +360,7 @@ jack_drivers_load (JSList * drivers) { file = (HANDLE )FindFirstFile(dll_filename, &filedata); if (file == INVALID_HANDLE_VALUE) { - printf("error\n"); + jack_error("error"); return NULL; } diff --git a/common/JackError.c b/common/JackError.c index 37628a9c..ae560eec 100644 --- a/common/JackError.c +++ b/common/JackError.c @@ -24,13 +24,45 @@ int jack_verbose = 0; +static +void +jack_format_and_log(const char *prefix, const char *fmt, va_list ap, void (* log_callback)(const char *)) +{ + char buffer[300]; + size_t len; + + if (prefix != NULL) { + len = strlen(prefix); + memcpy(buffer, prefix, len); + } else { + len = 0; + } + + vsnprintf(buffer + len, sizeof(buffer) - len, fmt, ap); + log_callback(buffer); +} + EXPORT void jack_error(const char *fmt, ...) { va_list ap; - char buffer[300]; va_start(ap, fmt); - vsnprintf(buffer, sizeof(buffer), fmt, ap); - jack_error_callback(buffer); + jack_format_and_log(NULL, fmt, ap, jack_error_callback); + va_end(ap); +} + +EXPORT void jack_info(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + jack_format_and_log(NULL, fmt, ap, jack_info_callback); + va_end(ap); +} + +EXPORT void jack_info_multiline(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + jack_format_and_log(NULL, fmt, ap, jack_info_callback); va_end(ap); } @@ -39,8 +71,7 @@ EXPORT void JackLog(const char *fmt,...) if (jack_verbose) { va_list ap; va_start(ap, fmt); - fprintf(stderr,"Jack: "); - vfprintf(stderr, fmt, ap); + jack_format_and_log("Jack: ", fmt, ap, jack_info_callback); va_end(ap); } } @@ -48,7 +79,14 @@ EXPORT void JackLog(const char *fmt,...) static void default_jack_error_callback(const char *desc) { fprintf(stderr, "%s\n", desc); + fflush(stdout); } -void (*jack_error_callback)(const char *desc) = &default_jack_error_callback; +static void default_jack_info_callback (const char *desc) +{ + fprintf(stdout, "%s\n", desc); + fflush(stdout); +} +void (*jack_error_callback)(const char *desc) = &default_jack_error_callback; +void (*jack_info_callback)(const char *desc) = &default_jack_info_callback; diff --git a/common/JackError.h b/common/JackError.h index ee56e6d1..8536160b 100644 --- a/common/JackError.h +++ b/common/JackError.h @@ -36,11 +36,17 @@ extern "C" EXPORT void jack_error(const char *fmt, ...); + EXPORT void jack_info(const char *fmt, ...); + + /* like jack_info but does not add newline */ + EXPORT void jack_info_multiline(const char *fmt, ...); + EXPORT void JackLog(const char *fmt, ...); extern int jack_verbose; extern void (*jack_error_callback)(const char *desc); + extern void (*jack_info_callback)(const char *desc); #ifdef __cplusplus } diff --git a/common/JackServerGlobals.cpp b/common/JackServerGlobals.cpp index f4dda14b..17d74f33 100644 --- a/common/JackServerGlobals.cpp +++ b/common/JackServerGlobals.cpp @@ -219,20 +219,20 @@ bool JackServerGlobals::Init() break; default: - fprintf(stderr, "unknown option character %c\n", optopt); + jack_error("unknown option character %c", optopt); break; } } drivers = jack_drivers_load(drivers); if (!drivers) { - fprintf(stderr, "jackdmp: no drivers found; exiting\n"); + jack_error("jackdmp: no drivers found; exiting"); goto error; } driver_desc = jack_find_driver_descriptor(drivers, driver_name); if (!driver_desc) { - fprintf(stderr, "jackdmp: unknown driver '%s'\n", driver_name); + jack_error("jackdmp: unknown driver '%s'", driver_name); goto error; } @@ -243,8 +243,8 @@ bool JackServerGlobals::Init() } if (driver_nargs == 0) { - fprintf(stderr, "No driver specified ... hmm. JACK won't do" - " anything when run like this.\n"); + jack_error("No driver specified ... hmm. JACK won't do" + " anything when run like this."); goto error; } @@ -267,17 +267,17 @@ bool JackServerGlobals::Init() rc = jack_register_server(server_name, false); switch (rc) { case EEXIST: - fprintf(stderr, "`%s' server already active\n", server_name); + jack_error("`%s' server already active", server_name); goto error; case ENOSPC: - fprintf(stderr, "too many servers already active\n"); + jack_error("too many servers already active"); goto error; case ENOMEM: - fprintf(stderr, "no access to shm registry\n"); + jack_error("no access to shm registry"); goto error; default: if (jack_verbose) - fprintf(stderr, "server `%s' registered\n", server_name); + jack_info("server `%s' registered", server_name); } /* clean up shared memory and files from any previous instance of this server name */ diff --git a/common/jack/jack.h b/common/jack/jack.h index afd51d95..54d339d0 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -902,6 +902,21 @@ extern "C" */ void jack_set_error_function (void (*func)(const char *)); +/** + * Display JACK info message. + * + * Set via jack_set_info_function(), otherwise a JACK-provided + * default will print @a msg (plus a newline) to stdout. + * + * @param msg info message text (no newline at end). + */ +extern void (*jack_info_callback)(const char *msg); + +/** + * Set the @ref jack_info_callback for info message display. + */ +void jack_set_info_function (void (*func)(const char *)); + #ifdef __cplusplus } #endif diff --git a/common/shm.c b/common/shm.c index fba72c75..0d80e1db 100644 --- a/common/shm.c +++ b/common/shm.c @@ -554,7 +554,7 @@ jack_cleanup_shm () /* see if allocator still exists */ #ifdef WIN32 // steph - printf("TODO: kill API not available !!\n"); + jack_info("TODO: kill API not available !!"); #else if (kill (r->allocator, 0)) { if (errno == ESRCH) { diff --git a/linux/alsa/alsa_rawmidi.c b/linux/alsa/alsa_rawmidi.c index f4391e8f..d9f21726 100644 --- a/linux/alsa/alsa_rawmidi.c +++ b/linux/alsa/alsa_rawmidi.c @@ -199,7 +199,7 @@ int stream_init(midi_stream_t *s, alsa_rawmidi_t *midi, const char *name) s->name = name; if (pipe(s->wake_pipe)==-1) { s->wake_pipe[0] = -1; - error_log("pipe() in stream_init(%s) failed: %s\n", name, strerror(errno)); + error_log("pipe() in stream_init(%s) failed: %s", name, strerror(errno)); return -errno; } s->jack.new_ports = jack_ringbuffer_create(sizeof(midi_port_t*)*MAX_PORTS); @@ -237,7 +237,7 @@ alsa_midi_t* alsa_rawmidi_new(jack_client_t *jack) goto fail_0; midi->client = jack; if (pipe(midi->scan.wake_pipe)==-1) { - error_log("pipe() in alsa_midi_new failed: %s\n", strerror(errno)); + error_log("pipe() in alsa_midi_new failed: %s", strerror(errno)); goto fail_1; } @@ -521,7 +521,7 @@ void alsa_get_id(alsa_id_t *id, snd_rawmidi_info_t *info) static inline void alsa_error(const char *func, int err) { - error_log("%s() failed\n", snd_strerror(err)); + error_log("%s() failed", snd_strerror(err)); } typedef struct { @@ -550,14 +550,14 @@ void scan_cycle(alsa_rawmidi_t *midi) scan_t scan; midi_port_t **ports; - //debug_log("scan: cleanup\n"); + //debug_log("scan: cleanup"); scan_cleanup(midi); scan.midi = midi; scan.iterator = &midi->scan.ports; snd_rawmidi_info_alloca(&scan.info); - //debug_log("scan: rescan\n"); + //debug_log("scan: rescan"); while ((err = snd_card_next(&card))>=0 && card>=0) { char name[32]; snprintf(name, sizeof(name), "hw:%d", card); @@ -658,7 +658,7 @@ midi_port_t** scan_port_add(scan_t *scan, const alsa_id_t *id, midi_port_t **lis port->next = *list; *list = port; - error_log("scan: added port %s %s\n", port->dev, port->name); + error_log("scan: added port %s %s", port->dev, port->name); return &port->next; } @@ -682,7 +682,7 @@ midi_port_t** scan_port_open(alsa_rawmidi_t *midi, midi_port_t **list) port->state = PORT_ADDED_TO_JACK; jack_ringbuffer_write(str->jack.new_ports, (char*) &port, sizeof(port)); - error_log("scan: opened port %s %s\n", port->dev, port->name); + error_log("scan: opened port %s %s", port->dev, port->name); return &port->next; fail_2: @@ -691,7 +691,7 @@ midi_port_t** scan_port_open(alsa_rawmidi_t *midi, midi_port_t **list) midi_port_close(midi, port); fail_0: *list = port->next; - error_log("scan: can't open port %s %s\n", port->dev, port->name); + error_log("scan: can't open port %s %s", port->dev, port->name); free(port); return list; } @@ -701,7 +701,7 @@ midi_port_t** scan_port_del(alsa_rawmidi_t *midi, midi_port_t **list) { midi_port_t *port = *list; if (port->state == PORT_REMOVED_FROM_JACK) { - error_log("scan: deleted port %s %s\n", port->dev, port->name); + error_log("scan: deleted port %s %s", port->dev, port->name); *list = port->next; if (port->id.id[2] ) (midi->out.port_close)(midi, port); @@ -711,7 +711,7 @@ midi_port_t** scan_port_del(alsa_rawmidi_t *midi, midi_port_t **list) free(port); return list; } else { - //debug_log("can't delete port %s, wrong state: %d\n", port->name, (int)port->state); + //debug_log("can't delete port %s, wrong state: %d", port->name, (int)port->state); return &port->next; } } @@ -725,7 +725,7 @@ void* scan_thread(void *arg) wakeup.events = POLLIN|POLLERR|POLLNVAL; while (midi->keep_walking) { int res; - //error_log("scanning....\n"); + //error_log("scanning...."); scan_cycle(midi); res = poll(&wakeup, 1, 2000); if (res>0) { @@ -789,7 +789,7 @@ void jack_process(midi_stream_t *str, jack_nframes_t nframes) ++w; } if (str->jack.nports != w) - debug_log("jack_%s: nports %d -> %d\n", str->name, str->jack.nports, w); + debug_log("jack_%s: nports %d -> %d", str->name, str->jack.nports, w); str->jack.nports = w; jack_add_ports(str); // it makes no sense to add them earlier since they have no data yet @@ -815,7 +815,7 @@ void *midi_thread(void *arg) pfds[0].events = POLLIN|POLLERR|POLLNVAL; npfds = 1; - //debug_log("midi_thread(%s): enter\n", str->name); + //debug_log("midi_thread(%s): enter", str->name); while (midi->keep_walking) { int poll_timeout; @@ -837,13 +837,13 @@ void *midi_thread(void *arg) clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL); } int res = poll((struct pollfd*)&pfds, npfds, poll_timeout); - //debug_log("midi_thread(%s): poll exit: %d\n", str->name, res); + //debug_log("midi_thread(%s): poll exit: %d", str->name, res); if (!midi->keep_walking) break; if (res < 0) { if (errno == EINTR) continue; - error_log("midi_thread(%s) poll failed: %s\n", str->name, strerror(errno)); + error_log("midi_thread(%s) poll failed: %s", str->name, strerror(errno)); break; } @@ -860,7 +860,7 @@ void *midi_thread(void *arg) midi_port_t *port; jack_ringbuffer_read(str->midi.new_ports, (char*)&port, sizeof(port)); str->midi.ports[str->midi.nports++] = port; - debug_log("midi_thread(%s): added port %s\n", str->name, port->name); + debug_log("midi_thread(%s): added port %s", str->name, port->name); } // if (res == 0) @@ -888,10 +888,10 @@ void *midi_thread(void *arg) ++wp; } if (str->midi.nports != wp) - debug_log("midi_%s: nports %d -> %d\n", str->name, str->midi.nports, wp); + debug_log("midi_%s: nports %d -> %d", str->name, str->midi.nports, wp); str->midi.nports = wp; if (npfds != w) - debug_log("midi_%s: npfds %d -> %d\n", str->name, npfds, w); + debug_log("midi_%s: npfds %d -> %d", str->name, npfds, w); npfds = w; /* @@ -900,16 +900,16 @@ void *midi_thread(void *arg) * So, zero timeout will not cause busy-looping. */ if (proc.next_time < proc.cur_time) { - debug_log("%s: late: next_time = %d, cur_time = %d\n", str->name, (int)proc.next_time, (int)proc.cur_time); + debug_log("%s: late: next_time = %d, cur_time = %d", str->name, (int)proc.next_time, (int)proc.cur_time); wait_nsec = 0; // we are late } else if (proc.next_time != NFRAMES_INF) { jack_time_t wait_frames = proc.next_time - proc.cur_time; jack_nframes_t rate = jack_get_sample_rate(midi->client); wait_nsec = (wait_frames * (1000*1000*1000)) / rate; - debug_log("midi_%s: timeout = %d\n", str->name, (int)wait_frames); + debug_log("midi_%s: timeout = %d", str->name, (int)wait_frames); } else wait_nsec = 1000*1000*1000; - //debug_log("midi_thread(%s): wait_nsec = %lld\n", str->name, wait_nsec); + //debug_log("midi_thread(%s): wait_nsec = %lld", str->name, wait_nsec); } return NULL; } @@ -922,17 +922,17 @@ int midi_is_ready(process_midi_t *proc) unsigned short revents = 0; int res = snd_rawmidi_poll_descriptors_revents(port->rawmidi, proc->rpfds, port->npfds, &revents); if (res) { - error_log("snd_rawmidi_poll_descriptors_revents failed on port %s with: %s\n", port->name, snd_strerror(res)); + error_log("snd_rawmidi_poll_descriptors_revents failed on port %s with: %s", port->name, snd_strerror(res)); return 0; } if (revents & ~proc->mode) { - debug_log("midi: port %s failed\n", port->name); + debug_log("midi: port %s failed", port->name); return 0; } if (revents & proc->mode) { port->is_ready = 1; - debug_log("midi: is_ready %s\n", port->name); + debug_log("midi: is_ready %s", port->name); } } return 1; @@ -945,7 +945,7 @@ int midi_update_pfds(process_midi_t *proc) if (port->npfds == 0) { port->npfds = snd_rawmidi_poll_descriptors_count(port->rawmidi); if (port->npfds > proc->max_pfds) { - debug_log("midi: not enough pfds for port %s\n", port->name); + debug_log("midi: not enough pfds for port %s", port->name); return 0; } snd_rawmidi_poll_descriptors(port->rawmidi, proc->wpfds, port->npfds); @@ -1005,7 +1005,7 @@ void do_jack_input(process_jack_t *p) int avail = todo < vec[i].len ? todo : vec[i].len; int done = midi_unpack_buf(&port->unpack, (unsigned char*)vec[i].buf, avail, p->buffer, time); if (done != avail) { - debug_log("jack_in: buffer overflow in port %s\n", port->base.name); + debug_log("jack_in: buffer overflow in port %s", port->base.name); break; } todo -= done; @@ -1032,14 +1032,14 @@ int do_midi_input(process_midi_t *proc) if (jack_ringbuffer_write_space(port->base.event_ring) < sizeof(event_head_t) || vec[0].len < 1) { port->overruns++; if (port->base.npfds) - debug_log("midi_in: internal overflow on %s\n", port->base.name); + debug_log("midi_in: internal overflow on %s", port->base.name); // remove from poll to prevent busy-looping port->base.npfds = 0; return 1; } res = snd_rawmidi_read(port->base.rawmidi, vec[0].buf, vec[0].len); if (res < 0 && res != -EWOULDBLOCK) { - error_log("midi_in: reading from port %s failed: %s\n", port->base.name, snd_strerror(res)); + error_log("midi_in: reading from port %s failed: %s", port->base.name, snd_strerror(res)); return 0; } else if (res > 0) { event_head_t event; @@ -1047,7 +1047,7 @@ int do_midi_input(process_midi_t *proc) event.size = res; event.overruns = port->overruns; port->overruns = 0; - debug_log("midi_in: read %d bytes at %d\n", (int)event.size, (int)event.time); + debug_log("midi_in: read %d bytes at %d", (int)event.size, (int)event.time); jack_ringbuffer_write_advance(port->base.data_ring, event.size); jack_ringbuffer_write(port->base.event_ring, (char*)&event, sizeof(event)); } @@ -1084,7 +1084,7 @@ void do_jack_output(process_jack_t *proc) int nevents = jack_midi_get_event_count(proc->buffer); int i; if (nevents) - debug_log("jack_out: %d events in %s\n", nevents, port->base.name); + debug_log("jack_out: %d events in %s", nevents, port->base.name); for (i=0; ibuffer, i); if (jack_ringbuffer_write_space(port->base.data_ring) < event.size || jack_ringbuffer_write_space(port->base.event_ring) < sizeof(hdr)) { - debug_log("jack_out: output buffer overflow on %s\n", port->base.name); + debug_log("jack_out: output buffer overflow on %s", port->base.name); break; } @@ -1103,7 +1103,7 @@ void do_jack_output(process_jack_t *proc) hdr.time = proc->frame_time + event.time + proc->nframes; hdr.size = event.size; jack_ringbuffer_write(port->base.event_ring, (char*)&hdr, sizeof(hdr)); - debug_log("jack_out: sent %d-byte event at %ld\n", (int)event.size, (long)event.time); + debug_log("jack_out: sent %d-byte event at %ld", (int)event.size, (long)event.time); } } @@ -1124,16 +1124,16 @@ int do_midi_output(process_midi_t *proc) port->next_event.size = 0; break; } else - debug_log("midi_out: at %ld got %d bytes for %ld\n", (long)proc->cur_time, (int)port->next_event.size, (long)port->next_event.time); + debug_log("midi_out: at %ld got %d bytes for %ld", (long)proc->cur_time, (int)port->next_event.size, (long)port->next_event.time); } if (port->todo) - debug_log("midi_out: todo = %d at %ld\n", (int)port->todo, (long)proc->cur_time); + debug_log("midi_out: todo = %d at %ld", (int)port->todo, (long)proc->cur_time); // calc next wakeup time if (!port->todo && port->next_event.time && port->next_event.time < proc->next_time) { proc->next_time = port->next_event.time; - debug_log("midi_out: next_time = %ld\n", (long)proc->next_time); + debug_log("midi_out: next_time = %ld", (long)proc->next_time); } if (port->todo && port->base.is_ready) { @@ -1150,15 +1150,15 @@ int do_midi_output(process_midi_t *proc) res = snd_rawmidi_write(port->base.rawmidi, vec[0].buf, size); if (res > 0) { jack_ringbuffer_read_advance(port->base.data_ring, res); - debug_log("midi_out: written %d bytes to %s\n", res, port->base.name); + debug_log("midi_out: written %d bytes to %s", res, port->base.name); port->todo -= res; worked = 1; } else if (res == -EWOULDBLOCK) { port->base.is_ready = 0; - debug_log("midi_out: -EWOULDBLOCK on %s\n", port->base.name); + debug_log("midi_out: -EWOULDBLOCK on %s", port->base.name); return 1; } else { - error_log("midi_out: writing to port %s failed: %s\n", port->base.name, snd_strerror(res)); + error_log("midi_out: writing to port %s failed: %s", port->base.name, snd_strerror(res)); return 0; } snd_rawmidi_drain(port->base.rawmidi); @@ -1171,7 +1171,7 @@ int do_midi_output(process_midi_t *proc) if (!port->todo) { int i; if (worked) - debug_log("midi_out: relaxing on %s\n", port->base.name); + debug_log("midi_out: relaxing on %s", port->base.name); for (i=0; ibase.npfds; ++i) proc->wpfds[i].events &= ~POLLOUT; } else { diff --git a/linux/alsa/hammerfall.c b/linux/alsa/hammerfall.c index f1cae9fc..f5a05eaf 100644 --- a/linux/alsa/hammerfall.c +++ b/linux/alsa/hammerfall.c @@ -117,7 +117,7 @@ hammerfall_check_sync (hammerfall_t *h, snd_ctl_elem_value_t *ctl) int val; snd_ctl_elem_id_t *ctl_id; - printf ("check sync\n"); + jack_info ("check sync"); snd_ctl_elem_id_alloca (&ctl_id); snd_ctl_elem_value_get_id (ctl, ctl_id); diff --git a/linux/alsa/usx2y.c b/linux/alsa/usx2y.c index 88c72e33..289ed662 100644 --- a/linux/alsa/usx2y.c +++ b/linux/alsa/usx2y.c @@ -399,7 +399,7 @@ usx2y_driver_null_cycle (alsa_driver_t* driver, jack_nframes_t nframes) int chn; VERBOSE(driver->engine, - "usx2y_driver_null_cycle (%p, %i)\n", driver, nframes); + "usx2y_driver_null_cycle (%p, %i)", driver, nframes); if (driver->capture_handle) { nf = nframes; @@ -689,8 +689,8 @@ jack_alsa_usx2y_hw_new (alsa_driver_t *driver) hw->private = h; /* Set our own operational function pointers. */ usx2y_driver_setup(driver); - printf("ALSA/USX2Y: EXPERIMENTAL hwdep pcm device %s" - " (aka \"rawusb\")\n", driver->alsa_name_playback); + jack_info("ALSA/USX2Y: EXPERIMENTAL hwdep pcm device %s" + " (aka \"rawusb\")", driver->alsa_name_playback); } } diff --git a/macosx/JackCoreAudioDriver.cpp b/macosx/JackCoreAudioDriver.cpp index 30fdcd91..225a5b09 100644 --- a/macosx/JackCoreAudioDriver.cpp +++ b/macosx/JackCoreAudioDriver.cpp @@ -153,7 +153,7 @@ static OSStatus DisplayDeviceNames() if (err != noErr) return err; - printf("Device name = \'%s\', internal_name = \'%s\' (to be used as -C, -P, or -d parameter)\n", device_name, internal_name); + jack_info("Device name = \'%s\', internal_name = \'%s\' (to be used as -C, -P, or -d parameter)", device_name, internal_name); } return noErr; diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 74a4148d..f61cb56b 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -9215,7 +9215,7 @@ ); OTHER_LDFLAGS = ( "-framework", - Jackdmp, + Jackservermp, "-framework", CoreAudio, "-framework",