When compiling a libdispatch debug build on Linux, I found that getprogname(3) is not available. Here is a patch that implements a wrapper function. Regards, - Mark Index: configure.ac =================================================================== --- configure.ac (revision 174) +++ configure.ac (working copy) @@ -192,7 +192,7 @@ AC_CHECK_DECLS([FD_COPY], [], [], [[#include <sys/select.h>]]) AC_CHECK_DECLS([SIGEMT], [], [], [[#include <signal.h>]]) AC_CHECK_DECLS([VQ_UPDATE, VQ_VERYLOWDISK], [], [], [[#include <sys/mount.h>]]) -AC_CHECK_FUNCS([pthread_key_init_np pthread_main_np mach_absolute_time malloc_create_zone sysconf]) +AC_CHECK_FUNCS([pthread_key_init_np pthread_main_np mach_absolute_time malloc_create_zone sysconf getprogname]) AC_CHECK_DECLS([POSIX_SPAWN_START_SUSPENDED], [have_posix_spawn_start_suspended=true], Index: src/queue.c =================================================================== --- src/queue.c (revision 174) +++ src/queue.c (working copy) @@ -1786,6 +1786,18 @@ va_end(ap); } +static char * +dispatch_getprogname(void) +{ +#if HAVE_GETPROGNAME + return getprogname(); +#elif __linux__ + return program_invocation_short_name; +#else +#error getprogname() is not available on this platform +#endif +} + void _dispatch_logv(const char *msg, va_list ap) { @@ -1806,7 +1818,8 @@ struct timeval tv; gettimeofday(&tv, NULL); fprintf(logfile, "=== log file opened for %s[%u] at %ld.%06u ===\n", - getprogname() ?: "", getpid(), tv.tv_sec, tv.tv_usec); + dispatch_getprogname() ?: "", + getpid(), tv.tv_sec, tv.tv_usec); } } vfprintf(logfile, newbuf, ap);