2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
project(
|
|
|
|
|
'Rubber Band Library',
|
|
|
|
|
'c', 'cpp',
|
|
|
|
|
version: '1.9.0',
|
2021-02-10 11:09:50 +00:00
|
|
|
license: 'GPL-2.0-or-later',
|
2021-02-05 16:42:13 +00:00
|
|
|
default_options: [
|
2021-03-05 10:31:00 +00:00
|
|
|
# All Rubber Band code is actually C++98, but some compilers no
|
|
|
|
|
# longer support that
|
|
|
|
|
'cpp_std=c++14',
|
2021-02-05 16:42:13 +00:00
|
|
|
'buildtype=release',
|
|
|
|
|
'b_ndebug=if-release',
|
|
|
|
|
'b_lundef=true',
|
|
|
|
|
],
|
2021-02-09 12:06:07 +00:00
|
|
|
meson_version: '>= 0.53.0'
|
2021-02-05 16:42:13 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
rubberband_dynamic_library_version = '2.1.2'
|
|
|
|
|
|
|
|
|
|
system = build_machine.system()
|
|
|
|
|
architecture = host_machine.cpu_family()
|
2021-02-09 10:16:02 +00:00
|
|
|
cpp = meson.get_compiler('cpp')
|
|
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
pkg = import('pkgconfig')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Define the project source sets
|
|
|
|
|
|
|
|
|
|
public_headers = [
|
|
|
|
|
'rubberband/rubberband-c.h',
|
|
|
|
|
'rubberband/RubberBandStretcher.h',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
library_sources = [
|
|
|
|
|
'src/rubberband-c.cpp',
|
|
|
|
|
'src/RubberBandStretcher.cpp',
|
|
|
|
|
'src/StretcherProcess.cpp',
|
|
|
|
|
'src/StretchCalculator.cpp',
|
|
|
|
|
'src/base/Profiler.cpp',
|
|
|
|
|
'src/dsp/AudioCurveCalculator.cpp',
|
|
|
|
|
'src/audiocurves/CompoundAudioCurve.cpp',
|
|
|
|
|
'src/audiocurves/SpectralDifferenceAudioCurve.cpp',
|
|
|
|
|
'src/audiocurves/HighFrequencyAudioCurve.cpp',
|
|
|
|
|
'src/audiocurves/SilentAudioCurve.cpp',
|
|
|
|
|
'src/audiocurves/ConstantAudioCurve.cpp',
|
|
|
|
|
'src/audiocurves/PercussiveAudioCurve.cpp',
|
|
|
|
|
'src/dsp/Resampler.cpp',
|
|
|
|
|
'src/dsp/FFT.cpp',
|
|
|
|
|
'src/system/Allocators.cpp',
|
|
|
|
|
'src/system/sysutils.cpp',
|
|
|
|
|
'src/system/Thread.cpp',
|
|
|
|
|
'src/StretcherChannelData.cpp',
|
|
|
|
|
'src/StretcherImpl.cpp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
jni_sources = [
|
|
|
|
|
'src/jni/RubberBandStretcherJNI.cpp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
java_sources = [
|
|
|
|
|
'com/breakfastquay/rubberband/RubberBandStretcher.java',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
program_sources = [
|
|
|
|
|
'main/main.cpp',
|
|
|
|
|
]
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
if system == 'windows'
|
|
|
|
|
program_sources += [
|
|
|
|
|
'src/getopt/getopt.c',
|
|
|
|
|
'src/getopt/getopt_long.c'
|
|
|
|
|
]
|
|
|
|
|
endif
|
|
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
vamp_sources = [
|
|
|
|
|
'vamp/RubberBandVampPlugin.cpp',
|
|
|
|
|
'vamp/libmain.cpp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
ladspa_sources = [
|
|
|
|
|
'ladspa/RubberBandPitchShifter.cpp',
|
|
|
|
|
'ladspa/libmain.cpp',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
general_include_dirs = [
|
|
|
|
|
'rubberband',
|
|
|
|
|
'src',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Scan for any dependencies we may use later; all are optional
|
|
|
|
|
|
|
|
|
|
fftw3_dep = dependency('fftw3', version: '>= 3.0.0', required: false)
|
|
|
|
|
samplerate_dep = dependency('samplerate', version: '>= 0.1.8', required: false)
|
|
|
|
|
sndfile_dep = dependency('sndfile', version: '>= 1.0.16', required: false)
|
|
|
|
|
vamp_dep = dependency('vamp-sdk', version: '>= 2.9', required: false)
|
|
|
|
|
thread_dep = dependency('threads')
|
2021-02-09 10:16:02 +00:00
|
|
|
have_ladspa = cpp.has_header('ladspa.h')
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check FFT and resampler options and set up dependencies and paths
|
|
|
|
|
|
|
|
|
|
feature_dependencies = []
|
|
|
|
|
feature_defines = []
|
|
|
|
|
feature_libraries = []
|
|
|
|
|
feature_sources = []
|
|
|
|
|
pkgconfig_requirements = []
|
2021-02-05 17:08:17 +00:00
|
|
|
arch_flags = []
|
2021-02-05 16:42:13 +00:00
|
|
|
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary = {}
|
|
|
|
|
target_summary = {}
|
|
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
resampler = get_option('resampler')
|
|
|
|
|
fft = get_option('fft')
|
|
|
|
|
ipp_path = get_option('ipp_path')
|
2021-02-09 11:12:20 +00:00
|
|
|
ipp_needed = false
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
if fft == 'auto'
|
|
|
|
|
if system == 'darwin'
|
|
|
|
|
fft = 'vdsp'
|
|
|
|
|
else
|
|
|
|
|
fft = 'kissfft'
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if resampler == 'auto'
|
|
|
|
|
if samplerate_dep.found()
|
|
|
|
|
resampler = 'libsamplerate'
|
|
|
|
|
else
|
|
|
|
|
resampler = 'speex'
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
extra_include_args = []
|
|
|
|
|
foreach d: get_option('extra_include_dirs')
|
2021-02-09 12:13:09 +00:00
|
|
|
extra_include_args += [ '-I' + d ]
|
2021-02-09 11:12:20 +00:00
|
|
|
endforeach
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
if fft == 'kissfft'
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'FFT': 'KissFFT' }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('For FFT: using KissFFT')
|
|
|
|
|
if fftw3_dep.found()
|
|
|
|
|
message('(to use FFTW instead, reconfigure with -Dfft=fftw)')
|
|
|
|
|
endif
|
|
|
|
|
feature_sources += ['src/kissfft/kiss_fft.c', 'src/kissfft/kiss_fftr.c']
|
|
|
|
|
feature_defines += ['-DUSE_KISSFFT']
|
|
|
|
|
|
|
|
|
|
elif fft == 'fftw'
|
|
|
|
|
if fftw3_dep.found()
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'FFT': 'FFTW' }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('For FFT: using FFTW')
|
2021-02-09 11:12:20 +00:00
|
|
|
pkgconfig_requirements += fftw3_dep
|
2021-02-05 16:42:13 +00:00
|
|
|
else
|
2021-02-09 11:12:20 +00:00
|
|
|
fftw_dep = cpp.find_library('fftw3',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['fftw3.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: true)
|
2021-02-05 16:42:13 +00:00
|
|
|
endif
|
|
|
|
|
feature_dependencies += fftw3_dep
|
|
|
|
|
feature_defines += ['-DHAVE_FFTW3', '-DFFTW_DOUBLE_ONLY']
|
|
|
|
|
|
|
|
|
|
elif fft == 'vdsp'
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'FFT': 'vDSP' }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('For FFT: using vDSP')
|
|
|
|
|
feature_defines += ['-DHAVE_VDSP']
|
|
|
|
|
feature_libraries += ['-framework', 'Accelerate']
|
|
|
|
|
|
|
|
|
|
elif fft == 'ipp'
|
|
|
|
|
if ipp_path != ''
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'FFT': 'Intel IPP' }
|
2021-02-05 17:28:20 +00:00
|
|
|
message('For FFT: using IPP')
|
2021-02-05 16:42:13 +00:00
|
|
|
message('IPP path defined as ' + ipp_path)
|
|
|
|
|
else
|
|
|
|
|
error('For FFT: IPP selected, but ipp_path not specified')
|
|
|
|
|
endif
|
|
|
|
|
ipp_needed = true
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
error('Unknown or unsupported FFT option: ' + fft)
|
|
|
|
|
|
|
|
|
|
endif # fft
|
|
|
|
|
|
|
|
|
|
if resampler == 'libsamplerate'
|
|
|
|
|
if samplerate_dep.found()
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'Resampler': 'libsamplerate' }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('For resampler: using libsamplerate')
|
2021-02-09 11:12:20 +00:00
|
|
|
pkgconfig_requirements += samplerate_dep
|
2021-02-05 16:42:13 +00:00
|
|
|
else
|
2021-02-09 11:12:20 +00:00
|
|
|
samplerate_dep = cpp.find_library('samplerate',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['samplerate.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: true)
|
2021-02-05 16:42:13 +00:00
|
|
|
endif
|
|
|
|
|
feature_dependencies += samplerate_dep
|
|
|
|
|
feature_defines += ['-DHAVE_LIBSAMPLERATE']
|
|
|
|
|
|
|
|
|
|
elif resampler == 'speex'
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'Resampler': 'Speex' }
|
2021-02-05 17:28:20 +00:00
|
|
|
message('For resampler: using Speex')
|
2021-02-05 16:42:13 +00:00
|
|
|
message('(consider libsamplerate if time-varying pitch shift is required)')
|
|
|
|
|
feature_sources += ['src/speex/resample.c']
|
|
|
|
|
feature_defines += ['-DUSE_SPEEX']
|
|
|
|
|
|
|
|
|
|
elif resampler == 'ipp'
|
|
|
|
|
if ipp_path != ''
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'Resampler': 'Intel IPP' }
|
2021-02-05 17:28:20 +00:00
|
|
|
message('For resampler: using IPP')
|
2021-02-05 16:42:13 +00:00
|
|
|
message('(consider libsamplerate if time-varying pitch shift is required)')
|
|
|
|
|
message('IPP path defined as ' + ipp_path)
|
|
|
|
|
else
|
|
|
|
|
error('For resampler: IPP selected, but ipp_path not specified')
|
|
|
|
|
endif
|
|
|
|
|
ipp_needed = true
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
error('Unknown or unsupported resampler option: ' + resampler)
|
|
|
|
|
|
|
|
|
|
endif # resampler
|
|
|
|
|
|
|
|
|
|
if ipp_needed
|
|
|
|
|
feature_defines += [
|
|
|
|
|
'-DHAVE_IPP',
|
|
|
|
|
'-DUSE_IPP_STATIC',
|
|
|
|
|
'-I' + ipp_path / 'include'
|
|
|
|
|
]
|
|
|
|
|
if architecture == 'x86'
|
|
|
|
|
feature_libraries += [
|
|
|
|
|
'-L' + ipp_path / 'lib/ia32',
|
|
|
|
|
]
|
|
|
|
|
elif architecture == 'x86_64'
|
|
|
|
|
feature_libraries += [
|
|
|
|
|
'-L' + ipp_path / 'lib/intel64',
|
|
|
|
|
]
|
|
|
|
|
else
|
|
|
|
|
error('IPP is not supported for this architecture')
|
|
|
|
|
endif
|
|
|
|
|
if system == 'windows'
|
|
|
|
|
feature_libraries += [
|
|
|
|
|
'-lippsmt', '-lippvmmt', '-lippcoremt',
|
|
|
|
|
]
|
|
|
|
|
elif system == 'linux'
|
|
|
|
|
feature_libraries += [
|
|
|
|
|
'-Wl,-Bstatic', '-lipps', '-lippvm', '-lippcore', '-Wl,-Bdynamic',
|
|
|
|
|
]
|
|
|
|
|
else
|
|
|
|
|
feature_libraries += [
|
|
|
|
|
'-lipps', '-lippvm', '-lippcore',
|
|
|
|
|
]
|
|
|
|
|
endif
|
|
|
|
|
endif # ipp_needed
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
if not vamp_dep.found()
|
|
|
|
|
vamp_dep = cpp.find_library('VampPluginSDK',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['vamp-sdk.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: false)
|
2021-02-09 11:12:20 +00:00
|
|
|
if not vamp_dep.found()
|
|
|
|
|
vamp_dep = cpp.find_library('vamp-sdk',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['vamp-sdk.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: false)
|
2021-02-09 11:12:20 +00:00
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
have_vamp = vamp_dep.found()
|
|
|
|
|
|
|
|
|
|
if not sndfile_dep.found()
|
|
|
|
|
sndfile_dep = cpp.find_library('sndfile',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['sndfile.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: false)
|
2021-03-05 10:31:00 +00:00
|
|
|
if not sndfile_dep.found()
|
|
|
|
|
sndfile_dep = cpp.find_library('sndfile-1',
|
2021-03-05 10:33:27 +00:00
|
|
|
dirs: get_option('extra_lib_dirs'),
|
|
|
|
|
has_headers: ['sndfile.h'],
|
|
|
|
|
header_args: extra_include_args,
|
|
|
|
|
required: false)
|
2021-03-05 10:31:00 +00:00
|
|
|
endif
|
2021-02-09 11:12:20 +00:00
|
|
|
endif
|
|
|
|
|
have_sndfile = sndfile_dep.found()
|
|
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
# General platform and compiler expectations
|
|
|
|
|
|
|
|
|
|
ladspa_symbol_args = []
|
|
|
|
|
vamp_symbol_args = []
|
|
|
|
|
|
|
|
|
|
if get_option('buildtype').startswith('release')
|
2021-02-10 11:28:05 +00:00
|
|
|
config_summary += { 'Build type': 'Release' }
|
2021-02-05 16:42:13 +00:00
|
|
|
feature_defines += ['-DNO_THREAD_CHECKS', '-DNO_TIMING', '-DNDEBUG']
|
2021-02-10 11:28:05 +00:00
|
|
|
else
|
|
|
|
|
config_summary += { 'Build type': 'Debug' }
|
2021-02-05 16:42:13 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if system == 'darwin'
|
|
|
|
|
feature_defines += ['-DUSE_PTHREADS', '-DMALLOC_IS_ALIGNED']
|
|
|
|
|
ladspa_symbol_args += [
|
|
|
|
|
'-exported_symbols_list', meson.source_root() / 'ladspa/ladspa-plugin.list'
|
|
|
|
|
]
|
|
|
|
|
vamp_symbol_args += [
|
|
|
|
|
'-exported_symbols_list', meson.source_root() / 'vamp/vamp-plugin.list'
|
|
|
|
|
]
|
2021-02-10 14:24:17 +00:00
|
|
|
|
|
|
|
|
have_version_min = false
|
|
|
|
|
foreach arg: get_option('cpp_args')
|
|
|
|
|
message('arg is ' + arg)
|
|
|
|
|
if arg.contains('version-min')
|
|
|
|
|
have_version_min = true
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
|
2021-02-05 17:08:17 +00:00
|
|
|
if architecture == 'aarch64'
|
2021-02-10 14:24:17 +00:00
|
|
|
mac_platform_arguments = [
|
|
|
|
|
'-arch', 'arm64',
|
2021-02-05 17:08:17 +00:00
|
|
|
]
|
2021-02-10 14:24:17 +00:00
|
|
|
if not have_version_min
|
|
|
|
|
mac_platform_arguments += [ '-mmacosx-version-min=11' ]
|
|
|
|
|
endif
|
2021-02-05 17:08:17 +00:00
|
|
|
elif architecture == 'x86_64'
|
2021-02-10 14:24:17 +00:00
|
|
|
mac_platform_arguments = [
|
2021-02-05 17:08:17 +00:00
|
|
|
'-arch', 'x86_64',
|
|
|
|
|
]
|
2021-02-10 14:24:17 +00:00
|
|
|
if not have_version_min
|
|
|
|
|
mac_platform_arguments += [ '-mmacosx-version-min=10.13' ]
|
|
|
|
|
endif
|
|
|
|
|
else # begin architecture != 'aarch64' or 'x86_64'
|
|
|
|
|
error('Build for architecture ' + architecture + ' is not supported on this platform')
|
|
|
|
|
endif # end architecture
|
2021-02-05 17:08:17 +00:00
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
elif system == 'windows'
|
2021-03-05 10:31:00 +00:00
|
|
|
feature_defines += ['-D_WIN32', '-DNOMINMAX', '-D_USE_MATH_DEFINES', '-DGETOPT_API=']
|
2021-02-09 10:16:02 +00:00
|
|
|
if cpp.get_id() == 'msvc'
|
2021-02-05 16:42:13 +00:00
|
|
|
ladspa_symbol_args += ['-EXPORT:ladspa_descriptor']
|
|
|
|
|
vamp_symbol_args += ['-EXPORT:vampGetPluginDescriptor']
|
|
|
|
|
endif
|
2021-02-05 17:08:17 +00:00
|
|
|
|
|
|
|
|
else # system not darwin or windows
|
2021-02-05 16:42:13 +00:00
|
|
|
feature_defines += ['-DUSE_PTHREADS', '-DHAVE_POSIX_MEMALIGN']
|
|
|
|
|
ladspa_symbol_args += [
|
|
|
|
|
'-Wl,--version-script=' + meson.source_root() / 'ladspa/ladspa-plugin.map'
|
|
|
|
|
]
|
|
|
|
|
vamp_symbol_args += [
|
|
|
|
|
'-Wl,--version-script=' + meson.source_root() / 'vamp/vamp-plugin.map'
|
|
|
|
|
]
|
2021-02-05 17:08:17 +00:00
|
|
|
endif # system
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
general_include_dirs += get_option('extra_include_dirs')
|
|
|
|
|
general_compile_args = [ arch_flags, feature_defines ]
|
|
|
|
|
general_dependencies = [ feature_dependencies, thread_dep ]
|
|
|
|
|
|
|
|
|
|
if system == 'windows'
|
|
|
|
|
if get_option('no_shared')
|
|
|
|
|
rubberband_static_name = 'rubberband'
|
|
|
|
|
else
|
|
|
|
|
rubberband_static_name = 'rubberband-static'
|
|
|
|
|
endif
|
|
|
|
|
rubberband_dynamic_name = 'rubberband'
|
|
|
|
|
rubberband_program_name = 'rubberband-program'
|
2021-02-10 11:28:05 +00:00
|
|
|
rubberband_ladspa_name = 'ladspa-rubberband'
|
|
|
|
|
rubberband_vamp_name = 'vamp-rubberband'
|
2021-02-09 11:12:20 +00:00
|
|
|
# Meson likes libxxx.a even on Windows, and so might we for a
|
|
|
|
|
# new library, but not here
|
|
|
|
|
platform_static_name_prefix = ''
|
|
|
|
|
platform_static_name_suffix = 'lib'
|
|
|
|
|
else
|
|
|
|
|
rubberband_static_name = 'rubberband'
|
|
|
|
|
rubberband_dynamic_name = 'rubberband'
|
|
|
|
|
rubberband_program_name = 'rubberband'
|
2021-02-10 11:28:05 +00:00
|
|
|
rubberband_ladspa_name = 'ladspa-rubberband'
|
|
|
|
|
rubberband_vamp_name = 'vamp-rubberband'
|
2021-02-09 12:13:09 +00:00
|
|
|
platform_static_name_prefix = 'lib'
|
|
|
|
|
platform_static_name_suffix = 'a'
|
2021-02-09 11:12:20 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
2021-02-05 16:42:13 +00:00
|
|
|
# And the build targets: Static and dynamic libraries, command-line
|
|
|
|
|
# utility, LADSPA plugin, Vamp plugin
|
|
|
|
|
|
|
|
|
|
message('Will build Rubber Band Library static library')
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Static library': [ true, 'Name: ' + rubberband_static_name ] }
|
2021-02-05 16:42:13 +00:00
|
|
|
rubberband_static = static_library(
|
2021-02-09 11:12:20 +00:00
|
|
|
rubberband_static_name,
|
2021-02-05 16:42:13 +00:00
|
|
|
library_sources,
|
|
|
|
|
feature_sources,
|
2021-02-09 11:12:20 +00:00
|
|
|
include_directories: general_include_dirs,
|
|
|
|
|
cpp_args: general_compile_args,
|
|
|
|
|
c_args: general_compile_args,
|
|
|
|
|
dependencies: general_dependencies,
|
2021-02-05 17:28:20 +00:00
|
|
|
name_prefix: platform_static_name_prefix,
|
|
|
|
|
name_suffix: platform_static_name_suffix,
|
2021-02-05 16:42:13 +00:00
|
|
|
pic: true,
|
|
|
|
|
install: true,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
rubberband_static_dep = declare_dependency(
|
|
|
|
|
link_with: rubberband_static,
|
|
|
|
|
)
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
if not get_option('no_shared')
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Shared library': [ true, 'Name: ' + rubberband_dynamic_name ] }
|
|
|
|
|
message('Will build Rubber Band Library shared library')
|
2021-02-09 11:12:20 +00:00
|
|
|
rubberband_dynamic = shared_library(
|
|
|
|
|
rubberband_dynamic_name,
|
|
|
|
|
objects: rubberband_static.extract_all_objects(),
|
|
|
|
|
link_args: [
|
|
|
|
|
arch_flags,
|
|
|
|
|
feature_libraries,
|
|
|
|
|
],
|
|
|
|
|
dependencies: general_dependencies,
|
|
|
|
|
version: rubberband_dynamic_library_version,
|
|
|
|
|
install: true,
|
|
|
|
|
)
|
|
|
|
|
else
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Shared library': false }
|
2021-02-09 11:12:20 +00:00
|
|
|
message('Not building Rubber Band Library dynamic library: no_shared option set')
|
|
|
|
|
endif
|
2021-02-05 16:42:13 +00:00
|
|
|
|
|
|
|
|
if have_ladspa
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'LADSPA plugin': [ true, 'Name: ' + rubberband_ladspa_name ] }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('Will build LADSPA plugin')
|
|
|
|
|
rubberband_ladspa = shared_library(
|
2021-02-10 11:28:05 +00:00
|
|
|
rubberband_ladspa_name,
|
2021-02-05 16:42:13 +00:00
|
|
|
ladspa_sources,
|
2021-02-09 11:12:20 +00:00
|
|
|
include_directories: general_include_dirs,
|
|
|
|
|
cpp_args: general_compile_args,
|
|
|
|
|
c_args: general_compile_args,
|
2021-02-05 16:42:13 +00:00
|
|
|
link_args: [
|
2021-02-05 17:08:17 +00:00
|
|
|
arch_flags,
|
2021-02-05 16:42:13 +00:00
|
|
|
feature_libraries,
|
|
|
|
|
ladspa_symbol_args,
|
|
|
|
|
],
|
|
|
|
|
dependencies: [
|
|
|
|
|
rubberband_static_dep,
|
2021-02-09 11:12:20 +00:00
|
|
|
general_dependencies,
|
2021-02-05 16:42:13 +00:00
|
|
|
],
|
|
|
|
|
name_prefix: '',
|
|
|
|
|
install: true,
|
|
|
|
|
install_dir: get_option('libdir') / 'ladspa',
|
|
|
|
|
)
|
|
|
|
|
install_data(
|
|
|
|
|
'ladspa/ladspa-rubberband.cat',
|
|
|
|
|
install_dir: get_option('libdir') / 'ladspa',
|
|
|
|
|
)
|
|
|
|
|
install_data(
|
|
|
|
|
'ladspa/ladspa-rubberband.rdf',
|
|
|
|
|
install_dir: get_option('datadir') / 'ladspa/rdf',
|
|
|
|
|
)
|
|
|
|
|
else
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'LADSPA plugin': false }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('Not building LADSPA plugin: ladspa.h header not found')
|
|
|
|
|
endif
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
if have_vamp
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Vamp plugin': [ true, 'Name: ' + rubberband_vamp_name ] }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('Will build Vamp plugin')
|
|
|
|
|
rubberband_vamp = shared_library(
|
2021-02-10 11:28:05 +00:00
|
|
|
rubberband_vamp_name,
|
2021-02-05 16:42:13 +00:00
|
|
|
vamp_sources,
|
2021-02-09 11:12:20 +00:00
|
|
|
include_directories: general_include_dirs,
|
|
|
|
|
cpp_args: general_compile_args,
|
|
|
|
|
c_args: general_compile_args,
|
2021-02-05 16:42:13 +00:00
|
|
|
link_args: [
|
2021-02-05 17:08:17 +00:00
|
|
|
arch_flags,
|
2021-02-05 16:42:13 +00:00
|
|
|
feature_libraries,
|
|
|
|
|
vamp_symbol_args,
|
|
|
|
|
],
|
|
|
|
|
dependencies: [
|
|
|
|
|
rubberband_static_dep,
|
2021-02-09 11:12:20 +00:00
|
|
|
general_dependencies,
|
2021-02-05 16:42:13 +00:00
|
|
|
vamp_dep,
|
|
|
|
|
],
|
|
|
|
|
name_prefix: '',
|
|
|
|
|
install: true,
|
|
|
|
|
install_dir: get_option('libdir') / 'vamp',
|
|
|
|
|
)
|
|
|
|
|
install_data(
|
|
|
|
|
'vamp/vamp-rubberband.cat',
|
|
|
|
|
install_dir: get_option('libdir') / 'vamp',
|
|
|
|
|
)
|
|
|
|
|
else
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Vamp plugin': false }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('Not building Vamp plugin: Vamp dependency not found')
|
|
|
|
|
endif
|
|
|
|
|
|
2021-02-09 11:12:20 +00:00
|
|
|
if have_sndfile
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Command-line utility': [ true, 'Name: ' + rubberband_program_name ] }
|
2021-02-05 16:42:13 +00:00
|
|
|
message('Will build command-line utility')
|
|
|
|
|
rubberband_program = executable(
|
2021-02-09 11:12:20 +00:00
|
|
|
rubberband_program_name,
|
2021-02-05 16:42:13 +00:00
|
|
|
program_sources,
|
2021-02-09 11:12:20 +00:00
|
|
|
include_directories: general_include_dirs,
|
|
|
|
|
cpp_args: general_compile_args,
|
|
|
|
|
c_args: general_compile_args,
|
2021-02-05 16:42:13 +00:00
|
|
|
link_args: [
|
2021-02-05 17:08:17 +00:00
|
|
|
arch_flags,
|
2021-02-05 16:42:13 +00:00
|
|
|
feature_libraries,
|
|
|
|
|
],
|
|
|
|
|
dependencies: [
|
|
|
|
|
rubberband_static_dep,
|
2021-02-09 11:12:20 +00:00
|
|
|
general_dependencies,
|
2021-02-05 16:42:13 +00:00
|
|
|
sndfile_dep,
|
|
|
|
|
],
|
|
|
|
|
install: true,
|
|
|
|
|
)
|
|
|
|
|
else
|
2021-02-10 11:28:05 +00:00
|
|
|
target_summary += { 'Command-line utility': false }
|
2021-02-09 10:16:02 +00:00
|
|
|
message('Not building command-line utility: libsndfile dependency not found')
|
2021-02-05 16:42:13 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
pkg.generate(
|
|
|
|
|
name: 'rubberband',
|
|
|
|
|
description: 'Audio time-stretching and pitch-shifting library',
|
|
|
|
|
url: 'https://breakfastquay.com/rubberband/',
|
|
|
|
|
version: meson.project_version(),
|
|
|
|
|
requires: pkgconfig_requirements,
|
|
|
|
|
libraries: '-L${libdir} -lrubberband',
|
|
|
|
|
extra_cflags: '-I${includedir}',
|
|
|
|
|
)
|
2021-02-10 11:28:05 +00:00
|
|
|
|
|
|
|
|
summary({'prefix': get_option('prefix'),
|
|
|
|
|
'bindir': get_option('bindir'),
|
|
|
|
|
'libdir': get_option('libdir'),
|
|
|
|
|
'datadir': get_option('datadir'),
|
|
|
|
|
}, section: 'Directories')
|
|
|
|
|
|
2021-02-10 14:24:17 +00:00
|
|
|
summary(config_summary + { 'Architecture': architecture },
|
2021-03-05 10:33:27 +00:00
|
|
|
section: 'Configuration', bool_yn: true)
|
2021-02-10 11:28:05 +00:00
|
|
|
summary(target_summary, section: 'Build targets', bool_yn: true)
|