| @@ -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 | |||
| @@ -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 */ | |||
| @@ -39,6 +39,8 @@ | |||
| #include <jack/uuid.h> | |||
| #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(); | |||
| @@ -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' | |||
| @@ -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', | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -0,0 +1 @@ | |||
| #include "../linux/driver.h" | |||
| @@ -0,0 +1 @@ | |||
| #include "../linux/uptime.h" | |||
| @@ -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() | |||
| @@ -149,6 +149,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); | |||
| @@ -160,6 +161,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); | |||
| @@ -187,6 +189,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); | |||
| @@ -198,6 +201,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); | |||
| @@ -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 | |||
| @@ -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'] | |||
| @@ -811,6 +818,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, | |||
| @@ -840,7 +853,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']: | |||