0f02bbc2fe
This enables the JACK output plugin on Windows, but doesn't link against libjack64.dll, instead loads the DLL at runtime with LoadLibrary(). This kludge avoids the extremely fragile JACK shared memory protocol by using the system's libjack64.dll, without requiring the same DLL at build time.
48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
import os, shutil
|
|
import re
|
|
|
|
from .project import Project
|
|
|
|
# This class installs just the public headers and a fake pkg-config
|
|
# file which defines the macro "DYNAMIC_JACK". This tells MPD's JACK
|
|
# output plugin to load the libjack64.dll dynamically using
|
|
# LoadLibrary(). This kludge avoids the runtime DLL dependency for
|
|
# users who don't use JACK, but still allows using the system JACK
|
|
# client library.
|
|
#
|
|
# The problem with JACK is that it uses an extremely fragile shared
|
|
# memory protocol to communicate with the daemon. One needs to use
|
|
# daemon and client library from the same build. That's why we don't
|
|
# build libjack statically here; it would probably not be compatible
|
|
# with the user's JACK daemon.
|
|
|
|
class JackProject(Project):
|
|
def __init__(self, url, md5, installed,
|
|
**kwargs):
|
|
m = re.match(r'.*/v([\d.]+)\.tar\.gz$', url)
|
|
self.version = m.group(1)
|
|
Project.__init__(self, url, md5, installed,
|
|
name='jack2', version=self.version,
|
|
base='jack2-' + self.version,
|
|
**kwargs)
|
|
|
|
def build(self, toolchain):
|
|
src = self.unpack(toolchain)
|
|
|
|
includes = ['jack.h', 'ringbuffer.h', 'systemdeps.h', 'transport.h', 'types.h', 'weakmacros.h']
|
|
includedir = os.path.join(toolchain.install_prefix, 'include', 'jack')
|
|
os.makedirs(includedir, exist_ok=True)
|
|
|
|
for i in includes:
|
|
shutil.copyfile(os.path.join(src, 'common', 'jack', i),
|
|
os.path.join(includedir, i))
|
|
|
|
with open(os.path.join(toolchain.install_prefix, 'lib', 'pkgconfig', 'jack.pc'), 'w') as f:
|
|
print("prefix=" + toolchain.install_prefix, file=f)
|
|
print("", file=f)
|
|
print("Name: jack", file=f)
|
|
print("Description: dummy", file=f)
|
|
print("Version: " + self.version, file=f)
|
|
print("Libs: ", file=f)
|
|
print("Cflags: -DDYNAMIC_JACK", file=f)
|