diff --git a/common/JackAudioAdapterFactory.cpp b/common/JackAudioAdapterFactory.cpp index f121ed2b9..423f40942 100644 --- a/common/JackAudioAdapterFactory.cpp +++ b/common/JackAudioAdapterFactory.cpp @@ -35,7 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define JackPlatformAdapter JackAlsaAdapter #endif -#if defined(__sun__) || defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(__sun__) || defined(sun) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__GNU__) #include "JackOSSAdapter.h" #define JackPlatformAdapter JackOSSAdapter #endif diff --git a/common/JackMetadata.cpp b/common/JackMetadata.cpp index f92a6c58d..22f3e598e 100644 --- a/common/JackMetadata.cpp +++ b/common/JackMetadata.cpp @@ -55,7 +55,7 @@ JackMetadata::JackMetadata(bool isEngine) JackMetadata::~JackMetadata() { #if HAVE_DB - char dbpath[PATH_MAX + 1]; + char dbpath[JACK_PATH_MAX + 1]; if (fDB) { fDB->close (fDB, 0); @@ -93,16 +93,16 @@ int JackMetadata::PropertyInit() #if HAVE_DB int ret; - char dbpath[PATH_MAX + 1]; + char dbpath[JACK_PATH_MAX + 1]; #ifdef WIN32 - ret = GetTempPathA (PATH_MAX, fDBFilesDir); - if ((ret > PATH_MAX) || (ret == 0)) { + ret = GetTempPathA (JACK_PATH_MAX, fDBFilesDir); + if ((ret > JACK_PATH_MAX) || (ret == 0)) { jack_error ("cannot get path for temp files"); return -1; } #else - strncpy (fDBFilesDir, jack_server_dir, PATH_MAX); + strncpy (fDBFilesDir, jack_server_dir, JACK_PATH_MAX); #endif /* idempotent */ diff --git a/common/JackMetadata.h b/common/JackMetadata.h index 67b4cdcf4..78605bbb6 100644 --- a/common/JackMetadata.h +++ b/common/JackMetadata.h @@ -39,6 +39,8 @@ #include +#include "driver_interface.h" + #ifdef __cplusplus extern "C" { #endif @@ -89,7 +91,7 @@ class JackMetadata DB* fDB; DB_ENV* fDBenv; const bool fIsEngine; - char fDBFilesDir[PATH_MAX + 1]; + char fDBFilesDir[JACK_PATH_MAX + 1]; #endif int PropertyInit(); diff --git a/common/wscript b/common/wscript index e483f4051..2a4594047 100644 --- a/common/wscript +++ b/common/wscript @@ -33,6 +33,8 @@ def create_jack_process_obj(bld, target, sources, uselib=None, framework=None): env_includes = ['../linux', '../posix', '../linux/alsa'] if bld.env['IS_FREEBSD']: env_includes = ['../freebsd', '../posix', '../solaris/oss'] + if bld.env['IS_HURD']: + env_includes = ['../gnu', '../posix', '../solaris/oss'] if bld.env['IS_SUN']: env_includes = ['../solaris', '../posix', '../solaris/oss'] if bld.env['IS_WINDOWS']: @@ -41,7 +43,7 @@ def create_jack_process_obj(bld, target, sources, uselib=None, framework=None): process.name = target process.target = target process.source = sources - if bld.env['IS_LINUX'] or bld.env['IS_MACOSX'] or bld.env['IS_FREEBSD']: + if bld.env['IS_LINUX'] or bld.env['IS_MACOSX'] or bld.env['IS_FREEBSD'] or bld.env['IS_HURD']: process.env.append_value('CPPFLAGS', '-fvisibility=hidden') process.install_path = '${ADDON_DIR}/' process.use = [uselib.name] @@ -112,6 +114,20 @@ def build(bld): ] includes = ['../freebsd', '../posix'] + includes + if bld.env['IS_HURD']: + common_libsources += [ + 'JackDebugClient.cpp', + 'timestamps.c', + 'promiscuous.c', + '../posix/JackPosixThread.cpp', + '../posix/JackPosixProcessSync.cpp', + '../posix/JackPosixMutex.cpp', + '../posix/JackPosixSemaphore.cpp', + '../posix/JackSocket.cpp', + '../posix/JackPosixTime.c', + ] + includes = ['../gnu', '../posix'] + includes + if bld.env['IS_SUN']: common_libsources += [ 'JackDebugClient.cpp', @@ -202,6 +218,12 @@ def build(bld): '../posix/JackPosixServerLaunch.cpp', ] + if bld.env['IS_HURD']: + clientlib.source += [ + '../posix/JackSocketClientChannel.cpp', + '../posix/JackPosixServerLaunch.cpp', + ] + if bld.env['IS_SUN']: clientlib.source += [ '../posix/JackSocketClientChannel.cpp', @@ -234,6 +256,9 @@ def build(bld): if bld.env['IS_FREEBSD']: clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden') + if bld.env['IS_HURD']: + clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden') + if bld.env['IS_MACOSX']: clientlib.env.append_value('CPPFLAGS', '-fvisibility=hidden') clientlib.env.append_value('LINKFLAGS', '-single_module') @@ -318,6 +343,14 @@ def build(bld): '../posix/JackNetUnixSocket.cpp', ] + if bld.env['IS_HURD']: + serverlib.source += [ + '../posix/JackSocketServerChannel.cpp', + '../posix/JackSocketNotifyChannel.cpp', + '../posix/JackSocketServerNotifyChannel.cpp', + '../posix/JackNetUnixSocket.cpp', + ] + if bld.env['IS_SUN']: serverlib.source += [ '../posix/JackSocketServerChannel.cpp', @@ -411,6 +444,15 @@ def build(bld): ] netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden') + if bld.env['IS_HURD']: + netlib.source += [ + '../posix/JackNetUnixSocket.cpp', + '../posix/JackPosixThread.cpp', + '../posix/JackPosixMutex.cpp', + '../linux/JackLinuxTime.c', + ] + netlib.env.append_value('CPPFLAGS', '-fvisibility=hidden') + if bld.env['IS_SUN']: netlib.source += [ '../posix/JackNetUnixSocket.cpp', @@ -489,7 +531,7 @@ def build(bld): process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib) process.use += ['ALSA', 'SAMPLERATE'] - if bld.env['BUILD_ADAPTER'] and (bld.env['IS_SUN'] or bld.env['IS_FREEBSD']): + if bld.env['BUILD_ADAPTER'] and (bld.env['IS_SUN'] or bld.env['IS_FREEBSD'] or bld.env['IS_HURD']): audio_adapter_sources += ['../solaris/oss/JackOSSAdapter.cpp', 'memops.c'] process = create_jack_process_obj(bld, 'audioadapter', audio_adapter_sources, serverlib) process.use += 'SAMPLERATE' diff --git a/dbus/wscript b/dbus/wscript index 06fe56817..b4f480e02 100644 --- a/dbus/wscript +++ b/dbus/wscript @@ -53,6 +53,8 @@ def build(bld): sysdeps_dbus_include = ['../linux', '../posix'] if bld.env['IS_FREEBSD']: sysdeps_dbus_include = ['../freebsd', '../posix'] + if bld.env['IS_HURD']: + sysdeps_dbus_include = ['../gnu', '../posix'] if bld.env['IS_MACOSX']: sysdeps_dbus_include = ['../macosx', '../posix'] @@ -85,6 +87,11 @@ def build(bld): '../linux/uptime.c', ] obj.use += ['PTHREAD', 'EXECINFO', 'LIBSYSINFO', 'DBUS-1', 'EXPAT'] + if bld.env['IS_HURD']: + obj.source += [ + '../linux/uptime.c', + ] + obj.use += ['PTHREAD', 'DL', 'RT', 'DBUS-1', 'EXPAT', 'STDC++'] if bld.env['IS_MACOSX']: obj.source += [ '../macosx/uptime.c', diff --git a/gnu/JackAtomic_os.h b/gnu/JackAtomic_os.h new file mode 100644 index 000000000..d637a1742 --- /dev/null +++ b/gnu/JackAtomic_os.h @@ -0,0 +1,32 @@ +/* +Copyright (C) 2004-2008 Grame + +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifndef __JackAtomic_gnu__ +#define __JackAtomic_gnu__ + +#include "JackTypes.h" + +static inline char CAS(volatile UInt32 value, UInt32 newvalue, volatile void* addr) +{ + UInt32 val = value; + return __atomic_compare_exchange_n ((UInt32*)addr, &val, newvalue, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); +} + +#endif + diff --git a/gnu/JackPlatformPlug_os.h b/gnu/JackPlatformPlug_os.h new file mode 100644 index 000000000..6eb6c4007 --- /dev/null +++ b/gnu/JackPlatformPlug_os.h @@ -0,0 +1,85 @@ +/* +Copyright (C) 2004-2008 Grame +Copyright (C) 2018 Greg V + +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifndef __JackPlatformPlug_gnu__ +#define __JackPlatformPlug_gnu__ + +#define jack_server_dir "/tmp" +#define jack_client_dir "/tmp" +#define JACK_DEFAULT_DRIVER "oss" + +namespace Jack +{ + struct JackRequest; + struct JackResult; + + class JackPosixMutex; + class JackPosixThread; + class JackPosixSemaphore; + + class JackSocketServerChannel; + class JackSocketClientChannel; + class JackSocketServerNotifyChannel; + class JackSocketNotifyChannel; + class JackClientSocket; + class JackNetUnixSocket; +} + +/* __JackPlatformMutex__ */ +#include "JackPosixMutex.h" +namespace Jack {typedef JackPosixMutex JackMutex; } + +/* __JackPlatformThread__ */ +#include "JackPosixThread.h" +namespace Jack { typedef JackPosixThread JackThread; } + +/* __JackPlatformSynchro__ client activation */ +#include "JackPosixSemaphore.h" +namespace Jack { typedef JackPosixSemaphore JackSynchro; } + +/* __JackPlatformChannelTransaction__ */ +#include "JackSocket.h" +namespace Jack { typedef JackClientSocket JackChannelTransaction; } + +/* __JackPlatformProcessSync__ */ +#include "JackPosixProcessSync.h" +namespace Jack { typedef JackPosixProcessSync JackProcessSync; } + +/* __JackPlatformServerChannel__ */ +#include "JackSocketServerChannel.h" +namespace Jack { typedef JackSocketServerChannel JackServerChannel; } + +/* __JackPlatformClientChannel__ */ +#include "JackSocketClientChannel.h" +namespace Jack { typedef JackSocketClientChannel JackClientChannel; } + +/* __JackPlatformServerNotifyChannel__ */ +#include "JackSocketServerNotifyChannel.h" +namespace Jack { typedef JackSocketServerNotifyChannel JackServerNotifyChannel; } + +/* __JackPlatformNotifyChannel__ */ +#include "JackSocketNotifyChannel.h" +namespace Jack { typedef JackSocketNotifyChannel JackNotifyChannel; } + +/* __JackPlatformNetSocket__ */ +#include "JackNetUnixSocket.h" +namespace Jack { typedef JackNetUnixSocket JackNetSocket; } + +#endif diff --git a/gnu/driver.h b/gnu/driver.h new file mode 100644 index 000000000..a72023087 --- /dev/null +++ b/gnu/driver.h @@ -0,0 +1 @@ +#include "../linux/driver.h" diff --git a/gnu/uptime.h b/gnu/uptime.h new file mode 100644 index 000000000..c09b80f44 --- /dev/null +++ b/gnu/uptime.h @@ -0,0 +1 @@ +#include "../linux/uptime.h" diff --git a/solaris/oss/JackOSSAdapter.cpp b/solaris/oss/JackOSSAdapter.cpp index 552f00107..f4f72d712 100644 --- a/solaris/oss/JackOSSAdapter.cpp +++ b/solaris/oss/JackOSSAdapter.cpp @@ -197,7 +197,9 @@ JackOSSAdapter::JackOSSAdapter(jack_nframes_t buffer_size, jack_nframes_t sample void JackOSSAdapter::DisplayDeviceInfo() { audio_buf_info info; +#ifdef SNDCTL_AUDIOINFO oss_audioinfo ai_in, ai_out; +#endif memset(&info, 0, sizeof(audio_buf_info)); int cap = 0; @@ -208,6 +210,7 @@ void JackOSSAdapter::DisplayDeviceInfo() if (fRWMode & kWrite) { +#ifdef OSS_SYSINFO oss_sysinfo si; if (ioctl(fOutFD, OSS_SYSINFO, &si) == -1) { jack_error("JackOSSAdapter::DisplayDeviceInfo OSS_SYSINFO failed : %s@%i, errno = %d", __FILE__, __LINE__, errno); @@ -219,6 +222,7 @@ void JackOSSAdapter::DisplayDeviceInfo() jack_info("OSS numaudioengines %d", si.numaudioengines); jack_info("OSS numcards %d", si.numcards); } +#endif jack_info("Output capabilities - %d channels : ", fPlaybackChannels); jack_info("Output block size = %d", fOutputBufferSize); @@ -246,6 +250,7 @@ void JackOSSAdapter::DisplayDeviceInfo() if (fRWMode & kRead) { +#ifdef OSS_SYSINFO oss_sysinfo si; if (ioctl(fInFD, OSS_SYSINFO, &si) == -1) { jack_error("JackOSSAdapter::DisplayDeviceInfo OSS_SYSINFO failed : %s@%i, errno = %d", __FILE__, __LINE__, errno); @@ -257,6 +262,7 @@ void JackOSSAdapter::DisplayDeviceInfo() jack_info("OSS numaudioengines %d", si.numaudioengines); jack_info("OSS numcards %d", si.numcards); } +#endif jack_info("Input capabilities - %d channels : ", fCaptureChannels); jack_info("Input block size = %d", fInputBufferSize); @@ -282,6 +288,7 @@ void JackOSSAdapter::DisplayDeviceInfo() } } +#ifdef SNDCTL_AUDIOINFO if (ioctl(fInFD, SNDCTL_AUDIOINFO, &ai_in) != -1) { jack_info("Using audio engine %d = %s for input", ai_in.dev, ai_in.name); } @@ -293,6 +300,7 @@ void JackOSSAdapter::DisplayDeviceInfo() if (ai_in.rate_source != ai_out.rate_source) { jack_info("Warning : input and output are not necessarily driven by the same clock!"); } +#endif } int JackOSSAdapter::OpenInput() diff --git a/solaris/oss/JackOSSDriver.cpp b/solaris/oss/JackOSSDriver.cpp index 0047ecc58..4aaadf591 100644 --- a/solaris/oss/JackOSSDriver.cpp +++ b/solaris/oss/JackOSSDriver.cpp @@ -150,6 +150,7 @@ void JackOSSDriver::DisplayDeviceInfo() if (fRWMode & kWrite) { +#ifdef OSS_SYSINFO oss_sysinfo si; if (ioctl(fOutFD, OSS_SYSINFO, &si) == -1) { jack_error("JackOSSDriver::DisplayDeviceInfo OSS_SYSINFO failed : %s@%i, errno = %d", __FILE__, __LINE__, errno); @@ -161,6 +162,7 @@ void JackOSSDriver::DisplayDeviceInfo() jack_info("OSS numaudioengines %d", si.numaudioengines); jack_info("OSS numcards %d", si.numcards); } +#endif jack_info("Output capabilities - %d channels : ", fPlaybackChannels); jack_info("Output block size = %d", fOutputBufferSize); @@ -188,6 +190,7 @@ void JackOSSDriver::DisplayDeviceInfo() if (fRWMode & kRead) { +#ifdef OSS_SYSINFO oss_sysinfo si; if (ioctl(fInFD, OSS_SYSINFO, &si) == -1) { jack_error("JackOSSDriver::DisplayDeviceInfo OSS_SYSINFO failed : %s@%i, errno = %d", __FILE__, __LINE__, errno); @@ -199,6 +202,7 @@ void JackOSSDriver::DisplayDeviceInfo() jack_info("OSS numaudioengines %d", si.numaudioengines); jack_info("OSS numcards %d", si.numcards); } +#endif jack_info("Input capabilities - %d channels : ", fCaptureChannels); jack_info("Input block size = %d", fInputBufferSize); diff --git a/tests/wscript b/tests/wscript index 721c0c188..14944821a 100644 --- a/tests/wscript +++ b/tests/wscript @@ -23,6 +23,8 @@ def build(bld): prog.includes = ['..', '../linux', '../posix', '../common/jack', '../common'] if bld.env['IS_FREEBSD']: prog.includes = ['..', '../freebsd', '../posix', '../common/jack', '../common'] + if bld.env['IS_HURD']: + prog.includes = ['..', '../gnu', '../posix', '../common/jack', '../common'] if bld.env['IS_SUN']: prog.includes = ['..', '../solaris', '../posix', '../common/jack', '../common'] prog.source = test_program_sources diff --git a/wscript b/wscript index f0a09c876..d17142dbb 100644 --- a/wscript +++ b/wscript @@ -221,8 +221,9 @@ def detect_platform(conf): # GNU/kFreeBSD and GNU/Hurd are treated as Linux platforms = [ # ('KEY, 'Human readable name', ['strings', 'to', 'check', 'for']) - ('IS_LINUX', 'Linux', ['gnu0', 'gnukfreebsd', 'linux', 'posix']), + ('IS_LINUX', 'Linux', ['gnukfreebsd', 'linux', 'posix']), ('IS_FREEBSD', 'FreeBSD', ['freebsd']), + ('IS_HURD', 'GNU/Hurd',['gnu0']), ('IS_MACOSX', 'MacOS X', ['darwin']), ('IS_SUN', 'SunOS', ['sunos']), ('IS_WINDOWS', 'Windows', ['cygwin', 'msys', 'win32']) @@ -548,6 +549,9 @@ def obj_add_includes(bld, obj): if bld.env['IS_FREEBSD']: obj.includes += ['freebsd', 'posix'] + if bld.env['IS_HURD']: + obj.includes += ['gnu', 'posix'] + if bld.env['IS_MACOSX']: obj.includes += ['macosx', 'posix'] @@ -579,6 +583,9 @@ def build_jackd(bld): if bld.env['IS_FREEBSD']: jackd.use += ['M', 'PTHREAD'] + if bld.env['IS_HURD']: + jackd.use += ['DL', 'M', 'PTHREAD', 'RT', 'STDC++'] + if bld.env['IS_MACOSX']: jackd.use += ['DL', 'PTHREAD'] jackd.framework = ['CoreFoundation'] @@ -810,6 +817,12 @@ def build_drivers(bld): target='oss', source=freebsd_oss_src) + if bld.env['IS_HURD']: + create_driver_obj( + bld, + target='oss', + source=oss_src) + if bld.env['IS_SUN']: create_driver_obj( bld, @@ -839,7 +852,7 @@ def build(bld): build_drivers(bld) - if bld.env['IS_LINUX'] or bld.env['IS_FREEBSD']: + if bld.env['IS_LINUX'] or bld.env['IS_FREEBSD'] or bld.env['IS_HURD']: bld.recurse('man') bld.recurse('systemd') if not bld.env['IS_WINDOWS'] and bld.env['BUILD_TESTS']: