-gst_plugin_scanner = executable('gst-plugin-scanner',
+executable('gst-plugin-scanner',
'gst-plugin-scanner.c',
c_args : gst_c_args,
include_directories : [configinc],
install: true,
)
+# Used in test env setup to make tests find plugin scanner in build tree
gst_scanner_dir = meson.current_build_dir()
if bashcomp_found
- gst_completion_helper = executable('gst-completion-helper',
+ executable('gst-completion-helper',
'gst-completion-helper.c',
c_args : gst_c_args,
include_directories : [configinc],
)
endif
-# FIXME: gst-ptp-helper
+# Check PTP support
+have_ptp = false
+if host_machine.system() == 'android'
+ message('PTP not supported on Android because of permissions.')
+elif host_machine.system() == 'windows'
+ message('PTP not supported on Windows, not ported yet.')
+elif host_machine.system() == 'ios' # FIXME: is it also darwing on iOS ?
+ message('PTP not supported on iOS because of permissions.')
+elif host_machine.system() == 'darwin'
+ if cc.has_header('MobileCoreServices/MobileCoreServices.h')
+ message('PTP not supported on iOS because of permissions.')
+ else
+ have_ptp = true
+ endif
+elif ['linux', 'netbsd', 'freebsd', 'openbsd', 'kfreebsd', 'dragonfly', 'solaris'].contains(host_machine.system())
+ message('PTP supported on ' + host_machine.system() + '.')
+ have_ptp = true
+endif
+
+if have_ptp
+ cdata.set('HAVE_PTP', 1, description : 'PTP support available')
+
+ if cc.compiles('''#include <sys/ioctl.h>
+ #include <net/if.h>
+ int some_func (void) {
+ struct ifreq ifr;
+ struct ifconf ifc;
+ ioctl(0, SIOCGIFCONF, &ifc);
+ ioctl(0, SIOCGIFFLAGS, &ifr);
+ ioctl(0, SIOCGIFHWADDR, &ifr);
+ return ifr.ifr_hwaddr.sa_data[0];
+ }''',
+ name : 'SIOCGIFCONF, SIOCGIFFLAGS and SIOCGIFHWADDR available')
+ cdata.set('HAVE_SIOCGIFCONF_SIOCGIFFLAGS_SIOCGIFHWADDR', 1,
+ description : 'SIOCGIFCONF, SIOCGIFFLAGS and SIOCGIFHWADDR is available')
+ endif
+
+ if cc.compiles('''#include <ifaddrs.h>
+ #include <net/if.h>
+ #include <net/if_dl.h>
+ int some_func (void) {
+ struct ifaddrs *ifaddr;
+ getifaddrs(&ifaddr);
+ return (ifaddr->ifa_flags & IFF_LOOPBACK) && ifaddr->ifa_addr->sa_family != AF_LINK;
+ }''', name : 'getifaddrs() and AF_LINK available')
+ cdata.set('HAVE_GETIFADDRS_AF_LINK', 1,
+ description : 'getifaddrs() and AF_LINK is available')
+ endif
+
+ gst_ptp_have_cap = false
+ cap_dep = []
+ if cc.has_header('sys/capability.h')
+ cap_dep = find_library('cap', required : false)
+ if cap_dep.found() and cc.has_function('cap_init', dependencies : cap_dep)
+ gst_ptp_have_cap = true
+ endif
+ endif
+
+ setcap = find_program('setcap', '/usr/bin/setcap', '/sbin/setcap', required : false)
+
+ # user/group to change to in gst-ptp-helper
+ ptp_helper_setuid_user = get_option('with-ptp-helper-setuid-user')
+ if ptp_helper_setuid_user != ''
+ cdata.set_quoted('HAVE_PTP_HELPER_SETUID_USER', ptp_helper_setuid_user,
+ description : 'PTP helper setuid user')
+ endif
+ ptp_helper_setuid_group = get_option('with-ptp-helper-setuid-group')
+ if ptp_helper_setuid_group != ''
+ cdata.set_quoted('HAVE_PTP_HELPER_SETUID_GROUP', ptp_helper_setuid_group,
+ description : 'PTP helper setuid group')
+ endif
+
+ # how to install gst-ptp-helper
+ with_ptp_helper_permissions = get_option('with-ptp-helper-permissions')
+ if with_ptp_helper_permissions == 'auto'
+ if gst_ptp_have_cap and setcap.found()
+ with_ptp_helper_permissions = 'capabilities'
+ else
+ with_ptp_helper_permissions = 'setuid-root'
+ endif
+ endif
+ message('How to install gst-ptp-helper: ' + with_ptp_helper_permissions)
+
+ if with_ptp_helper_permissions == 'none'
+ # nothing to do
+ elif with_ptp_helper_permissions == 'setuid-root'
+ cdata.set('HAVE_PTP_HELPER_SETUID', 1,
+ description : 'Use setuid-root for permissions in PTP helper')
+ elif with_ptp_helper_permissions == 'capabilities'
+ if not setcap.found()
+ error('capabilities-based ptp-helper-permissions requested, but could not find setcap tool.')
+ endif
+ cdata.set('HAVE_PTP_HELPER_CAPABILITIES', 1,
+ description : 'Use capabilities for permissions in PTP helper')
+ else
+ error('Unexpected ptp helper permissions value: ' + with_ptp_helper_permissions)
+ endif
+
+ executable('gst-ptp-helper', 'gst-ptp-helper.c',
+ c_args : gst_c_args,
+ include_directories : [configinc, libsinc],
+ dependencies : [gio_dep, gobject_dep, glib_dep, mathlib, gst_dep, cap_dep],
+ link_with : [printf_lib],
+ install_dir : helpers_install_dir,
+ install : true)
+
+ meson.add_install_script('ptp_helper_post_install.sh',
+ helpers_install_dir, with_ptp_helper_permissions,
+ setcap.found() ? setcap.path() : '')
+endif