'gstjackutil.c',
]
-libjack_dep = dependency('jack', version : '>= 1.9.7', required : get_option('jack'))
-
-if libjack_dep.found()
- gstjack = library('gstjack',
- jack_sources,
- c_args : gst_plugins_good_args + ['-DHAVE_JACK_1_9_7'],
- include_directories : [configinc, libsinc],
- dependencies : [gst_dep, gstbase_dep, gstaudio_dep, libjack_dep],
- install : true,
- install_dir : plugins_install_dir,
- )
- pkgconfig.generate(gstjack, install_dir : plugins_pkgconfig_install_dir)
- plugins += [gstjack]
+jack_option = get_option('jack')
+if jack_option.disabled()
+ subdir_done()
endif
+
+jack_incdirs = [configinc, libsinc]
+
+libjack_dep = dependency('jack', version : '>= 1.9.7', required : false)
+
+if not libjack_dep.found()
+ fs = import('fs')
+ host_cpu = host_machine.cpu_family()
+ jack_maybe_installed = false
+ error_msg = '"jack" option is enabled but '
+ if (host_system == 'windows' and build_machine.system() == 'windows')
+ # Need to detect whether we're running on 64-bit Windows or not.
+ # If `C:/Program Files (x86)/` exists, we're running on 64-bit Windows, and
+ # C:/Program Files/ contains 64-bit programs. Else, we're on 32-bit Windows
+ # and C:/Program Files/ contains 32-bit programs.
+ #
+ # The user could either have a 32-bit JACK installation or a 64-bit one.
+ # When building for 32-bit x86, we need to check for both.
+ if fs.is_dir('C:/Program Files (x86)')
+ jack64_install_dir = 'C:/Program Files/JACK2'
+ jack32_install_dir = 'C:/Program Files (x86)/JACK2'
+ else
+ jack64_install_dir = ''
+ jack32_install_dir = 'C:/Program Files/JACK2'
+ endif
+
+ if host_cpu == 'x86'
+ jack_install_dir = jack32_install_dir
+ jack_maybe_installed = fs.is_dir(jack32_install_dir / 'include')
+ if not jack_maybe_installed and jack64_install_dir != ''
+ jack_maybe_installed = fs.is_dir(jack64_install_dir / 'include')
+ jack_install_dir = jack64_install_dir
+ endif
+ elif jack64_install_dir != ''
+ jack_maybe_installed = import('fs').is_dir(jack64_install_dir / 'include')
+ jack_install_dir = jack64_install_dir
+ endif
+
+ error_msg += 'JACK2 installation could not be found'
+ else
+ error_msg += 'JACK dependency could not be found'
+ endif
+
+ if not jack_maybe_installed
+ if jack_option.enabled()
+ error(error_msg)
+ endif
+ subdir_done()
+ endif
+
+ if not host_cpu.startswith('x86')
+ if jack_option.enabled()
+ error('On Windows, JACK only supports x86 32-bit and 64-bit')
+ endif
+ subdir_done()
+ endif
+
+ if host_cpu == 'x86'
+ jack_libname = 'libjack'
+ if jack_install_dir == jack64_install_dir
+ jack_libdir = jack_install_dir / 'lib32'
+ else
+ jack_libdir = jack_install_dir / 'lib'
+ endif
+ else
+ jack_libname = 'libjack64'
+ jack_libdir = jack_install_dir / 'lib'
+ endif
+
+ inc = include_directories(jack_install_dir / 'include')
+ libjack_dep = cc.find_library(jack_libname,
+ dirs: jack_libdir,
+ has_headers: 'jack/jack.h',
+ header_include_directories: inc,
+ required: jack_option)
+ # This won't be needed once we require a meson version that includes this:
+ # https://github.com/mesonbuild/meson/pull/10428
+ jack_incdirs += inc
+endif
+
+gstjack = library('gstjack',
+ jack_sources,
+ c_args : gst_plugins_good_args + ['-DHAVE_JACK_1_9_7'],
+ include_directories : jack_incdirs,
+ dependencies : [gst_dep, gstbase_dep, gstaudio_dep, libjack_dep],
+ install : true,
+ install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstjack, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstjack]