Skip to content

Commit

Permalink
Add GNU/Hurd support
Browse files Browse the repository at this point in the history
Signed-off-by: Samuel Thibault <[email protected]>
  • Loading branch information
sthibaul committed Nov 10, 2024
1 parent 43e1173 commit a2eef83
Show file tree
Hide file tree
Showing 13 changed files with 207 additions and 11 deletions.
2 changes: 1 addition & 1 deletion common/JackAudioAdapterFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions common/JackMetadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 */
Expand Down
4 changes: 3 additions & 1 deletion common/JackMetadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@

#include <jack/uuid.h>

#include "driver_interface.h"

#ifdef __cplusplus
extern "C" {
#endif
Expand Down Expand Up @@ -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();
Expand Down
46 changes: 44 additions & 2 deletions common/wscript
Original file line number Diff line number Diff line change
Expand Up @@ -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']:
Expand All @@ -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]
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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')
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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',
Expand Down Expand Up @@ -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'
Expand Down
7 changes: 7 additions & 0 deletions dbus/wscript
Original file line number Diff line number Diff line change
Expand Up @@ -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']

Expand Down Expand Up @@ -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',
Expand Down
31 changes: 31 additions & 0 deletions gnu/JackAtomic_os.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
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)
{
return __sync_bool_compare_and_swap ((UInt32*)addr, value, newvalue);
}

#endif

85 changes: 85 additions & 0 deletions gnu/JackPlatformPlug_os.h
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions gnu/driver.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../linux/driver.h"
1 change: 1 addition & 0 deletions gnu/uptime.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../linux/uptime.h"
8 changes: 8 additions & 0 deletions solaris/oss/JackOSSAdapter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
}
Expand All @@ -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()
Expand Down
4 changes: 4 additions & 0 deletions solaris/oss/JackOSSDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down
Loading

0 comments on commit a2eef83

Please sign in to comment.